if (!window.com) com = {};
if (!com.quest) com.quest = {};
if (!com.quest.fxm) com.quest.fxm = {};

com.quest.fxm.Metrics = {
	start: function(name, time) {
		this._metrics[name] = time != undefined ? time : new Date().getTime();
	},
	stop: function(name) {
		var end = new Date().getTime();
		var metrics = this._metrics;
		var start = metrics[name];

		if (start) {
			delete metrics[name];

			var time = end - start;
			try {
				var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('MSXML2.XMLHTTP');
				xhr.open('get', '/rx?ets=' + name + ':' + time + '&pn=' + encodeURI(window.location), true);
				xhr.send('');
			}
			catch (e) {
				// ignore
			}
		}
	},

	_metrics: {},

	_addEventListener: function(element, event, listener) {
		if (element.addEventListener) {
			element.addEventListener(event, listener, false);
		}
		else if (element.attachEvent) {
			element.attachEvent('on' + event, listener);
		}
	},
	_loadListener: function() {
		com.quest.fxm.Metrics.stop('load');
	},
	_unloadListener: function() {
		com.quest.fxm.Metrics.stop('unload');
	},
	_registerListeners: function() {
		var startPageTime = new Date().getTime();
		this.start('load', startPageTime);
		this.start('unload', startPageTime);
		this._addEventListener(window, 'load', this._loadListener);
		this._addEventListener(window, 'unload', this._unloadListener);
	}
};

com.quest.fxm.Metrics._registerListeners();

