var App = App || {};
App.Controls = App.Controls || {};

App.Presenters.ProgressPresenter = function(nprogress) {
	var nesting = 0;

	function start() {
		nesting ++;

		if (nesting === 1) {
			nprogress.start();
		}
	}

	function reset() {
		nesting = 0;
	}

	function done() {
		if (nesting) {
			nesting --;
		}

		if (nesting <= 0) {
			nprogress.done();
		} else {
			nprogress.inc();
		}
	}

	window.setInterval(function() {
		if (nesting <= 0) {
			nprogress.done();
		}
	}, 1000);

	return {
		start: start,
		done: done,
		reset: reset,
	};

};

App.DI.registerSingleton('progress', ['nprogress'], App.Presenters.ProgressPresenter);