﻿(function ($) {
	$.monitorClicks = function (pageUrl) {
		$(document).bind("ready", function () {
			var gaClickEvent = function () {
				var $this = $(this);

				var trail = [];

				var clicked = $this.attr("href") || "";
				if (clicked[0] === '#') clicked = "";
				if (clicked === "") clicked = $this.text() || "";
				if (clicked === "") clicked = $this.attr("text") || "";
				if (clicked === "") clicked = $this.attr("value") || "";

				var $current = $this;
				while (true) {
					var $parent = $current.parent();
					if ($parent.length === 0) break;

					var id = $current.attr("id") || "";
					if (id !== "" && $("[id='" + id + "']").length === 1) {
						trail.push("#" + id);
						break;
					}

					var tagName = $current[0].tagName;
					var $tags = $parent.children(tagName);
					trail.push(($tags.length === 1) ? tagName : (tagName + ":eq(" + $tags.index($current) + ")"));

					$current = $parent;
				}

				var label = "";
				for (var index = trail.length - 1; index >= 0; index--) {
					if (label !== "") label += " > ";
					label += trail[index];
				}
				if (clicked !== "") label += (" (" + clicked + ")");

				_gaq.push(['_trackEvent', 'Click in page', pageUrl, label]);

				return true;
			};

			// Better than "live" because it works with tabs, images etc
			window.setTimeout(function () {
				$("a").bind("click", gaClickEvent);
				$("area").bind("click", gaClickEvent);
				$("input[type='submit']").bind("click", gaClickEvent);
				$("input[type='button']").bind("click", gaClickEvent);
			}, 100);
		});
	};
})(jQuery);

