
// Definition de la classe principale 'ChooseGrades'
// NB: L'ordre des methodes est important
function ChooseGrades()
{
	// Champs prives
	var _ribbon = new Ribbon("ribbon");
	var _sideTabs = new SideTabs("sideTabs");
	var _pageContent = $(".PageContent");
	var _tooltip = new Tooltip("tooltip");
	var _summaryBox = new SummaryBox("summaryBox");
	var _bar = new ConfigProgressBar("progressBar");
	var _tabs = new Tabs("tabs");
	var _loading = new Loading("loading");
	var _financingBox = new FinancingBox("financingBox");
	var _financingEventDispatcher = new FinancingEventDispatcher();
	var _priceFormatter = new ScriptCurrencyFormatter();
	var _dynamicIFrame = new DynamicIFrame();
	
	// Variables de la page
	var _currentGrCommercialName = eval("currentGrCommercialName");
	var _rootActions = eval("rootActions");
	var _fromLabel = eval("fromLabel");
	var _saveUrl = eval("saveUrl");
	var _taxLabel = eval("taxLabel");

	var GetCurrentItemId = function()
	{
		// On fait un substring car il n'y a pas de catégories
		var id = $('.SideTabSelected').attr('id');
		return id.substring(1);
	}
	
	// Affiche/masque les bonnes informations
	var UpdateContent = function()
	{
		var toShow = GetCurrentItemId();
		$(".MiddleCell .Content[id!='" + toShow + "']").hide();
		$(".MiddleCell .Content[id='" + toShow + "']").show();
		$(".MiddleCell").css("visibility", "visible");
		return toShow;
	}
	
	// Y a-t-il des DCUs dans mes sideTabs ?
	// Si oui, il faut les charger
	var LoadDcus = function(offsetProvider)
	{
		var dcus = $(".DcuPicto").each(function()
		{
			var dcu = new DcuPicto($(this).attr("id"));
			dcu.OnLoad();
			dcu.SetOffsetProvider(offsetProvider);
		});
	}
	
	var UpdateUrls = function(grCommercialName)
	{
		if (_currentGrCommercialName == grCommercialName)
			return false;
		
		_currentGrCommercialName = grCommercialName;
		
		_bar.ResetUrls();
		_bar.SetParameter("GrCommercialName", grCommercialName);
				
		_summaryBox.ResetUrls();
		_summaryBox.SetParameter("GrCommercialName", grCommercialName);
				
		_ribbon.ActionBar.RemoveAllActions(_rootActions.split('|'));
		_ribbon.SetParameter("GrCommercialName", grCommercialName);
		
		if (_financingBox && Tools_IsNullOrEmpty(_financingBox.SessionId) == false)
			_financingEventDispatcher.SetFinancingSessionId(_financingBox.SessionId);
		
		return true;
	}

	var OverBudget_SideTabItem_OnClick = function()
	{
		var itemId = $(this).attr("id").substring(1);
		var params = Tools_GetQueryParams(_summaryBox.NextStepCleanUrl);
		params["GrCommercialName"] = itemId;
		_ribbon.FinancingOverBudget.ShowAlert(params, $(this));
	}
	
	var UpdateOverBudgetIcons = function()
	{
		var budget = _ribbon.FinancingOverBudget.GetCurrentBudget();
		if (_ribbon.FinancingOverBudget.IsDisabled || !budget)
			return ;

		$(".SideTabItem").each(function()
		{
			var itemId = $(this).attr("id").substring(1);
			var metas = _sideTabs.GetMetadatas(itemId);
			if (metas && metas.PriceValue > budget.Max)
			{
				$(this).addClass("OverBudget");
				$(this).bind("click", OverBudget_SideTabItem_OnClick);
			}
			else
			{
				$(this).removeClass("OverBudget");
				$(this).unbind("click", OverBudget_SideTabItem_OnClick);
			}
		});
	}
	
	var OnFinancingResponse = function(sender, args)
	{
		if (!args.Failed)
			UpdateOverBudgetIcons();
		_dynamicIFrame.TryResize();
	}
			
	var UpdateFinancing = function(grCommercialName, reset)
	{
		if (_financingBox.IsDisabled)
			return ;
		
		var params = Tools_GetQueryParams(reset ? _summaryBox.NextStepCleanUrl : null);
		params["GrCommercialName"] = grCommercialName;
		_financingBox.UpdateContent(params);
	}
	
	var OnGrCommercialNameChanged = function(sender, args)
	{
		var itemId = UpdateContent();
		var changed = UpdateUrls(itemId);	
		if (changed)
		{
			var metas = _sideTabs.GetMetadatas(itemId);
			_summaryBox.SetPrices(metas.PriceValue,
				metas.DiscountValue, metas.BasePriceValue, _fromLabel);
		}
		UpdateFinancing(itemId, changed);
		_dynamicIFrame.TryResize();
	}
		
	var SetTooltips = function()
	{
		$(".Features img").each(function()
		{
			var image = $(this);
			var description = image.attr("alt");
			if (description != "")
				image.hover(function()
				{
					image.attr("alt", "");
					var pos = Tools_GetPosition(image.get(0));
					_tooltip.SetText(description);
					_tooltip.Show(pos.Left + image.width(), pos.Top);
				},
				function() { _tooltip.Hide() });
		});
	}

	var SetLoading = function()
	{
		$(".SummaryBoxFooter .Button").click(_loading.Show);
		$(".ConfigProgressBar a").click(function()
		{
			if ($(this).attr("href") != "#" && $(this).parent(".Disabled").length == 0)
				_loading.Show();
		});
	}
	
	// Methodes publiques
	this.OnLoad = function()
	{
		_ribbon.OnLoad();
		_ribbon.BodyGroupChanged.push(function() { _loading.Show() });
		_ribbon.FinancingOverBudget.OnResponse.push(OnFinancingResponse);
		UpdateOverBudgetIcons();
	
		_bar.OnLoad();
		
		_sideTabs.OnLoad();
		_sideTabs.SelectionChanged.push(OnGrCommercialNameChanged);
		
		var offsetProvider = function()	{ return { Top: -_pageContent.offset().top, Left: 0 } };
		LoadDcus(offsetProvider);
		
		_tooltip.SetOffsetProvider(offsetProvider);
		SetTooltips();
		
		// Attention: l'ordre est TRES important !
		_financingBox.OnLoad();
		_financingEventDispatcher.OnLoad(_financingBox, _bar, _ribbon, _summaryBox);
		_financingBox.OnResponse.push(OnFinancingResponse);
				
		OnGrCommercialNameChanged();
		
		_tabs.OnLoad(_ribbon, _loading);
				
		setTimeout(function()
		{
			_summaryBox.OnLoad();
			_summaryBox.OnNextStep.push(function() { _financingBox.Abort() });
			
		}, 0);
		
		SetLoading();
	}
}

$(document).ready(function()
{
	new ChooseGrades().OnLoad();
	
	$(window).test(function() { $(document.body).append("<div>"
		+ "<img style='position:absolute;left:250px;top:150px;z-index:999' "
		+ "src='/CfgAPImagesCentral/Images/Medias/Lightbox/test.gif' />"
		+ "</div>"); });
});
