
/**
 * Client code for tracking clicks (or key press visits) of links via the server
 */
var ClickTracker = {

	// 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();

		// fire a synchronous xmlrpc
		$.xmlrpc('/rpc/xmlrpc', 'clicktracker.trackClick',
			[a.id, text, a.href, url, a.className], null, false);
	},

	// 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.click(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;
	}
};

jQuery.fn.ScrollToAbove = function(s, transition) {
	o = jQuery.speed(s);
	return this.queue('interfaceFX',function(){
		new jQuery.fx.ScrollToAbove(this, o, transition);
	});
};

// Initialise on document ready:
$(document).ready(function() {
	ClickTracker.initialize();
});
