local song = Def.ActorFrame {
	Def.Banner{
		SetMessageCommand=function(self,param)
			if param.Song then
				-- BIG BEEFY RAM YEEEEEEEAH -aj
				self:LoadFromSong(param.Song);
				--[[
				if param.HasFocus then
					self:LoadFromSong(param.Song);
				else
					-- load a cached banner in an attempt to boost speed
					-- at the expense of quality -aj
					self:LoadFromCachedBanner(param.Song:GetBannerPath())
				end;
				--]]
			end;
			self:zoomto(204,204);
		end;
	};
	LoadActor( "songframe" );

	LoadActor("lyrics")..{
		InitCommand=cmd(y,144;visible,false);
		ShowCommand=cmd(stoptweening;linear,0.1;diffusealpha,1);
		HideCommand=cmd(stoptweening;linear,0.1;diffusealpha,0);
		SetMessageCommand=function(self,param)
			if not param.HasFocus then
				-- if it's not focused don't bother showing it.
				self:visible(false);
			else
				if not GAMESTATE:IsCourseMode() then
					local hasLyrics = false;
					local song = param.Song;
					if song then hasLyrics = song:HasLyrics() end;
					self:visible(hasLyrics);
				end;
			end;
		end;
	};

	-- a hack that needs to be worked on -aj
	--[[
	Def.Actor{
		SetMessageCommand=function(self)
			local wheelItem = self:GetParent():GetParent();
			local songName = wheelItem:GetChild("SongName");
			songName:diffuse(color("#00FFAA"))
		end;
	};
	--]]
};

return song;