
Namespace.register('aegoncz.funds');

/* FundProvider Class
------------------------------------------------------------*/
aegoncz.funds.FundProvider = new Class({
	
	Implements:Events,
	
	url:null,
	requests:[],
	
	initialize:function(url) {
		this.url = url;
	}
});

aegoncz.funds.FundProvider.implement({
	
	getAverageDataByFunds:function(funds) {
		return this.getDataByFunds(funds,true);
	},
	
	getDataByFunds:function(funds,average) {
		
		// set action
		var qs = average ? 'action=getAverageByFunds' : 'action=getDataByFunds';
		
		// pick uid
		qs = '&uid=' + new Date().getTime();
		
		// build funds
		for (var i=0;i<funds.length;i++) {
			qs += '&f' + i + '=' + funds[i].id + '&r' + i + '=' + funds[i].ratio;
		}
		
		// build final request
		var request = new Request.JSON({
			url:this.url,
			method:'get'
		});
		
		request.addEvent('request',this.onRequest.bind(this));
		request.addEvent('failure',this.onFailure.bind(this));
		request.addEvent('success',this.onSuccess.bind(this));
		
		request.send({data:qs});
		
		this.requests.push(request);
	},
	
	onRequest:function(e) {
		
		
		this.fireEvent(mirabeau.events.Event.REQUEST);
	},
	
	onFailure:function(e) {
		
		
		this.fireEvent(mirabeau.events.Event.FAILURE);
	},
	
	onSuccess:function(responseJSON,responseText) {
		
		if (!responseJSON) {
			this.onFailure();
			return;
		}
		
		if (responseJSON.Status != 'success') {
			this.onFailure();
			return;
		}
		
		var funds = [];
		
		for (var i=0;responseJSON.Funds[i]!=undefined;i++) {
			var fundJSON = responseJSON.Funds[i];
			var fund = new aegoncz.funds.Fund(fundJSON.FundCode);
				fund.data = fundJSON.Data;
				fund.average = fund.id === 'AVG';
			
			fund.setOffset(fundJSON.FromTS * 1000);
			
			funds.push(fund);
		}
		
		this.fireEvent(mirabeau.events.Event.SUCCESS,{'funds':funds});
	}
});


