
var JSONPRequestManager ={
	requests: [],

	newRequest: function(request) {
		this.requests.push(request);
		return this.requests.length-1;
	}
};


var JSONPRequest = new Class({
	Implements: [Options, Events],

	options: {
		url: '',
		parameters: { x: '' },
		immediate: false
	},

	initialize: function(options) {
		this.setOptions(options);
		this.index = JSONPRequestManager.newRequest(this);
		if (this.options.immediate) this.execute();
	},

	execute: function() {
		this.asset = new Asset.javascript(
			this.options.url + '?' + Hash.toQueryString(this.options.parameters) +
			'&callback=JSONPRequestManager.requests[' + this.index + '].callback' +
			'&' + new Date().getTime()
		);
		// console.log('Request: ', this.asset.get('src'));
	},

	callback: function(data) {
		// console.log('Callback: ', this.asset.get('src'));
		// if (console.dir) console.dir(data);
		if ($defined(data.result)) {
			this.fireEvent('complete', [data.result]);
		}
		this.asset.destroy();
	}
});
