// requires perca-basic.js

var Pat = function(cfg) {
	var TIMEOUT = 3000; // 3 seconds

	var config = cfg ? cfg : {};

	var mouseLogging = 1;
	var keyboardLogging = 1;

	var lastActivity;
	var total = 0;
	var logEl = config.l ? document.getElementById(config.l) : '';
	var saveMessage = config.saveMessage;
	var msgEl = logEl ? PERCA.DomUtils.createText(logEl, '') : '';	
	
	function logActivity() {
		var now = new Date();
		var sinceLastActivity = now.getTime() - lastActivity.getTime();
		if (sinceLastActivity > TIMEOUT) {
			sinceLastActivity = TIMEOUT;
		}
		total += sinceLastActivity;
		lastActivity = now;
		debug("added: " + sinceLastActivity + ((sinceLastActivity == TIMEOUT) ? " timeout" : " ") + ", total = " + total); 
	}
	
	function logActivityMouse() {
		if (mouseLogging) {
			logActivity();
		}
	}
	
	function logActivityKeyboard() {
		if (keyboardLogging) {
			logActivity();
		}
	}
	
	this.stopML = function() {
		mouseLogging = 0;
	};
	
	this.startML = function() {
		mouseLogging = 1;
	};
	
	this.stopKBL = function() {
		keyboardLogging = 0;
	};
	
	this.startKBL = function() {
		keyboardLogging = 1;
	};
	
	function createXMLHttpRequest() {
		if (window.XMLHttpRequest) {
			return new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			return new ActiveXObject('Microsoft.XMLHTTP')
		} else {
     		return null;
		}
	}
	
	function postLog(params) {
		var ajax = createXMLHttpRequest();
		if (ajax) {
			ajax.onreadystatechange = function() {};
		}
		ajax.open('POST', config.o, true);
		ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajax.setRequestHeader("Content-length", params.length);
		ajax.setRequestHeader("Connection", "close");
		ajax.send(params);
	}
	
	function write() {
		var params = "u=" + config.u + "&i=" + config.i + "&t=" + total
			+ "&r=" + document.referrer;
		if (msgEl) { // hack: the presence of msgEl signifies debugging
			// alert(params);
		}
		postLog(params);
	}
	this.write = write;
	
	function debug(msg) {
		if (msgEl) {
			msgEl.nodeValue = msg;
		}
	}
	
	lastActivity = new Date();
	document.onmousemove = logActivityMouse;
	document.onkeypress = logActivityKeyboard;
	window.onunload = write;
}
