--[[   _                                

	( )                               

   _| |   __   _ __   ___ ___     _ _ 

 /'_` | /'__`\( '__)/' _ ` _ `\ /'_` )

( (_| |(  ___/| |   | ( ) ( ) |( (_| |

`\__,_)`\____)(_)   (_) (_) (_)`\__,_) 



--]]



local matBlurScreen = Material( "pp/blurscreen" )



--[[

	This is designed for Paint functions..

--]]

function Derma_DrawBackgroundBlur( panel, starttime )



	local Fraction = 1



	if ( starttime ) then

		Fraction = math.Clamp( (SysTime() - starttime) / 1, 0, 1 )

	end



	local x, y = panel:LocalToScreen( 0, 0 )



	DisableClipping( true )

	

	surface.SetMaterial( matBlurScreen )	

	surface.SetDrawColor( 255, 255, 255, 255 )

		

	for i=0.33, 1, 0.33 do

		matBlurScreen:SetFloat( "$blur", Fraction * 5 * i )

		matBlurScreen:Recompute()

		if ( render ) then render.UpdateScreenEffectTexture() end -- Todo: Make this available to menu Lua

		surface.DrawTexturedRect( x * -1, y * -1, ScrW(), ScrH() )

	end

	

	surface.SetDrawColor( 10, 10, 10, 200 * Fraction )

	surface.DrawRect( x * -1, y * -1, ScrW(), ScrH() )

	

	DisableClipping( false )



end



--[[

	Display a simple message box.

	

	Derma_Message( "Hey Some Text Here!!!", "Message Title (Optional)", "Button Text (Optional)" )

	

--]]

function Derma_Message( strText, strTitle, strButtonText )



	local Window = vgui.Create( "DFrame" )

		Window:SetTitle( strTitle or "Message" )

		Window:SetDraggable( false )

		Window:ShowCloseButton( false )

		Window:SetBackgroundBlur( true )

		Window:SetDrawOnTop( true )

		

	local InnerPanel = vgui.Create( "Panel", Window )

	

	local Text = vgui.Create( "DLabel", InnerPanel )

		Text:SetText( strText or "Message Text" )

		Text:SizeToContents()

		Text:SetContentAlignment( 5 )

		Text:SetTextColor( color_white )

		

	local ButtonPanel = vgui.Create( "DPanel", Window )

		ButtonPanel:SetTall( 30 )

		ButtonPanel:SetDrawBackground( false )

		

	local Button = vgui.Create( "DButton", ButtonPanel )

		Button:SetText( strButtonText or "OK" )

		Button:SizeToContents()

		Button:SetTall( 20 )

		Button:SetWide( Button:GetWide() + 20 )

		Button:SetPos( 5, 5 )

		Button.DoClick = function() Window:Close() end

		

	ButtonPanel:SetWide( Button:GetWide() + 10 )

	

	local w, h = Text:GetSize()

	

	Window:SetSize( w + 50, h + 25 + 45 + 10 )

	Window:Center()

	

	InnerPanel:StretchToParent( 5, 25, 5, 45 )

	

	Text:StretchToParent( 5, 5, 5, 5 )	

	

	ButtonPanel:CenterHorizontal()

	ButtonPanel:AlignBottom( 8 )

	

	Window:MakePopup()

	Window:DoModal()

	return Window



end



--[[

	Ask a question with multiple answers..

	

	Derma_Query( "Would you like me to punch you right in the face?", "Question!",

						"Yesss", 	function() MsgN( "Pressed YES!") end, 

						"Nope!", 	function() MsgN( "Pressed Nope!") end, 

						"Cancel", 	function() MsgN( "Cancelled!") end )

		

--]]

function Derma_Query( strText, strTitle, ... )



	local Window = vgui.Create( "DFrame" )

		Window:SetTitle( strTitle or "Message Title (First Parameter)" )

		Window:SetDraggable( false )

		Window:ShowCloseButton( false )

		Window:SetBackgroundBlur( true )

		Window:SetDrawOnTop( true )

		

	local InnerPanel = vgui.Create( "DPanel", Window )

		InnerPanel:SetDrawBackground( false )

	

	local Text = vgui.Create( "DLabel", InnerPanel )

		Text:SetText( strText or "Message Text (Second Parameter)" )

		Text:SizeToContents()

		Text:SetContentAlignment( 5 )

		Text:SetTextColor( color_white )



	local ButtonPanel = vgui.Create( "DPanel", Window )

		ButtonPanel:SetTall( 30 )

		ButtonPanel:SetDrawBackground( false )



	-- Loop through all the options and create buttons for them.

	local NumOptions = 0

	local x = 5



	for k=1, 8, 2 do

		

		local Text = select( k, ... )

		if Text == nil then break end

		

		local Func = select( k+1, ... ) or function() end

	

		local Button = vgui.Create( "DButton", ButtonPanel )

			Button:SetText( Text )

			Button:SizeToContents()

			Button:SetTall( 20 )

			Button:SetWide( Button:GetWide() + 20 )

			Button.DoClick = function() Window:Close(); Func() end

			Button:SetPos( x, 5 )

			

		x = x + Button:GetWide() + 5

			

		ButtonPanel:SetWide( x ) 

		NumOptions = NumOptions + 1

	

	end



	

	local w, h = Text:GetSize()

	

	w = math.max( w, ButtonPanel:GetWide() )

	

	Window:SetSize( w + 50, h + 25 + 45 + 10 )

	Window:Center()

	

	InnerPanel:StretchToParent( 5, 25, 5, 45 )

	

	Text:StretchToParent( 5, 5, 5, 5 )	

	

	ButtonPanel:CenterHorizontal()

	ButtonPanel:AlignBottom( 8 )

	

	Window:MakePopup()

	Window:DoModal()

	

	if ( NumOptions == 0 ) then

	

		Window:Close()

		Error( "Derma_Query: Created Query with no Options!?" )

		return nil

	

	end

	

	return Window



end





--[[

	Request a string from the user

	

	Derma_StringRequest( "Question", 

					"What Is Your Favourite Color?", 

					"Type your answer here!", 

					function( strTextOut ) Derma_Message( "Your Favourite Color Is: " .. strTextOut ) end,

					function( strTextOut ) Derma_Message( "You pressed Cancel!" ) end,

					"Okey Dokey", 

					"Cancel" )

	

--]]

function Derma_StringRequest( strTitle, strText, strDefaultText, fnEnter, fnCancel, strButtonText, strButtonCancelText )



	local Window = vgui.Create( "DFrame" )

		Window:SetTitle( strTitle or "Message Title (First Parameter)" )

		Window:SetDraggable( false )

		Window:ShowCloseButton( false )

		Window:SetBackgroundBlur( true )

		Window:SetDrawOnTop( true )

		

	local InnerPanel = vgui.Create( "DPanel", Window )

		InnerPanel:SetDrawBackground( false )

	

	local Text = vgui.Create( "DLabel", InnerPanel )

		Text:SetText( strText or "Message Text (Second Parameter)" )

		Text:SizeToContents()

		Text:SetContentAlignment( 5 )

		Text:SetTextColor( color_white )

		

	local TextEntry = vgui.Create( "DTextEntry", InnerPanel )

		TextEntry:SetText( strDefaultText or "" )

		TextEntry.OnEnter = function() Window:Close() fnEnter( TextEntry:GetValue() ) end

		

	local ButtonPanel = vgui.Create( "DPanel", Window )

		ButtonPanel:SetTall( 30 )

		ButtonPanel:SetDrawBackground( false )

		

	local Button = vgui.Create( "DButton", ButtonPanel )

		Button:SetText( strButtonText or "OK" )

		Button:SizeToContents()

		Button:SetTall( 20 )

		Button:SetWide( Button:GetWide() + 20 )

		Button:SetPos( 5, 5 )

		Button.DoClick = function() Window:Close() fnEnter( TextEntry:GetValue() ) end

		

	local ButtonCancel = vgui.Create( "DButton", ButtonPanel )

		ButtonCancel:SetText( strButtonCancelText or "Cancel" )

		ButtonCancel:SizeToContents()

		ButtonCancel:SetTall( 20 )

		ButtonCancel:SetWide( Button:GetWide() + 20 )

		ButtonCancel:SetPos( 5, 5 )

		ButtonCancel.DoClick = function() Window:Close() if ( fnCancel ) then fnCancel( TextEntry:GetValue() ) end end

		ButtonCancel:MoveRightOf( Button, 5 )

		

	ButtonPanel:SetWide( Button:GetWide() + 5 + ButtonCancel:GetWide() + 10 )

	

	local w, h = Text:GetSize()

	w = math.max( w, 400 ) 

	

	Window:SetSize( w + 50, h + 25 + 75 + 10 )

	Window:Center()

	

	InnerPanel:StretchToParent( 5, 25, 5, 45 )

	

	Text:StretchToParent( 5, 5, 5, 35 )	

	

	TextEntry:StretchToParent( 5, nil, 5, nil )

	TextEntry:AlignBottom( 5 )

	

	TextEntry:RequestFocus()

	TextEntry:SelectAllText( true )

	

	ButtonPanel:CenterHorizontal()

	ButtonPanel:AlignBottom( 8 )

	

	Window:MakePopup()

	Window:DoModal()

	return Window



end





