local g_metrics_group = nil;
local g_element = nil;

SSC = (ProductID() == "sm-ssc");

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 JudgmentTransformCommand( self, params )
	local x = 0
	local y = -30
	if params.bReverse then y = y * -1 end
	-- This makes no sense and wasn't even being used due to misspelling.
	-- if bCentered then y = y * 2 end
	self:x( x )
	self:y( y )
end

function JudgmentTransformSharedCommand( self, params )
	local x = -120
	local y = -30
	if params.bReverse then y = 30 end
	if params.Player == PLAYER_1 then x = 120 end
	self:x( x )
	self:y( y )
end

function ComboTransformCommand( self, params )
	local x = 0
	local y = 30
	if params.bReverse then y = y * -1 end

	if params.bCentered then
		if params.bReverse then
			y = y - 30
		else
			y = y + 40
		end
	end
	self:x( x )
	self:y( y )
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/MostPlayed_05-08.crs,Courses/Default/MostPlayed_09-12.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,
	String = function ( sName )
		local sClass = Var "LoadingScreen";
	        return THEME:GetString( sClass, sName )
	end
};

function TextBannerAfterSet(self,param) 
	local Title=self:GetChild("Title"); 
	local Subtitle=self:GetChild("Subtitle"); 
	--local Artist=self:GetChild("Artist"); 
	if Subtitle:GetText() == "" then 
		(cmd(maxwidth,208;y,0;zoom,1.0;))(Title);
		(cmd(visible,false))(Subtitle);
		--(cmd(zoom,0.66;maxwidth,300;y,7))(Artist);
	else
		-- subtitle below
		(cmd(zoom,1;y,-6;zoom,0.9;))(Title);
		(cmd(visible,true;zoom,0.6;y,7))(Subtitle); 
		--(cmd(zoom,0.66;maxwidth,300;y,9))(Artist); 
	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.

