/*
===========================================================================
Copyright (C) 2009 Poul Sander

This file is part of the Open Arena source code.

Open Arena source code is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.

Open Arena source code is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Open Arena source code; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
===========================================================================
*/
//
#include "ui_local.h"

/*********************************************************************************
	SPECIFY PASSWORD
*********************************************************************************/

#define SPECIFYPASSWORD_FRAMEL	"menu/art/frame2_l"
#define SPECIFYPASSWORD_FRAMER	"menu/art/frame1_r"
#define SPECIFYPASSWORD_BACK0		"menu/art/back_0"
#define SPECIFYPASSWORD_BACK1		"menu/art/back_1"
#define SPECIFYPASSWORD_FIGHT0	"menu/art/fight_0"
#define SPECIFYPASSWORD_FIGHT1	"menu/art/fight_1"

#define ID_SPECIFYPASSWORDBACK	102
#define ID_SPECIFYPASSWORDGO		103

static char* specifypassword_artlist[] =
{
	SPECIFYPASSWORD_FRAMEL,
	SPECIFYPASSWORD_FRAMER,
	SPECIFYPASSWORD_BACK0,	
	SPECIFYPASSWORD_BACK1,	
	SPECIFYPASSWORD_FIGHT0,
	SPECIFYPASSWORD_FIGHT1,
	NULL
};

typedef struct
{
	menuframework_s	menu;
	menutext_s	banner;
	menubitmap_s	framel;
	menubitmap_s	framer;
	menutext_s	info;
	menufield_s	password;
	menubitmap_s	go;
	menubitmap_s	back;

	char		*connectstring;
        char            servername[32];
} specifypassword_t;

static specifypassword_t	s_specifypassword;

/*
=================
SpecifyPassword_Event
=================
*/
static void SpecifyPassword_Event( void* ptr, int event ) 
{
	switch (((menucommon_s*)ptr)->id)
	{
		case ID_SPECIFYPASSWORDGO:
			if (event != QM_ACTIVATED)
				break;

			if (s_specifypassword.password.field.buffer[0])
			{
				trap_Cvar_Set("password",s_specifypassword.password.field.buffer);
				trap_Cmd_ExecuteText( EXEC_APPEND, s_specifypassword.connectstring );
			}
			break;

		case ID_SPECIFYPASSWORDBACK:
			if (event != QM_ACTIVATED)
				break;

			UI_PopMenu();
			break;
	}
}

/*
=================
SpecifyPassword_MenuInit
=================
*/
void SpecifyPassword_MenuInit( void )
{
	// zero set all our globals
	memset( &s_specifypassword, 0 ,sizeof(specifypassword_t) );

	SpecifyPassword_Cache();

	s_specifypassword.menu.wrapAround = qtrue;
	s_specifypassword.menu.fullscreen = qtrue;

	s_specifypassword.banner.generic.type	 = MTYPE_BTEXT;
	s_specifypassword.banner.generic.x     = 320;
	s_specifypassword.banner.generic.y     = 16;
	s_specifypassword.banner.string		 = "SPECIFY PASSWORD";
	s_specifypassword.banner.color  		 = color_white;
	s_specifypassword.banner.style  		 = UI_CENTER;

	s_specifypassword.framel.generic.type  = MTYPE_BITMAP;
	s_specifypassword.framel.generic.name  = SPECIFYPASSWORD_FRAMEL;
	s_specifypassword.framel.generic.flags = QMF_INACTIVE;
	s_specifypassword.framel.generic.x	 = 0;  
	s_specifypassword.framel.generic.y	 = 78;
	s_specifypassword.framel.width  	     = 256;
	s_specifypassword.framel.height  	     = 329;

	s_specifypassword.framer.generic.type  = MTYPE_BITMAP;
	s_specifypassword.framer.generic.name  = SPECIFYPASSWORD_FRAMER;
	s_specifypassword.framer.generic.flags = QMF_INACTIVE;
	s_specifypassword.framer.generic.x	 = 376;
	s_specifypassword.framer.generic.y	 = 76;
	s_specifypassword.framer.width  	     = 256;
	s_specifypassword.framer.height  	     = 334;

	s_specifypassword.info.generic.type	 = MTYPE_TEXT;
	s_specifypassword.info.generic.x     = 320;
	s_specifypassword.info.generic.y     = 160;
	s_specifypassword.info.color  		 = color_white;
	s_specifypassword.info.style  		 = UI_CENTER;
        s_specifypassword.info.string           = s_specifypassword.servername;

	s_specifypassword.password.generic.type       = MTYPE_FIELD;
	s_specifypassword.password.generic.name       = "Password:";
	s_specifypassword.password.generic.flags      = QMF_PULSEIFFOCUS|QMF_SMALLFONT;
	s_specifypassword.password.generic.x	      = 206;
	s_specifypassword.password.generic.y	      = 220;
	s_specifypassword.password.field.widthInChars = 38;
	s_specifypassword.password.field.maxchars     = 80;
	trap_Cvar_VariableStringBuffer("password",s_specifypassword.password.field.buffer,80);

	s_specifypassword.go.generic.type	    = MTYPE_BITMAP;
	s_specifypassword.go.generic.name     = SPECIFYPASSWORD_FIGHT0;
	s_specifypassword.go.generic.flags    = QMF_RIGHT_JUSTIFY|QMF_PULSEIFFOCUS;
	s_specifypassword.go.generic.callback = SpecifyPassword_Event;
	s_specifypassword.go.generic.id	    = ID_SPECIFYPASSWORDGO;
	s_specifypassword.go.generic.x		= 640;
	s_specifypassword.go.generic.y		= 480-64;
	s_specifypassword.go.width  		    = 128;
	s_specifypassword.go.height  		    = 64;
	s_specifypassword.go.focuspic         = SPECIFYPASSWORD_FIGHT1;

	s_specifypassword.back.generic.type	  = MTYPE_BITMAP;
	s_specifypassword.back.generic.name     = SPECIFYPASSWORD_BACK0;
	s_specifypassword.back.generic.flags    = QMF_LEFT_JUSTIFY|QMF_PULSEIFFOCUS;
	s_specifypassword.back.generic.callback = SpecifyPassword_Event;
	s_specifypassword.back.generic.id	      = ID_SPECIFYPASSWORDBACK;
	s_specifypassword.back.generic.x		  = 0;
	s_specifypassword.back.generic.y		  = 480-64;
	s_specifypassword.back.width  		  = 128;
	s_specifypassword.back.height  		  = 64;
	s_specifypassword.back.focuspic         = SPECIFYPASSWORD_BACK1;

	Menu_AddItem( &s_specifypassword.menu, &s_specifypassword.banner );
	Menu_AddItem( &s_specifypassword.menu, &s_specifypassword.info );
	Menu_AddItem( &s_specifypassword.menu, &s_specifypassword.framel );
	Menu_AddItem( &s_specifypassword.menu, &s_specifypassword.framer );
	Menu_AddItem( &s_specifypassword.menu, &s_specifypassword.password );
	Menu_AddItem( &s_specifypassword.menu, &s_specifypassword.go );
	Menu_AddItem( &s_specifypassword.menu, &s_specifypassword.back );
}

/*
=================
SpecifyPassword_Cache
=================
*/
void SpecifyPassword_Cache( void )
{
	int	i;

	// touch all our pics
	for (i=0; ;i++)
	{
		if (!specifypassword_artlist[i])
			break;
		trap_R_RegisterShaderNoMip(specifypassword_artlist[i]);
	}
}

/*
=================
UI_SpecifyPasswordMenu
=================
*/
void UI_SpecifyPasswordMenu( char* string, char *name )
{
	SpecifyPassword_MenuInit();
	s_specifypassword.connectstring = string;
        Q_strncpyz(s_specifypassword.servername,name,32);
	UI_PushMenu( &s_specifypassword.menu );
}


