﻿(function ($) {
	$.gaTracker = function (code, opts) {
		opts = jQuery.extend({
			external: '/external/',
			mailto: '/mailtos/',
			download: '/downloads/',
			extensions: ['pdf', 'doc', 'xls', 'csv', 'jpg', 'gif', 'mp3', 'swf', 'txt', 'ppt', 'zip', 'gz', 'dmg', 'xml', 'js']
		}, opts);

		// add tracking code to the current page
		function addTracking() {
			$.pageTracker = _gat._getTracker(code);
			$.pageTracker._setDomainName("none");
			$.pageTracker._setAllowLinker(true);
			$.pageTracker._setAllowHash(false);
			$.pageTracker._trackPageview();

			// examine every link in the page
			$('a').live('click', function () {
				var u = $(this).attr('href');

				if (typeof (u) != 'undefined' && u != '#') {
					trackingURL = '';

					if (u.indexOf('mailto:') == 0) { // mailto link - decorate
						trackingURL = opts.mailto + u.substring(7);
						$.pageTracker._trackPageview(trackingURL);
					} else if (u.indexOf('://') == -1) { // no protocol or mailto - internal link - check extension
						var ext = u.split('.')[u.split('.').length - 1];
						var exts = opts.extensions;

						if (u.indexOf('/demo') != -1) {
							$.pageTracker._trackPageview(u);
						}
						else {
							for (i = 0; i < exts.length; i++) {
								if (ext == exts[i]) {
									trackingURL = opts.download + u;
									$.pageTracker._trackPageview(trackingURL);
									break;
								}
							}
						}
					} else if (u.indexOf('.stardock.com/cart') != -1) {
						trackingURL = u;
						$.pageTracker._link(trackingURL);
						return false;
					} else {
						// complete URL - check domain
						var regex = /([^:\/]+)*(?::\/\/)*([^:\/]+)(:[0-9]+)*\/?/i;
						var linkparts = regex.exec(u);
						var urlparts = regex.exec(location.href);
						if (linkparts[2] != urlparts[2])
							trackingURL = opts.external + u;
						$.pageTracker._trackPageview(trackingURL);
					}
				}
			});
			$('form.gatrack').live('submit', function () {
				$.pageTracker._linkByPost(this);
			});
		}

		// include the external GA script in try/catch to play nice
		function initGA() {
			try {
				// determine whether to include the normal or SSL version
				var gaURL = (location.href.indexOf('https') == 0 ? 'https://ssl' : 'http://www');
				gaURL += '.google-analytics.com/ga.js';

				// include the script
				$.getScript(gaURL, function () {
					addTracking();
				});
			} catch (err) {
				// log any failure
				console.log('Failed to load Google Analytics:' + err);
			}
		}

		initGA();
	}
})(jQuery);

