var _Analytics = {
	slots : [],
	addVariables : function(variables) {
		var v = variables.constructor === Array ? variables : variables.analytics,
			i,
			len;
		for(i = 0, len = v.length; i < len; i++) {
			this.addVariable.apply(this, v[i]);
		}
	},
	addVariable : function(index, name, value, opt_scope) {
		this.slots[index-1] = [name,value,opt_scope];
	},

	setVariables : function() {
		var cv, i, length;
		for(i = 0, length = this.slots.length; i < length; i++) {
			cv = ['_setCustomVar', i+1].concat(this.slots[i]);
			window._gaq.push(cv);
		}
	},

	sendPageView : function(url) {
		_gaq.push(['_trackPageview', url]);
	},

	trackEvent : function() {
		/* arguments == [category, action, opt_label, opt_value] */
		var event = [].slice.call(arguments, 0);
		event.unshift('_trackEvent');
		_gaq.push(event);
	},

	detectSubscriberStatus : function(callback) {
		var thisContext = this;
		$.getJSON('/subscriptions/has_subscription?no_wrap=true', function(result) {
			try {
				if(result.error === 0 && parseInt(result.has_subscription, 10)) {
					thisContext.addVariable(4, 'viewer status', 'subscriber', 1);
				}
				else if(!result.error) {
					thisContext.addVariable(4, 'viewer status', 'non-subscriber', 1);
				}
			} catch (x) {
			}
			finally {
				callback();
			}
		});
	},


	trackLinkClick : function(link, category, action, label) {
		this.trackEvent(category, action, label);
		setTimeout(function() { document.location = link.href; }, 100);
	},

	loadTimer : function(continuation, condition) {
		var interval = setInterval(function() {
			if(condition()) {
				clearInterval(interval);
				continuation();
			}
		}, 50);
	}

};
