
// Definition de la classe 'FinancingEventDispatcher'
// NB: L'ordre des methodes est important
function FinancingEventDispatcher()
{
	// Variables privées
	
	var _bar = null;
	var _ribbon = null;
	var _summaryBox = null;
	var _financingBox = null;
	var _this = this;
	
	// Methodes privées
	
	var OnFinancingClose = function(sender, args)
	{
		if (args.DisableAlerts)
		{
			_bar.SetParameter("FinancingAlerts", "0");
			_summaryBox.SetParameter("FinancingAlerts", "0");
			_ribbon.SetParameter("FinancingAlerts", "0");
		}
	}
		
	this.SetFinancingSessionId = function(sessionId)
	{
		if (_financingBox.IsDisabled || Tools_IsNullOrEmpty(sessionId))
			return ;
		
		_financingBox.SessionId = sessionId;
		_ribbon.FinancingOverBudget.SessionId = sessionId;
		_bar.SetParameter("FinancingSessionId", sessionId);
		_summaryBox.SetParameter("FinancingSessionId", sessionId);
		_ribbon.SetParameter("FinancingSessionId", sessionId);
	}
		
	var UpdateFinancingBudget = function(min, max, budget)
	{
		// On met à jour la barre de progression
		_bar.SetParameter("FinancingMin", min);
		_bar.SetParameter("FinancingMax", max);
		_bar.SetParameter("FinancingBudget", budget);
		
		// On met à jour le lien "Suivant"
		_summaryBox.SetParameter("FinancingMin", min);
		_summaryBox.SetParameter("FinancingMax", max);
		_summaryBox.SetParameter("FinancingBudget", budget);
		
		// On met à jour la barre d'actions
		_ribbon.SetParameter("FinancingMin", min);
		_ribbon.SetParameter("FinancingMax", max);
		_ribbon.SetParameter("FinancingBudget", budget);
		_ribbon.FinancingOverBudget.SetCurrentBudget(min, max, budget);
		_ribbon.UpdateOverBudgetIcons();
	}
	
	var OnFinancingResponse = function(sender, args)
	{
		if (args.Failed)
			return ;
	
		_this.SetFinancingSessionId(args.SessionId);
		
		// L'approche budgétaire est activée et le budget a été mis à jour
		if (args.MonthlyBudget)
			UpdateFinancingBudget(args.Min, args.Max, args.MonthlyBudget);
	}

	var OnFinancingCustom = function(sender, args)
	{
		_bar.SetParameter("FinancingCustom", "1");
		_summaryBox.SetParameter("FinancingCustom", "1");
		_ribbon.SetParameter("FinancingCustom", "1");
	}
	
	// Methodes publiques
	
	this.OnLoad = function(financingBox, bar, ribbon, summaryBox)
	{
		_bar = bar;
		_ribbon = ribbon;
		_summaryBox = summaryBox;
		
		_financingBox = financingBox;
		if (Tools_IsNullOrEmpty(_financingBox.SessionId) == false)
			_this.SetFinancingSessionId(_financingBox.SessionId);
	
		_ribbon.FinancingOverBudget.OnResponse.push(OnFinancingResponse);
		_ribbon.FinancingOverBudget.OnClose.push(OnFinancingClose);
		_financingBox.OnResponse.push(OnFinancingResponse);
		_financingBox.OnCustom.push(OnFinancingCustom);
	}
}
