
/**
 * Client code for tracking clicks (or key press visits) of links via the server
 */
var ClickTracker = {

	// fires the delegate function if the event is an enter press
	trapEnterKey: function(callback) {
		return function(e) {
			if(e.keyCode == 13) {
				return callback(e);
			}
		}
	},

	// track a click on a link
	trackClick: function(e,url) {
		var elem = e.target || e.srcElement;
		var a = (elem.tagName == 'IMG') ? elem.parentNode : elem;
		var text = (elem.tagName == 'IMG') ? elem.alt : $(a).text();

		$.xmlrpcNotify('/rpc/xmlrpc', 'clicktracker.trackClick',
			[a.id, text, a.href, url, a.className]);
	},

	// track a visit to a page
	trackVisit: function(url,referer) {
		$.xmlrpcNotify('/rpc/xmlrpc', 'clicktracker.trackVisit',
			[url,referer]);
	},

	// monitor clicking or enter pressing of an element, calls the provided
	// function with the element and the url of the current page
	monitorClick: function(elem, func) {
		var clickFunc = function(e) {
			func(e,ClickTracker.getPageUrl());
		}
		elem.mousedown(clickFunc).keydown(ClickTracker.trapEnterKey(clickFunc));
	},

	// initialize the links of the page
	initialize: function() {
		if (console.time) console.time('Clicktracker initialized');
		//$('a').click(function(){return false;});
		ClickTracker.monitorClick($('a'),ClickTracker.trackClick);
		ClickTracker.trackVisit(ClickTracker.getPageUrl(),document.referrer);
		if (console.timeEnd) console.timeEnd('Clicktracker initialized');
	},

	// get the current page url
	getPageUrl: function() {
		return location.protocol + '//' + location.host + location.pathname;
	}
};

// Initialise on document ready:
$(document).ready(function() {
	ClickTracker.initialize();
});
