var App = (function() {
	var onReadyTasks = [];
	var onLoadTasks = [];
	
	var app = {
		init: function() {
		},
		
		cart: function(callback) {
			this.connect('cart', null, callback);
		},
		
		connect: function(message, args, callback) {
			new Ajax.Request('/app.php?message=' + message, {
				parameters: args,
				onSuccess: function(tx) {
					callback(tx.responseJSON);
				}.bind(this),
				
				onFailure: function(tx) {
					alert('fail', tx);
				}
			});
		},
		
		onReady: function(task) {
			if (onReadyTasks) {
				onReadyTasks.push(task);
			} else {
				task();
			}
		},
		
		onLoad: function(task) {
			if (onLoadTasks) {
				onLoadTasks.push(task);
			} else {
				task();
			}
		}
	};
	
	document.observe('dom:loaded', function(ev) {
		app.init();
		
		var tasks = onReadyTasks;
		onReadyTasks = null;
		tasks.each(function(task) { task(); });
	});
	
	Event.observe(window, 'load', function(ev) {
		var tasks = onLoadTasks;
		onLoadTasks = null;
		tasks.each(function(task) { task(); });
	});
	
	return app;
})();

	
