var timer;
var mousex;
var mousey;
var oldmousex;
var oldmousey;
var oldscrollTop=0;
var oldscrollLeft=0;
var sizex=0;
var sizey=0;
var log=new Array();
var trackLog=new Array();
var starttime=false;

function init() {
    if (window.event) {
        if (document.captureEvents){
          document.captureEvents(Event.MOUSEMOVE);
          document.captureEvents(Event.KEYDOWN);
        } else {
          window.captureEvents(Event.MOUSEMOVE);
          window.captureEvents(Event.KEYDOWN);
        }
    }
  document.onmousemove = getXY;
  document.onmousedown = mouseDown;
  document.onkeydown = keyDown;
	timer=window.setTimeout('track();',250);
	trackLog.push('0u'+window.location.href);
	trackLog.push('0s'+screen.width+'/'+screen.height);
	trackLog.push('0r'+document.referrer);
	trackLog.push('0a'+navigator.userAgent);
	trackLog.push('0i'+mtracking);
}

function createInfo(layerContent) {
	document.getElementById('mouseInfoLayer').innerHTML=layerContent;
	document.getElementById('mouseInfoLayer').style.left = mousex+15+'px';
	document.getElementById('mouseInfoLayer').style.top = mousey+'px';
	document.getElementById('mouseInfoLayer').style.visibility = 'visible';
}

function closeInfo() {
	document.getElementById('mouseInfoLayer').innerHTML='';
	document.getElementById('mouseInfoLayer').style.visibility = 'hidden';
}

function getXY(e) {
    if(!e) e = window.event;
    var body = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
    window.document.documentElement : window.document.body || null;
    ieBugfix=true;
    mousex = e.pageX ? e.pageX : e.clientX + body.scrollLeft;
    mousey = e.pageY ? e.pageY : e.clientY + body.scrollTop;
    ieBugfix=false;
}

var countdown=0;

function track(){
	countdown++;
	var i=document.getElementById('infobox');
	timer=window.setTimeout('track();',250);
	var size=getSize();
	var scroll=getScrollXY();
	if (scroll[1]!=oldscrollTop || scroll[0]!=oldscrollLeft || size[0]!=sizex || size[1]!=sizey) {
		oldscrollleft=scroll[0];
		oldscrollTop=scroll[1];
		sizex=size[0];
		sizey=size[1];
    trackLog.push(jetzt()+'w'+sizex+'/'+sizey+'/'+oldscrollTop+'/'+oldscrollLeft);
	}
	if (oldmousex!=mousex || oldmousey!=mousey) {
    trackLog.push(jetzt()+'m'+mousex+'/'+mousey);
		oldmousex=mousex;
		oldmousey=mousey;
	}
	if (countdown>20 && trackLog.length>0) senden(false);
}

function jetzt(){
	var z = new Date();
	var t=z.getTime();
	if (!starttime) starttime=t;
	return(Math.floor((t-starttime)/100));
}

var uid=0;
var waitforid=false;

function senden(ende){
  if ((!http_done) && (!ende)) {
    return;
  }
  if (ende) {
  	trackLog.push(jetzt()+'e');
  }
    var msg='';
	for (t in trackLog){
	  msg+=trackLog[t]+'\r\n';
	}
	if (uid) {
		trackLog=new Array();
		makePOSTRequest(document.location.protocol+'//'+document.location.hostname+receiver,'append='+uid+'&tracklog='+encodeURIComponent(msg));
		countdown=0;
	} else {
		if (!waitforid)	{
			waitforid=true;
			trackLog=new Array();
			makePOSTRequest(document.location.protocol+'//'+document.location.hostname+receiver,'tracklog='+encodeURIComponent(msg));
			countdown=0;
		}
	}
}

function ende(){
	senden(true);
}

window.onunload=ende;

function getScrollXY() {
	var scrOfX = 0, scrOfY = 0;

	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX, scrOfY ];
}


function mouseDown(e){
    if(!e) e = window.event;
    var body = (window.document.compatMode && window.document.compatMode == "CSS1Compat") ?
    window.document.documentElement : window.document.body || null;
    mousey = e.pageY ? e.pageY : e.clientY + body.scrollTop;
    mousex = e.pageX ? e.pageX : e.clientX + body.scrollLeft;
    trackLog.push(jetzt()+'c'+mousex+'/'+mousey);
    senden(false);
}

function keyDown(e){
    if(!e) e = window.event;
    trackLog.push(jetzt()+'k'); // Donīt track keys,just notice ! Would not be nice !
    senden(false);
}

function getSize()
{
   var x = 0;
   var y = 0;
   if (self.innerHeight)
   {
           x = self.innerWidth;
           y = self.innerHeight;
   }
   else if (document.documentElement && document.documentElement.clientHeight)
   {
           x = document.documentElement.clientWidth;
           y = document.documentElement.clientHeight;
   }
   else if (document.body)
   {
           x = document.body.clientWidth;
           y = document.body.clientHeight;
   }

   return [x,y];
}


   var http_request = false;
   var http_done = true;
   function makePOSTRequest(url, parameters) {
      http_request = false;
      http_done=false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
         	// set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (typeof(http_request)=='undefined') return(false);
      if (!http_request) {
//         alert('Cannot create XMLHTTP instance');
         return(false);
      }

      http_request.onreadystatechange = alertContents;
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
   }

   function alertContents() {
   	  if (typeof(http_request)=='undefined') return;
      if (!http_request) return;
      if (http_request.readyState == 4) {
      	 http_done=true;
         if (http_request.status == 200) {
         	if (waitforid) {
	            uid = http_request.responseText;
    	        waitforid=false;
         	}
         }
      }
   }

init();
