--- Miscellaneous helpers
-- @module 02_Other

local g_metrics_group = nil
local g_element = nil

-- legacy:
SSC = true

function LoadFallbackB()
	-- Load the fallback BGA for the element that is currently being loaded.
	-- The fallback metrics group and element name will come either from LuaThreadVars
	-- (loading from C++) or from the Lua globals above (loading from Lua).

	--Warn( "g_element " .. (g_element or "") )
	--Warn( "MatchingElement " .. (Var 'MatchingElement' or "") )
	--Warn( "g_metrics_group " .. (g_metrics_group or "") )
	--Warn( "MatchingMetricsGroup " .. (Var 'MatchingMetricsGroup' or "") )

	local metrics_group = g_metrics_group or Var "MatchingMetricsGroup"
	local element = g_element or Var "MatchingElement"
	local fallback = THEME:GetMetric(metrics_group, "Fallback")

	local old_metrics_group = g_metrics_group
	local old_element = g_element

	local path
	path, g_metrics_group, g_element = THEME:GetPathInfoB(fallback, element)
	--Trace('path ' .. path )
	local t = LoadActor(path)

	g_metrics_group = old_metrics_group
	g_element = old_element

	return t
end

function FormatNumSongsPlayed(num)
	local s = num .. " song"
	if s == 1 then
		s = s .. " "
	else
		s = s .. "s"
	end
	return s .. " played"
end

function GetEditModeSubScreens()
	return "ScreenMiniMenuEditHelp," ..
		"ScreenMiniMenuMainMenu," ..
			"ScreenMiniMenuAreaMenu," ..
				"ScreenMiniMenuStepsInformation," ..
					"ScreenMiniMenuSongInformation," ..
						"ScreenMiniMenuBackgroundChange," ..
							"ScreenMiniMenuInsertTapAttack," ..
								"ScreenMiniMenuInsertCourseAttack," .. "ScreenMiniMenuCourseDisplay," .. "ScreenEditOptions"
end

function GetCoursesToShowRanking()
	local CoursesToShowRanking = PREFSMAN:GetPreference("CoursesToShowRanking")
	if CoursesToShowRanking ~= "" then
		return CoursesToShowRanking
	end
	return "Courses/Default/MostPlayed_01-04.crs,Courses/Default/ChallengingRandom5.crs,Courses/Default/Jupiter.crs"
end

-- Get a metric from the currently-loading screen.  This is only valid while loading
-- an actor, such as from File or InitCommand attributes; not from commands.
Screen.Metric = function(sName)
	local sClass = Var "LoadingScreen"
	return THEME:GetMetric(sClass, sName)
end
ScreenMetric = Screen.Metric

Screen.String = function(sName)
	local sClass = Var "LoadingScreen"
	return THEME:GetString(sClass, sName)
end
ScreenString = Screen.String

function TextBannerAfterSet(self, param)
	local Title = self:GetChild("Title")
	local Subtitle = self:GetChild("Subtitle")

	if Subtitle:GetText() == "" then
		Title:maxwidth(208)
		Title:y(0)
		Title:zoom(1)

		Subtitle:visible(false)
	else
		Title:zoom(1)
		Title:y(-6)
		Title:zoom(0.9)

		-- subtitle below title
		Subtitle:visible(true)
		Subtitle:zoom(0.6)
		Subtitle:y(7)
	end
end

function Song:GetStageCost()
	return self:IsMarathon() and 3 or self:IsLong() and 2 or 1
end

function OptionsNavigationMode()
	if PREFSMAN:GetPreference("ThreeKeyNavigation") then
		return "toggle"
	else
		return "normal"
	end
end

-- (c) 2005 Chris Danford
-- All rights reserved.
--
-- Permission is hereby granted, free of charge, to any person obtaining a
-- copy of this software and associated documentation files (the
-- "Software"), to deal in the Software without restriction, including
-- without limitation the rights to use, copy, modify, merge, publish,
-- distribute, and/or sell copies of the Software, and to permit persons to
-- whom the Software is furnished to do so, provided that the above
-- copyright notice(s) and this permission notice appear in all copies of
-- the Software and that both the above copyright notice(s) and this
-- permission notice appear in supporting documentation.
--
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
-- THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS
-- INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT
-- OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-- OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-- PERFORMANCE OF THIS SOFTWARE.
