require( "datastream" ) -- Have you tried Datastream (by DecoDaMan and Janorkie)?
include( "vgui/vgui_vote.lua" )


g_PlayableGamemodes = {}
g_bGotGamemodesTable = false

function RcvPlayableGamemodes( handler, id, rawdata, procdata ) 
      
	g_PlayableGamemodes = procdata
	g_bGotGamemodesTable = true
	 
 end 
 
datastream.Hook( "PlayableGamemodes", RcvPlayableGamemodes ); 

local GMChooser = nil 
local function GetVoteScreen()

	if ( IsValid( GMChooser ) ) then return GMChooser end
	
	GMChooser = vgui.Create( "VoteScreen" )
	return GMChooser

end
 

function GM:ShowGamemodeChooser()

	local votescreen = GetVoteScreen()
	votescreen:ChooseGamemode()

end

function GM:GamemodeWon( mode )

	local votescreen = GetVoteScreen()
	votescreen:FlashItem( mode )

end

function GM:ChangingGamemode( mode, map )

	local votescreen = GetVoteScreen()
	votescreen:FlashItem( map )

end

function GM:ShowMapChooserForGamemode( gmname )

	local votescreen = GetVoteScreen()
	votescreen:ChooseMap( gmname )

end


local ClassChooser = nil 
cl_classsuicide = CreateConVar( "cl_classsuicide", "0", { FCVAR_ARCHIVE } )

function GM:ShowClassChooser( TEAMID )

	if ( !GAMEMODE.SelectClass ) then return end
	if ( ClassChooser ) then ClassChooser:Remove() end

	ClassChooser = vgui.CreateFromTable( vgui_Splash )
	ClassChooser:SetHeaderText( "Choose Class" )
	ClassChooser:SetHoverText( "What class do you want to be?" );

	Classes = team.GetClass( TEAMID )
	for k, v in SortedPairs( Classes ) do
		
		local displayname = v
		local Class = player_class.Get( v )
		if ( Class && Class.DisplayName ) then
			displayname = Class.DisplayName
		end
		
		local description = "Click to spawn as " .. displayname
		
		if( Class and Class.Description ) then
			description = Class.Description
		end
		
		local func = function() if( cl_classsuicide:GetBool() ) then RunConsoleCommand( "kill" ) end RunConsoleCommand( "changeclass", k ) end
		local btn = ClassChooser:AddSelectButton( displayname, func, description )
		btn.m_colBackground = team.GetColor( TEAMID )
		
	end
	
	ClassChooser:AddCancelButton()
	ClassChooser:MakePopup()
	ClassChooser:NoFadeIn()

end
