asd.DataSource = new Class
({
	Implements: Events,
	
	data: null,
	__url: null,
	__method: null,
	__request: null,
	__requestData: null,
	
	initialize: function(url, method)
	{
		this.__url = url;
		this.__method = method || 'POST';
		this.__requestData = {};
	
		this.__request = new Request.JSON
		({
			'url': this.__url, 
			onComplete: this.__handleRequestComplete.bind(this)
		});
	},
	
	addRequestData: function(requestData)
	{
		this.__requestData = $merge(this.__requestData, requestData);
	},
	
	request: function(requestData)
	{
 		requestData = $merge(this.__requestData, requestData);
 		
 		for (var key in this.__requestData)
 		{
 			if (typeof this.__requestData[key] == 'function')
 				requestData[key] = this.__requestData[key]();
 			
 			if (typeof requestData[key] == 'array' || typeof requestData[key] == 'object')
 				requestData[key] = JSON.encode(requestData[key]);
 		}
 		
		if (this.__method == 'GET')
			this.__request.get(requestData);
		else
			this.__request.post(requestData);
	},
	
	__handleRequestComplete: function(resultData)
	{
		if (resultData)
			this.data = resultData.data;
		
		this.fireEvent('complete', resultData);
	}
});
