class DataManager {
	constructor() {
		this.listeners = { };

		this.lastUpdate = new Date().getTime();
		this.loadDataRequest = new Request(OnTime.REQUEST_URI + "DataManager/Fetch", "POST", this.loadedData.bind(this), this.loadDataError.bind(this));

		setInterval(this.loadData.bind(this), 7000);
	}

	registerDataListener(type, callback, errorCallback = null) {
		if (!(type in this.listeners)) {
			this.listeners[type] = [ ];
		}

		this.listeners[type].push({
			callback,
			errorCallback
		});
	}

	loadData() {
		this.loadDataRequest.send({
			types: Object.keys(this.listeners),
			last_update: this.lastUpdate
		});
	}

	loadDataError(request, status, error) {
		for (var type in this.listeners) {
			var listeners = this.listeners[type];

			for (var i = 0; i < listeners.length; i++) {
				if (listeners[i].errorCallback) {
					listeners[i].errorCallback();
				}
			}
		}
	}

	loadedData(data) {
		for (var type in this.listeners) {
			var listeners = this.listeners[type];

			for (var i = 0; i < listeners.length; i++) {
				if (listeners[i].callback) {
					listeners[i].callback();
				}
			}
		}

		this.lastUpdate = new Date().getTime();
	}
}