local PANEL = {}
AccessorFunc( PANEL, "m_Items", 	"Items" )
AccessorFunc( PANEL, "m_Horizontal", 	"Horizontal" )
AccessorFunc( PANEL, "m_Spacing", 		"Spacing" )

AccessorFunc( PANEL, "m_AlignBottom", 	"AlignBottom" )
AccessorFunc( PANEL, "m_AlignCenter", 	"AlignCenter" )

function PANEL:Init()
	self.m_Items = {}
	self:SetHorizontal( true )
	self:SetText( "" )
	self:SetAlignCenter( true )
	self:SetSpacing( 8 )
end

function PANEL:AddItem( item )
	item:SetParent( self )
	table.insert( self.m_Items, item )
	self:InvalidateLayout()
	item:SetPaintBackgroundEnabled( false )
	item.m_bPartOfBar = true
end

function PANEL:PerformLayout()

	if ( self.m_Horizontal ) then
	local x = self.m_Spacing
	local tallest = 0
	for k, v in pairs( self.m_Items ) do
	
		v:SetPos( x, 0 )
		x = x + v:GetWide() + self.m_Spacing
		tallest = math.max( tallest, v:GetTall() )
		
		if ( self.m_AlignBottom ) then v:AlignBottom() end
		if ( self.m_AlignCenter ) then v:CenterVertical() end
	
	end
	self:SetSize( x, tallest )
	else
		// todo.
	end

end

derma.DefineControl( "DHudBar", "", PANEL, "HudBase" )

local PANEL = {}
AccessorFunc( PANEL, "m_ValueFunction", 	"ValueFunction" )
AccessorFunc( PANEL, "m_ColorFunction", 	"ColorFunction" )

/*---------------------------------------------------------
   Name: Init
---------------------------------------------------------*/
function PANEL:Init()
	
end

function PANEL:GetTextValueFromFunction()
	if (!self.m_ValueFunction) then return "-" end
	return tostring( self:m_ValueFunction() )
end

function PANEL:GetColorFromFunction()
	if (!self.m_ColorFunction) then return self:GetDefaultTextColor() end
	return self:m_ColorFunction()
end

function PANEL:Think()
	self:SetTextColor( self:GetColorFromFunction() )
	self:SetText( self:GetTextValueFromFunction() )
end

derma.DefineControl( "DHudUpdater", "A HUD Element", PANEL, "DHudElement" )


local PANEL = {}
AccessorFunc( PANEL, "m_Function", 	"Function" )

/*---------------------------------------------------------
   Name: Init
---------------------------------------------------------*/
function PANEL:Init()
	HudBase.Init( self )
end

function PANEL:Think()

	if ( !self.m_ValueFunction ) then return end
	
	self:SetTextColor( self:GetColorFromFunction() )
	
	local EndTime = self:m_ValueFunction()
	if ( EndTime == -1 ) then return end
	
	if ( !EndTime || EndTime < CurTime() ) then 
		self:SetText( "00:00" )
		return
	end
	
	local Time = util.ToMinutesSeconds( EndTime - CurTime() )
	self:SetText( Time )

end

derma.DefineControl( "DHudCountdown", "A HUD Element", PANEL, "DHudUpdater" )