

// Definition de la classe 'FinancingOverBudget'
// NB: L'ordre des methodes est important
function FinancingOverBudget(id)
{
	this.IsDisabled = false;
	this.SessionId = '';
	this.OnResponse = new Array();
	this.OnClose = new Array();

	// Champs et methodes privees
	var _this = this;
	var _currentRequest = null;
	var _overBudgetBox = new AlertBox(id + "_overBudgetBox");
	var _ribbon = null;
	var _currentElement = null;
	var _currentParams = null;
	var _currentBudget = null;
	var _disableAlerts = false;

	var OnSuccess = function(response)
	{
		_currentRequest = null;
		if (_this.IsDisabled)
			return ;

		_this.SessionId = response["financingSessionId"];
		_overBudgetBox.SetTitle(response["header"]);
		_overBudgetBox.SetMessage(response["body"]);
		_overBudgetBox.SetButtonText("ok", response["ok"]);
		_overBudgetBox.SetButtonText("cancel", response["cancel"]);
		_overBudgetBox.SetCheckBoxText("alerts", response["checkbox"]);
		_overBudgetBox.Show();

		Tools_DispatchEvent(_this.OnResponse, _this, { SessionId: _this.SessionId });
	}

	var OnFailed = function(response)
	{
		_currentRequest = null;
		_this.Disable();
	}
	
	var UpdateBudget = function()
	{
		// L'utilisateur a accepté l'upselling: on met à jour le budget
		_currentParams["isSummary"] = false;
		Ajax_Execute(_financingServiceUrl, "GetMonthlyContent", _currentParams, function(response)
		{
			if (_this.IsDisabled)
				return ;

			// On signale à tout le monde que le budget a été mis à jour
			_this.SessionId = response["financingSessionId"];
			_currentBudget = 
			{
				SessionId: _this.SessionId,
				Min: response["mmin"],
				MinLabel: response["mmin_label"],
				Max: response["mmax"],
				MonthlyBudget: response["mref"]
			};
			Tools_DispatchEvent(_this.OnResponse, _this, _currentBudget);
	
			// On simule un clic sur l'élement originel
			if (_currentElement && _currentElement.length > 0)
				_currentElement.click();
			
			Close(true);
			
		}, OnFailed);
	}

	this.ShowAlert = function(params, element)
	{
		if (_this.IsDisabled || _currentElement)
			return ;

		_currentElement = element;
		
		var sessionId = params["FinancingSessionId"];
		if (_currentBudget)
		{
			params["FinancingMin"] = _currentBudget.Min;
			params["FinancingMax"] = _currentBudget.Max;
			params["FinancingBudget"] = _currentBudget.MonthlyBudget;
		}
		
		_currentParams = params;
		_this.SessionId = Tools_IsNullOrEmpty(sessionId) ? '' : sessionId;
		
		if (_disableAlerts)
			UpdateBudget();
		else
		{
			_ribbon.SetShadow(true);
			_currentRequest = Ajax_Execute(_financingServiceUrl,
				"GetOverBudgetLabels", params, OnSuccess, OnFailed);
		}
	}
	
	var Close = function(isOK)
	{
		_currentElement = null;
		_currentParams = null;
		_overBudgetBox.Hide();
		_ribbon.SetShadow(false);
		
		Tools_DispatchEvent(_this.OnClose, _this, { IsOK: isOK, DisableAlerts: _disableAlerts });
	}

	this.Abort = function()
	{
		_ribbon.SetShadow(false);
		if (_currentRequest)
		{
			_currentRequest.abort();
			_currentRequest = null;
		}
	}

	this.Disable = function()
	{
		_this.IsDisabled = true;
		_this.Abort();
	}
	
	this.SetCurrentBudget = function(min, max, monthlyBudget)
	{
		_currentBudget = { Min: min, Max: max, MonthlyBudget: monthlyBudget };
	}

	this.GetCurrentBudget = function()
	{
		if (_currentBudget)
			return { Min: _currentBudget.Min, Max: _currentBudget.Max, MonthlyBudget: _currentBudget.MonthlyBudget };
	
		var params = Tools_GetQueryParams();
		var monthlyBudget = params["FinancingBudget"];
		if (monthlyBudget)
			return { Min: params["FinancingMin"], Max: params["FinancingMax"], MonthlyBudget: monthlyBudget };
			
		return null;
	}


	var SetOverBudgetEvents = function()
	{
		_overBudgetBox.OnLoad();
		_overBudgetBox.Click.push(function(sender, args)
		{
			_disableAlerts = (args.Checked && Tools_ArrayIndexOf(args.Checked, 'alerts') != -1);	
		
			// Si l'utilisateur a cliqué sur 'Annuler' on s'en va
			if (args.ButtonId == "cancel")
			{
				Close(false);
				return ;
			}
			
			UpdateBudget();
		});
	}

	this.OnLoad = function(ribbon)
	{
		_ribbon = ribbon;
	
		if (!_financingServiceUrl)
			_this.Disable();
		else
		{
			_disableAlerts = (Tools_GetQueryParams()["FinancingAlerts"] == '0');
			SetOverBudgetEvents();
		}
	}
}


