// Copyright (C) 1999-2000 Id Software, Inc.
//
#ifndef __UI_LOCAL_H__
#define __UI_LOCAL_H__

#include "../game/q_shared.h"
#include "../cgame/tr_types.h"
#include "ui_public.h"
#include "keycodes.h"
#include "../game/bg_public.h"

//RPG-X : TiM
//Defines for animation code in UI module
// RPG-X
int UI_GetAnim ( int anim, int weapon, qboolean upper );

#define ANIM_IDLE		0
#define ANIM_RUN		1
#define ANIM_WALK		2
#define ANIM_BACK		3
#define ANIM_JUMP		4
#define ANIM_CROUCH		5
#define ANIM_STEPLEFT	6
#define ANIM_STEPRIGHT	7
#define ANIM_TURNLEFT	8
#define ANIM_TURNRIGHT	9
#define ANIM_LOOKUP		10
#define ANIM_LOOKDOWN	11
#define ANIM_WEAPON1	12
#define ANIM_WEAPON2	13
#define ANIM_WEAPON3	14
#define ANIM_WEAPON4	15
#define ANIM_WEAPON5	16
#define ANIM_WEAPON6	17
#define ANIM_WEAPON7	18
#define ANIM_WEAPON8	19
#define ANIM_WEAPON9	20
#define ANIM_WEAPON10	21
#define ANIM_ATTACK		22
#define ANIM_GESTURE	23
#define ANIM_DIE		24
#define ANIM_CHAT		25

//Ranks
#define MAX_RANKSETS	16
#define MAX_NAMELENGTH	24

//Classes
#define MAX_CLASSSETS	16

//TiM - Struct to hold all the data on rank sets
typedef struct {
	char	rankSetNames[MAX_RANKSETS][128]; //Character pointers piss me off sooooo bad. >:(

	char			rankSetName[MAX_NAMELENGTH];
	rankNames_t		rankNames[MAX_RANKS];
} rankSets_t;

//TiM - UI Struct to hold all the data on current
//class settings
typedef struct {
	char	classNameFull[25];
	char	classNameConsole[15];
} classData_t;

// Menu Normal Text enum
typedef enum
{
	MNT_NONE,

	// Main Screen Headings
	MNT_MAINMENU_TITLE,
	MNT_CDKEYMENU_TITLE,
	MNT_DEMOS_TITLE,
	MNT_CONTROLSMENU_TITLE,
	MNT_SINGLEPLAYER_TITLE,
	MNT_MULTIPLAYER_TITLE,
	MNT_MODS_TITLE,
	MNT_CREDITS_TITLE, //TiM:
	MNT_QUITMENU_TITLE,
	MNT_INGAMEMAIN_TITLE,
	MNT_TEAMMENU_TITLE,
	MNT_EMOTES_MENU,
	MNT_ADMIN_MENU,
	MNT_CLIENT_MENU,
	MNT_AUDIO_MENU,

	// Ingame Menu
	MNT_INGAME_MENU,

	// Team Menu
	MNT_TEAM_MENU,

	// Demos Screen
	MNT_DEMOS,
	MNT_CURRENTFILE,
	MNT_CURRENTDEMOSAVAILABLE,

	// Main Menu
	MNT_ALPHA,	
	MNT_STELLAR_CARTOGRAPHY,
	MNT_FEDERATION_TXT,
	MNT_CARDASSIA_TXT,
	MNT_FERENGI_TXT,
	MNT_ROMULAN_TXT,
	MNT_KLINGON_TXT,
	MNT_DOMINION_TXT,
	MNT_VOYAGER_TXT,
	MNT_BORG_TXT,
	MNT_WORMHOLE_TXT,
	MNT_GALACTICCORE_TXT,
	MNT_ALPHAQUAD_TXT,
	MNT_BETAQUAD_TXT,
	MNT_DELTAQUAD_TXT,
	MNT_GAMMAQUAD_TXT,

	// Video Setup Menu
	MNT_VIDEOSETUP,
	MNT_VIDEO_HIGH_QUALITY,
	MNT_VIDEO_NORMAL,
	MNT_VIDEO_FAST,
	MNT_VIDEO_FASTEST,
	MNT_VIDEO_CUSTOM,
	MNT_VIDEO_DRIVER_DEFAULT,
	MNT_VIDEO_DRIVER_VOODOO,
	MNT_4X3,
	MNT_16X9,
	MNT_16X10,
	MNT_OFF,
	MNT_ON,
	MNT_320X200,
	MNT_400X300,
	MNT_512X384,
	MNT_640X480,
	MNT_800X600,
	MNT_960X720,
	MNT_1024X768,
	MNT_1152X864,
	MNT_1280X960,
	MNT_1600X1200,
	MNT_2048X1536,
	MNT_856x480WIDE,
	MNT_DEFAULT,
	MNT_16BIT,
	MNT_32BIT,
	MNT_LIGHTMAP,
	MNT_VERTEX,
	MNT_LOW,
	MNT_MEDIUM,
	MNT_HIGH,
	MNT_VERY_HIGH,
	MNT_BILINEAR,
	MNT_TRILINEAR,

	// Player setup
	MNT_CHANGEPLAYER_TITLE,
	MNT_PLAYERSETUP,
	MNT_HANDICAP_NONE,
	MNT_HANDICAP_95,
	MNT_HANDICAP_90,
	MNT_HANDICAP_85,
	MNT_HANDICAP_80,
	MNT_HANDICAP_75,
	MNT_HANDICAP_70,
	MNT_HANDICAP_65,
	MNT_HANDICAP_60,
	MNT_HANDICAP_55,
	MNT_HANDICAP_50,
	MNT_HANDICAP_45,
	MNT_HANDICAP_40,
	MNT_HANDICAP_35,
	MNT_HANDICAP_30,
	MNT_HANDICAP_25,
	MNT_HANDICAP_20,
	MNT_HANDICAP_15,
	MNT_HANDICAP_10,
	MNT_HANDICAP_05,

	// Video Driver Menu
	MNT_VIDEODRIVER,
	MNT_VIDEODRIVERS,
	MNT_VENDOR,
	MNT_VERSION,
	MNT_RENDERER,
	MNT_PIXELFORMAT,
	MNT_EXTENSIONS,

	// Setup / Controls / Weapons
	MNT_WEAPONKEY_SETUP,

	// Sound Menu
	MNT_SOUND_SETUP,

	// Game Options
	MNT_CROSSHAIR_NONE,
	MNT_GAMEOPTION_LABEL,

	// Quit screen
	MNT_SHIP_SYSTEMS,
	MNT_QUIT_ELITE_FORCE,

	// Multiplayer Server
	MNT_MASTER_ITEMS_LOCAL,
	MNT_MASTER_ITEMS_MPLAYER,
	MNT_MASTER_ITEMS_INTERNET1,
	MNT_MASTER_ITEMS_FAVORITES,
	MNT_SERVERTYPE_ALL,
	MNT_SERVERTYPE_FREE_FOR_ALL,
	MNT_SERVERTYPE_TEAM_DEATHMATCH,
	MNT_SERVERTYPE_TOURNAMENT,
	MNT_SERVERTYPE_CAPTURETHEFLAG,
	MNT_SERVERTYPE_EXCESSIVE,
	MNT_SERVERTYPE_FEDERATION,
	MNT_SERVERTYPE_GLADIATOR,
	MNT_SERVERTYPE_IN2TAGIB,
	MNT_SERVERTYPE_PINBALL,
	MNT_SERVERTYPE_Q32EF,
	MNT_SERVERTYPE_RPG,
	MNT_SERVERTYPE_TEAMELITE,
	MNT_SERVERTYPE_RPGX, //RPG-X: TiM - Cycle RPG-X as a gtype option as well :)
	MNT_SORTKEY_SERVER_NAME,
	MNT_SORTKEY_MAP_NAME,
	MNT_SORTKEY_OPENPLAYER,
	MNT_SORTKEY_GAMETYPE,
	MNT_SORTKEY_PINGTIME,

	MNT_FINDSERVER,
	MNT_CREATESERVER,
	MNT_SPECIFYSERVER,

	//	Specify server
	MNT_SERVER_ADDRESS,
	MNT_SERVER_PORT,

	MNT_TYPE_FREEFORALL,
	MNT_TYPE_TEAMDEATHMATCH,
	MNT_TYPE_TOURNAMENT,
	MNT_TYPE_CAPTURETHEFLAG,

	MNT_NO,
	MNT_YES,

	// Mods Menu
	MNT_ELITEFORCE_HOLOMATCH,
	MNT_MODS,
	MNT_AVAILABLEMODS,

	// Single Player Menu
	MNT_SINGLEPLAYER,			
	MNT_TIER,
	MNT_ACCESSDENIED,
	MNT_OPPONENTS,
	MNT_PLAYER_DATA,

	// Change Player Menu
	MNT_CHANGEPLAYER,

	// Single Player Reset Menu
	MNT_RESETPLAYER,

	// Setup / Controls / Attack/Look
	MNT_ATTACKLOOKKEY_SETUP,

	// Setup / Controls / Movement
	MNT_MOVEMENTKEYS_SETUP,

	// Setup / Controls / Mouse/JoyStick
	MNT_MOUSEJOYSTICK_SETUP,
	MNT_MOUSE,
	MNT_JOYSTICK,

	// Skill levels
	MNT_BABYLEVEL,
	MNT_EASYLEVEL,
	MNT_MEDIUMLEVEL,
	MNT_HARDLEVEL,
	MNT_NIGHTMARELEVEL,

	// Dedicated server
	MNT_DEDICATED_NO,
	MNT_DEDICATED_LAN,
	MNT_DEDICATED_INTERNET,

	// Player type
	MNT_OPEN,
	MNT_BOT,
	MNT_CLOSED,

	// Player team
	MNT_TEAM_BLUE,
	MNT_TEAM_RED,

	// Single Player Reset
	MNT_PLAYER_RESET1,
	MNT_PLAYER_RESET2,
	MNT_PLAYER_RESET3,
	MNT_RESET_PLAYER,

	//Demo screen
	MNT_NO_DEMOS_FOUND,

	MNT_ENTER_CDKEY,
	MNT_VALID_CDKEY,
	MNT_CDKEY_INVALID,

	MNT_LOADING,
	MNT_CONNECTINGTO,
	MNT_PRESSESCAPETOABORT,
	
	MNT_WAITINGFORNEWKEY,
	MNT_CLICKTOCHANGE,
	MNT_BACKSPACETOCLEAR,
	MNT_USEARROWKEYS,
	MNT_RESET1,
	MNT_RESET2,
	MNT_QUIT1,
	MNT_QUIT2,

	MNT_NAME,
	MNT_EFFECTS,

	MNT_ENTERFILENAME,

	MNT_HOSTNAME,
	MNT_MAP,
	MNT_PLAYERS,
	MNT_TYPE,
	MNT_PORT,
	MNT_PING,

	MNT_DEFAULT1,
	MNT_DEFAULT2,

	MNT_ELIMINATED,
	MNT_TIE,


	MNT_COMPLETERESET1,
	MNT_COMPLETERESET2,
	MNT_COMPLETERESET3,
	MNT_COMPLETERESET4,

	MNT_NOLIMIT,

	MNT_SHORTCUT_KEY,

	MNT_SHORTCUT_SCORES,
	MNT_SHORTCUT_USE,
	MNT_SHORTCUT_RUNWALK,
	MNT_SHORTCUT_WALKFORWARD,
	MNT_SHORTCUT_BACKPEDAL,
	MNT_SHORTCUT_STEPLEFT,
	MNT_SHORTCUT_STEPRIGHT,
	MNT_SHORTCUT_UPJUMP,
	MNT_SHORTCUT_DOWNCROUCH,
	MNT_SHORTCUT_TURNLEFT,
	MNT_SHORTCUT_TURNRIGHT,
	MNT_SHORTCUT_SIDESTEPTURN,
	MNT_SHORTCUT_LOOKUP,
	MNT_SHORTCUT_LOOKDOWN,
	MNT_SHORTCUT_MOUSELOOK,
	MNT_SHORTCUT_CENTERVIEW,
	MNT_SHORTCUT_ZOOMVIEW,
	MNT_SHORTCUT_WEAPON0,
	MNT_SHORTCUT_WEAPON1,
	MNT_SHORTCUT_WEAPON2,
	MNT_SHORTCUT_WEAPON3,
	MNT_SHORTCUT_WEAPON4,
	MNT_SHORTCUT_WEAPON5,
	MNT_SHORTCUT_WEAPON6,
	MNT_SHORTCUT_WEAPON7,
	MNT_SHORTCUT_WEAPON8,
	MNT_SHORTCUT_WEAPON9,
	MNT_SHORTCUT_ATTACK,
	MNT_SHORTCUT_ALTATTCK,
	MNT_SHORTCUT_PREVWEAPON,
	MNT_SHORTCUT_NEXTWEAPON,
	MNT_SHORTCUT_GESTURE,

	MNT_SHORTCUT_EQUIP,
	MNT_SHORTCUT_DROP, // RPG-X | Marcin | 04/12/2008

	MNT_SHORTCUT_CHAT,
	MNT_SHORTCUT_CHATTEAM,
	MNT_SHORTCUT_CHATTARGET,
	MNT_SHORTCUT_CHATATTACKER,
	MNT_SHORTCUT_CHATCLASS,
	//TiM - 3rd Person view commands (Not necessarily modelview related )
	MNT_SHORTCUT_TOGGLE3RDPERSON,
	MNT_SHORTCUT_COMMITANGLES,
	MNT_SHORTCUT_REVERTANGLES,
	MNT_SHORTCUT_RESETANGLES,
	//RPG-X TiM - Modelview Buttonzors
	MNT_SHORTCUT_MODELVIEW_FORWARD,
	MNT_SHORTCUT_MODELVIEW_BACKWARD,
	MNT_SHORTCUT_MODELVIEW_LEFT,
	MNT_SHORTCUT_MODELVIEW_RIGHT,
	MNT_SHORTCUT_MODELVIEW_UP,
	MNT_SHORTCUT_MODELVIEW_DOWN,
	MNT_SHORTCUT_MODELVIEW_ROTLEFT,
	MNT_SHORTCUT_MODELVIEW_ROTRIGHT,
	MNT_SHORTCUT_MODELVIEW_PITCHUP,
	MNT_SHORTCUT_MODELVIEW_PITCHDOWN,

	MNT_MODELVIEW_SETUP,	//RPG-X TiM

	MNT_DEFAULT_WARNING1,
	MNT_DEFAULT_WARNING2,
	MNT_DEFAULT_WARNING3,

	MNT_CONTINUE_WARNING,
	MNT_DEFAULT_SETUP,
	MNT_OTHEROPTIONS_SETUP,

	MNT_COMMANDKEYS_SETUP,

	MNT_TO_OFF,
	MNT_TO_UPPER_RIGHT,
	MNT_TO_LOWER_RIGHT,
	MNT_TO_LOWER_LEFT,

	MNT_NW_28,
	MNT_NW_33,
	MNT_NW_56,
	MNT_NW_ISDN,
	MNT_NW_CABLE,

	MNT_NETWORKSETUP,
	MNT_SERVERINFO,
	MNT_SERVEROPTIONS,

	MNT_HCSELECT,
	MNT_SERVERINFO_TITLE,
	MNT_FREE,

	MNT_ADD_HCS_TITLE,
	MNT_ADD_HCS,

	MNT_HOLOGRAPHIC_CHARS,
	MNT_SETTINGS,

	MNT_REMOVE_HCS_TITLE,
	MNT_REMOVE_HCS,

	MNT_TEAM_ORDERS_TITLE,
	MNT_TEAM_ORDERS,

	MNT_ORDER_IMLEADER,
	MNT_ORDER_DEFEND,
	MNT_ORDER_FOLLOW,
	MNT_ORDER_GETFLAG,
	MNT_ORDER_CAMP,
	MNT_ORDER_REPORT,
	MNT_ORDER_IRELINQUISH,
	MNT_ORDER_ROAM,

	MNT_ORDER_NAME_DEFEND,
	MNT_ORDER_NAME_FOLLOW,
	MNT_ORDER_NAME_GETFLAG,
	MNT_ORDER_NAME_CAMP,
	MNT_ORDER_NAME_REPORT,
	MNT_ORDER_NAME_ROAM,

	MNT_NETWORK,
	MNT_SOUND,

	MNT_CNT_SERVERS,
	MNT_SPACETOSTOP,

	MNT_NORESPONSE_MASTER,
	MNT_NO_SERVERS,

	MNT_HITREFRESH,
	MNT_SCANNINGFORSERVERS,

	MNT_CURRENTMAP,
	MNT_SORTPARMS,

	MNT_SERVERINFORMATION,
	MNT_WINNERS1,
	MNT_WINNERS2,

	MNT_ENGLISH,
	MNT_GERMAN,

	MNT_BRIDGE_DESC1,
	MNT_PHASER_STRIP1_DESC1,
	MNT_TORPEDOS_DESC1,
	MNT_VENTRAL_DESC1,
	MNT_MIDHULL_DESC1,
	MNT_BUSSARD_DESC1,
	MNT_NACELLES_DESC1,
	MNT_THRUSTERS_DESC1,
	MNT_VOYAGER_DESC1,

	MNT_SOLOMATCHTYPES,
	MNT_LEVELS,
	MNT_SKILLLEVEL,
	MNT_POINTLIMIT,

	MNT_HUMAN,
	MNT_SERVERPLAYERS,
	MNT_ACCESSING,
	MNT_HOLOCHARSLINE,
	MNT_SAFE,
	MNT_BEST,
	MNT_MODELS,
	MNT_CDKEY,

	MNT_AWAITINGCHALLENGE,
	MNT_AWAITINGAUTHORIZATION,
	MNT_AWAITINGCONNECTION,
	MNT_AWAITINGGAMESTATE,

	MNT_DUTCH,
	MNT_NOMAPSFOUND,
	MNT_ADVANCEDSERVER,
	MNT_ADV_ERROR,
	MNT_ADV_STATUS1_RESPAWN,
	MNT_ADV_STATUS1_MAXCLIENTS,
	MNT_ADV_STATUS1_RUNSPEED,
	MNT_ADV_STATUS1_GRAVITY,
	MNT_ADV_STATUS1_KNOCKBACK,
	MNT_ADV_STATUS1_DMGMULT,
	MNT_ADV_STATUS1_BOT_MINPLAYERS,

	MNT_HOLODECK1,
	MNT_WELCOMETOHOLMATCH,

	MNT_HOLOTITLE1,
	MNT_HOLOTITLE2,
	MNT_HOLOTITLE3,
	MNT_HOLOTITLE4,
	MNT_HOLOTITLE5,
	MNT_HOLOTITLE6,
	MNT_HOLOTITLE7,
	MNT_HOLOTITLE8,
	MNT_HOLOTITLE9,
	MNT_HOLOTITLE10,
	MNT_HOLOTITLE11,
	MNT_HOLOTITLE12,
	MNT_HOLOTITLE13,
	MNT_HOLOTITLE14,
	MNT_HOLOTITLE15,
	MNT_HOLOTITLE16,
	MNT_HOLOTITLE17,
	MNT_HOLOTITLE18,

	MNT_HOLOMATCH,
	MNT_PARAMOUNT_LEGAL,
	MNT_ID_LEGAL,
	MNT_LEAVINGHOLMATCH,
	MNT_OR,
	MNT_CONFIRMATIONMENU_TITLE,
	MNT_CONFIRMATION,
	MNT_RESTART_MATCH,
	MNT_MASTER_ITEMS_INTERNET2,
	MNT_MASTER_ITEMS_INTERNET3,
	MNT_MASTER_ITEMS_INTERNET4,
	MNT_MASTER_ITEMS_INTERNET5,
	MNT_ADV_STATUS2_RESPAWN,
	MNT_ADV_STATUS2_MAXCLIENTS,
	MNT_ADV_STATUS2_RUNSPEED,
	MNT_ADV_STATUS2_GRAVITY,
	MNT_ADV_STATUS2_KNOCKBACK,
	MNT_ADV_STATUS2_DMGMULT,
	MNT_ADV_STATUS2_BOT_MINPLAYERS,
	MNT_STARTREK1,
	MNT_STARTREK2,
	MNT_FORMOREINFO,
	MNT_UBERGAMES,
	MNT_UBERGAMES2,
	MNT_UBERGAMESINFO,
	MNT_BACKSPACE,

	MNT_GAMMA_LINE1,
	MNT_GAMMA_LINE2,
	MNT_GAMMA_LINE3,

	MNT_INITIALSETUP_TITLE,
	MNT_INITIALSETUP,

	MNT_WEAPON1_DESC,
	MNT_WEAPON2_DESC,
	MNT_WEAPON3_DESC,
	MNT_WEAPON4_DESC,
	MNT_WEAPON5_DESC,
	MNT_WEAPON6_DESC,
	MNT_WEAPON7_DESC,
	MNT_WEAPON8_DESC,
	MNT_WEAPON9_DESC,
	MNT_ACCESSINGLCARS,
	MNT_CLOSINGLCARS,

	MNT_INSERTCD,
	MNT_BADCDKEY,

	MNT_ADV_STATUS1_FORCEPLAYERRESPAWN,
	MNT_ADV_STATUS2_FORCEPLAYERRESPAWN,
	MNT_ADV_STATUS1_RESPAWNINVULNERABILITY,
	MNT_ADV_STATUS2_RESPAWNINVULNERABILITY,
	MNT_ADV_STATUS1_DOWARMUP,
	MNT_ADV_STATUS2_DOWARMUP,
	MNT_HOLODECKSIMULATION,
	MNT_HOLOMATCHWEAPONRY,
	MNT_BLUE,
	MNT_RED,
	MNT_SCREEN,
	MNT_OF,

	MNT_DOWNLOADING,
	MNT_ESTIMATEDTIMELEFT,
	MNT_TRANSFERRATE,
	MNT_ESTIMATING,
	MNT_OFCOPIED,
	MNT_COPIED,
	MNT_SEC,
	MNT_ANVANCEDMENU_TITLE,
	MNT_LEAVE_MATCH,
	MNT_FONTS_DEVELOPER,
	MNT_THISWILLRESETMENU,
	MNT_GAMMA2_LINE1,
	MNT_GAMMA2_LINE2,
	MNT_RECOMMENDEDPLAYERS,
	MNT_LOOSEVIDSETTINGS,
	MNT_UNPURECLIENT,
	MNT_CANNOTVALIDATE,
	MNT_KICKED,
	MNT_TIMEDOUT,
	MNT_SERVERSHUTDOWN,
	MNT_DISCONNECTED,
	MNT_BROKENDOWNLOAD,
	MNT_SERVERCOMMANDOVERFLOW,
	MNT_LOSTRELIABLECOMMANDS,
	MNT_A3DNOTAVAILABLE,
	MNT_PC_NOCLASS,
	MNT_PC_INFILTRATOR,
	MNT_PC_SNIPER,
	MNT_PC_HEAVY,
	MNT_PC_DEMO,
	MNT_PC_MEDIC,
	MNT_PC_TECH,
	MNT_PC_BORG,
	MNT_SHORTCUT_USEINVENTORY,
	MNT_SHORTCUT_USEOBJECT,
	MNT_SHORTCUT_OBJECTIVES,
	MNT_PARAMETERS,
	MNT_ADV_STATUS1_NOJOINTIMEOUT,
	MNT_ADV_STATUS2_NOJOINTIMEOUT,
	MNT_ADV_STATUS1_CLASSCHANGETIMEOUT,
	MNT_ADV_STATUS2_CLASSCHANGETIMEOUT,
	MNT_ACTIONHERO,
	//RPG-X: Redtechie - For added class support in UI Menu
	
	// Credits Menu
	MNT_CREDITS,

	//Emotes,
	MNT_EMOTES,

	//ADmin
	MNT_ADMIN,
	
	MNT_PC_ALPHAOMEGA22,
	MNT_PC_N00B,
	MNT_CHANGEAPPLIED,
	MNT_CHARS,
	MNT_CHARDATA,
	
	MNT_CHOOSEEMOTE,
	MNT_MODELOFFSET,
	MNT_EMOTELIST,
	MNT_EMOTEPARAM,
	
	MNT_PLAYERSTATS,
	MNT_CLASS,
	MNT_RANK,
	MNT_AGE,
	MNT_RACE,
	MNT_HEIGHT,
	MNT_WEIGHT,
	MNT_MODEL,
	MNT_ID,
	MNT_PLAYERSTATUS,

	MNT_QUICKCONNECT,
	MNT_QUICKMESSAGE,
	MNT_QUICKMESSAGE2,

	MNT_MAIN_CMDS,
	MNT_GIVE_CMDS,
	MNT_REVIVE_CMDS,
	MNT_BROADCAST_CMDS,
	MNT_USEENT_CMDS,
	MNT_BEAM_CMDS,
	MNT_FXGUN_CMDS,
	MNT_SPAWN_CMDS,
	MNT_BIND_CMDS,

	MNT_MYSELF,
	MNT_EVERYONE,
	MNT_MINE,
	MNT_ALL,
	MNT_RADIUS,
	MNT_CHUNKTYPE,
	MNT_SPARKINTERVAL,
	MNT_TIMELENGTH,
	MNT_DRIPTYPE,
	MNT_DRIPINTENSITY,
	MNT_SHAKEINTENSITY,
	MNT_KEYBINDINGS,

	MNT_CLIENT_INFO_CMDS,
	MNT_KICK_CLIENT_CMDS,
	MNT_FORCE_PARAM_CMDS,

	MNT_PLAYMUSIC,
	MNT_PLAYSOUND,

	MNT_TURBOLIFT,
	MNT_SPECFICYDECK,

	MNT_TRANSPORTER,
	MNT_HOLODECK,

	MNT_ID_NOTTHERE,
	MNT_ID_WRONGSIZE,
	MNT_ID_INVALID,

	MNT_MAX
} menuNormalTextType_t;

extern const char *menu_normal_text[MNT_MAX];


// Menu Button Text enum
typedef enum
{
	MBT_NONE,

	// Main Menu
	MBT_MULTIPLAYER,
	MBT_SETUP,
	MBT_DEMO,
	MBT_QUIT,
	MBT_MODS,
	MBT_CREDITS,

	// Generic Stuff
	MBT_GENERIC_NO,
	MBT_GENERIC_YES,

	// Demos Screen
	MBT_MAINMENU,
	MBT_ENGAGEDEMO,
	MBT_DEMOLINE,

	//Credits
	MBT_LEADS,
	MBT_CODERS,
	MBT_2D,
	MBT_3D,
	MBT_MAPPING,
	MBT_SOUNDS,
	MBT_EXTRAS,
	MBT_BETAS,
	MBT_THANKS,

	// Settings Top Buttons
	MBT_VIDEOSETTINGS,
	MBT_CONTROLS,
	MBT_SOUNDSETTINGS,
	MBT_GAMEOPTIONS,
	MBT_CDKEY,
	MBT_PLAYER,
	MBT_FONTS,

	// Video Data
	MBT_VIDEOOPTIONS,
	//MBT_VIDEODRIVER,
	MBT_ASPECTRATIO,
	MBT_VIDEOGLEXTENTIONS,
	MBT_VIDEOMODE,
	MBT_VIDEOCOLORDEPTH,
	MBT_VIDEOFULLSCREEN,
	MBT_VIDEOLIGHTING,
	MBT_VIDEOGEOMETRY,
	MBT_VIDEOTEXTUREDETAIL,
	MBT_VIDEOTEXTUREBITS,
	MBT_VIDEOTEXTUREFILTER,
	MBT_VIDEOAPPLYCHANGES,
	MBT_VIDEODATA,
	MBT_VIDEODATA2,
	MBT_VIDEODRIVERS,


	//	Video 2 Data
	MBT_BRIGHTNESS,
	MBT_SCREENSIZE,

	// Setup / Sound
	MBT_EFFECTSVOLUME,
	MBT_MUSICVOLUME,
	MBT_VOICEVOLUME,
	MBT_SOUNDQUALITY,
	MBT_A3D,

	MBT_WAITFORKEY,
	MBT_WEAPONKEYS,
	MBT_LOOKKEYS,
	MBT_MOVEMENTKEYS,
	MBT_COMMANDKEYS,
	MBT_MODELVIEWKEYS,
	MBT_MOUSECONFIG,
	MBT_OTHEROPTIONS,

	MBT_ON,
	MBT_OFF,

	// Player settings
	MBT_PLAYER_HANDICAP,
	MBT_PLAYER_NAME,

	// Game Options
	MBT_WALLMARKS1,
	MBT_WALLMARKS2,
	MBT_DYNAMICLIGHTS1,
	MBT_DYNAMICLIGHTS2,
	MBT_LIGHTFLARES1,
	MBT_LIGHTFLARES2,
	MBT_IDENTIFYTARGET1,
	MBT_IDENTIFYTARGET2,
	MBT_SYNCEVERYFRAME1,
	MBT_SYNCEVERYFRAME2,
	MBT_CROSSHAIR,

	// Quit Game
	MBT_QUITGAME_YES,
	MBT_QUITGAME_NO,

	// Single Player Server
	/*MBT_RESETSTANDINGS,
	MBT_CREATEMATCH,
	MBT_PRESETGAME,
	MBT_NEXTGRADE,
	MBT_PREVGRADE,
	MBT_PLAYERINFO,
	MBT_STARTMATCH1,
	MBT_STARTMATCH2,
	MBT_ABORT,*/
	MBT_ENGAGE,

	// Skill levels
	MBT_BABYLEVEL,
	MBT_EASYLEVEL,
	MBT_MEDIUMLEVEL,
	MBT_HARDLEVEL,
	MBT_NIGHTMARELEVEL,

	// Multiplayer Server
	MBT_SERVERS,
	MBT_SERVERTYPE_GAMETYPE,
	MBT_SORTTYPE,
	MBT_SHOWFULL,
	MBT_SHOWEMPTY,
	MBT_REFRESH,
	MBT_STOPREFRESH,

	MBT_GAMETYPE,

	MBT_SEARCHSERVER,
	MBT_SPECIFY,
	MBT_CREATE,

	MBT_ENGAGEMULTIPLAYER,

	MBT_LOADMOD,

	// Single Player reset
	MBT_YESRESET,
	MBT_NORESET,

	MBT_CHANGEMODEL,

	// Ingame menu
	MBT_INGAMETEAM,
	MBT_INGAMEADDSIMULANTS,
	MBT_INGAMEREMOVESIMULANTS,
	MBT_INGAMETEAMORDERS,
	MBT_INGAMESETUP,
	MBT_INGAMESERVERDATA,
	MBT_INGAMERESTART,
	MBT_INGAMERESUME,
	MBT_INGAMELEAVE,
	MBT_GAMEQUIT,

	// Team menu
	MBT_REDTEAM,
	MBT_BLUETEAM,
	MBT_JOINMATCH,
	MBT_OBSERVER,

	MBT_INGAMEMENU,

	// Setup/ Controls / Mouse Config
	MBT_MOUSEFREELOOK,
	MBT_MOUSESPEED,
	MBT_MOUSEINVERT,
	MBT_MOUSESMOOTH,
	MBT_JOYSTICKENABLE,
	MBT_JOYSTICKTHRESHOLD,
	MBT_FORCEFEEDBACK,

	MBT_BACK,
	MBT_PLAYERDATA,
	MBT_NEXTPAGE,
	MBT_PREVPAGE,

	// Ingame Quit Screen
	MBT_QUIT_NO,
	MBT_QUIT_YES,

	MBT_CDKEY2,

	MBT_MISSION,

	MBT_SETDEFAULT,

	MBT_DEFAULT_NO,
	MBT_DEFAULT_YES,

	MBT_KEYTURNSPEED,
	MBT_ALWAYSRUN,
	MBT_LOOKSPRING,
	MBT_AUTOSWITCHWEAPONS,

	MBT_FORCEMODEL,
	MBT_DRAWTEAMOVERLAY,
	MBT_ALLOWDOWNLOAD,
	MBT_SIMPLEITEMS,

	MBT_NETWORK,
	MBT_DATARATE,

	MBT_ADDTOFAVS,

	MBT_PREVMAPS,
	MBT_NEXTMAPS,
	MBT_SETPARAMETERS,
 
	MBT_POINTLIMIT,
	MBT_CAPTURELIMIT,
	MBT_TIMELIMIT,
	MBT_FRIENDLYFIRE,
	MBT_PURESERVER,
	MBT_DEDICATEDSERVER,
	MBT_HOSTNAME,
	MBT_HCSKILL,

	MBT_PLAYER1,
	MBT_PLAYER2,
	MBT_PLAYER3,
	MBT_PLAYER4,
	MBT_PLAYER5,
	MBT_PLAYER6,
	MBT_PLAYER7,
	MBT_PLAYER8,
	MBT_PLAYER9,
	MBT_PLAYER10,
	MBT_PLAYER11,
	MBT_PLAYER12,

	MBT_CHOOSEMAP,

	MBT_PREVHC,
	MBT_NEXTHC,
	MBT_ACCEPT,
	MBT_TEAM,
	MBT_SKILL,

	MBT_REMOVE_HOLO,

	MBT_ARROW_UP,
	MBT_ARROW_DOWN,

	MBT_REMOVE,

	MBT_ADDRESS,
	MBT_PORT,

	MBT_REPLAY,
	MBT_NEXTMATCH,

	MBT_RETURNMENU,

	MBT_LANGUAGE,

	MBT_FEDERATION_LABEL,
	MBT_CARDASSIA_LABEL,
	MBT_FERENGI_LABEL,
	MBT_ROMULAN_LABEL,
	MBT_KLINGON_LABEL,
	MBT_DOMINION_LABEL,
	MBT_VOYAGER_LABEL1,
	MBT_VOYAGER_LABEL2,
	MBT_BORG_LABEL1,
	MBT_BORG_LABEL2,
	MBT_WORMHOLE_LABEL1,
	MBT_WORMHOLE_LABEL2,
	MBT_GALACTICCORE_LABEL,

	MBT_ALPHA,
	MBT_BETA,
	MBT_DELTA,
	MBT_GAMMA,
	MBT_QUADRANT,

	MBT_V_PHASER_LABEL,
	MBT_V_TORPEDOS_LABEL,
	MBT_V_TORPEDOS_LABEL2,
	MBT_V_TORPEDOS_LABEL3,
	MBT_V_VENTRAL_LABEL,
	MBT_V_MIDHULL_LABEL,
	MBT_V_MIDHULL_LABEL2,
	MBT_V_BUSSARD_LABEL,
	MBT_V_NACELLES_LABEL,
	MBT_V_THRUSTERS_LABEL,
	MBT_V_VOYAGER_LABEL,
	MBT_V_BRIDGE_LABEL,
	MBT_SCREENSHOT,
	MBT_SKINDEFAULT,
	MBT_SKINRED,
	MBT_SKINBLUE,

	MBT_LIGHTFLARES,
	MBT_ADVANCEDSERVER,
	MBT_AUTOJOIN,
	MBT_AUTOBALANCE,
	MBT_MAXCLIENTS,
	MBT_FALLINGDAMAGE,
	MBT_RESPAWNTIME,
	MBT_RUNSPEED,
	MBT_GRAVITY,
	MBT_KNOCKBACK,
	MBT_DMGMULT,
	MBT_SIMPLESHADER,
	MBT_BOT_MINPLAYERS,
	MBT_WEAPON1,
	MBT_WEAPON2,
	MBT_WEAPON3,
	MBT_WEAPON4,
	MBT_WEAPON5,
	MBT_WEAPON6,
	MBT_WEAPON7,
	MBT_WEAPON8,
	MBT_WEAPON9,
	MBT_ANISOTROPICFILTERING,
	MBT_COMPRESSEDTEXTURES,
	MBT_ADAPTITEMRESPAWN,
	MBT_HOLODECKINTRO,
	MBT_FORCEPLAYERRESPAWN,
	MBT_RESPAWNINVULNERABILITY,
	MBT_WARMUP,
	MBT_BLUETEAMGROUP,
	MBT_REDTEAMGROUP,
	MBT_TEXTLANGUAGE,
	MBT_VOICELANGUAGE,
	MBT_RESETPROGRESS,
	MBT_GROUPFILTER,
	MBT_CHECKKEYLATER,
	MBT_FONTSSMALL,
	MBT_FONTSMEDIUM,
	MBT_FONTSLARGE,
	MBT_FONTSGRID,
	MBT_KEYBOARDLANGUAGE,
	MBT_X_AXIS,
	MBT_Y_AXIS,
	MBT_ASSIMILATION,
	MBT_SPECIALTIES,
	MBT_DISINTEGRATION,
	MBT_ACTIONHERO,
	MBT_ELIMINATION,
	MBT_PLAYERCLASS,
	MBT_TEAMCLASS,
	MBT_AUTOTEAM,
	MBT_NOJOINTIMEOUT,
	MBT_CLASSCHANGE,
	MBT_CLASS,
	MBT_RANK,
	MBT_OTHER,
	
	//Player Settings
	MBT_AGE,
	MBT_RACE,
	MBT_HEIGHT,
	MBT_WEIGHT,
	MBT_COMMIT,
	MBT_RANKSETS,
	MBT_CLASSSETS,
	MBT_CHARMODEL,
	MBT_CHARSKIN,
	MBT_RACEFILTER,
	MBT_GENDERFILTER,
	MBT_PROFILESCROLL,
	MBT_LOADPROFILE,
	MBT_PROFILENAME,
	MBT_SAVEPROFILE,

	//RPG-X Emotes
	MBT_EMOTES_MENU,
	MBT_RECENT_FILTER,
	MBT_FAV_FILTER,
	MBT_ALL_FILTER,
	MBT_SITTING_FILTER,
	MBT_CONSOLE_FILTER,
	MBT_GESTURE_FILTER,
	MBT_FULLMOTION_FILTER,
	MBT_INJURED_FILTER,
	MBT_MISC_FILTER,
	MBT_MODEL_OFFSET,
	MBT_KEY_BIND,
	MBT_PRESS_KEY,
	MBT_FAV_EMOTE,
	MBT_KILL_FAV_EMOTE,
	MBT_DO_EMOTE,
	MBT_CHANGE_OFFSET,

	MBT_ADMIN_MENU,
	MBT_ADMIN_MAIN,
	MBT_ADMIN_CLIENTS,
	MBT_ADMIN_AUDIO,

	MBT_ADMIN_EXECUTE,

	MBT_ADMIN_GOD,
	MBT_ADMIN_NOCLIP,
	MBT_ADMIN_CLOAK,
	MBT_ADMIN_FLIGHT,

	MBT_ADMIN_ITEM,

	MBT_ADMIN_REVIVE,

	MBT_ADMIN_MESSAGE,

	MBT_ADMIN_ENTITY,

	MBT_ADMIN_BEAMLOC,
	MBT_ADMIN_BEAMPLAYER,

	MBT_ADMIN_FX,
	MBT_ADMIN_PARM1,
	MBT_ADMIN_PARM2,
	MBT_ADMIN_PARM3,

	MBT_ADMIN_SPAWN,
	MBT_ADMIN_REMOVE,

	MBT_ADMIN_SPAWNB,
	MBT_ADMIN_USEENTB,
	MBT_ADMIN_KICKB,

	MBT_CLIENT_SELECT,

	MBT_CLIENT_KICK,
	MBT_CLIENT_FORCE,
	MBT_CLIENT_PARAM,

	MBT_AUDIO_PLAYSONG,
	MBT_AUDIO_STOPSONG,

	MBT_AUDIO_PLAYSND,

	MBT_DECK,

	MBT_CONTINUE,

	MBT_MOTD,	// RPG-X | Marcin | 03/01/2009
	MBT_RESPAWN,// RPG-X | Marcin | 03/01/2009

	MBT_TRANS_EXTERN,
	MBT_TRANS_DELAY,
	MBT_TRANS_DELAY_PARAM,
	
	MBT_HOLODECK_LIST,
	MBT_HOLODECK_START,
	MBT_HOLODECK_LEAVE,

	MBT_MAX

} menuButtonTextType_t;

  
#define GRAPHIC_BUTTONRIGHT		"menu/new/bar1.tga"
#define GRAPHIC_BUTTONLEFT		"menu/new/bar2.tga"
#define GRAPHIC_BUTTONSLIDER	"menu/common/slider.tga"
#define GRAPHIC_BUTTONROUND		"button_round.tga"

#define MENU_BUTTON_MED_HEIGHT	18
#define MENU_BUTTON_MED_WIDTH	130
#define MENU_TITLE_X			611
#define MENU_TITLE_Y			24
#define MENU_DESC_X				100
#define MENU_DESC_Y				444
#define MENU_BUTTON_TEXT_X		5
#define MENU_BUTTON_TEXT_Y		1

#define MG_OFF		0
#define MG_STRING	1
#define MG_GRAPHIC	2
#define MG_NUMBER	3
#define MG_NONE		4
#define MG_VAR		5

extern const char *menu_button_text[MBT_MAX][2];


extern vmCvar_t	ui_ffa_fraglimit;
extern vmCvar_t	ui_ffa_timelimit;

extern vmCvar_t	ui_tourney_fraglimit;
extern vmCvar_t	ui_tourney_timelimit;

extern vmCvar_t	ui_team_fraglimit;
extern vmCvar_t	ui_team_timelimit;
extern vmCvar_t	ui_team_friendly;

extern vmCvar_t	ui_ctf_capturelimit;
extern vmCvar_t	ui_ctf_timelimit;
extern vmCvar_t	ui_ctf_friendly;

extern vmCvar_t	ui_arenasFile;
extern vmCvar_t	ui_botsFile;
extern vmCvar_t	ui_botminplayers;
extern vmCvar_t	ui_spScores1;
extern vmCvar_t	ui_spScores2;
extern vmCvar_t	ui_spScores3;
extern vmCvar_t	ui_spScores4;
extern vmCvar_t	ui_spScores5;
extern vmCvar_t	ui_spAwards;
extern vmCvar_t	ui_spVideos;
extern vmCvar_t	ui_spSkill;

extern vmCvar_t	ui_weaponrespawn;
extern vmCvar_t	ui_speed;
extern vmCvar_t	ui_gravity;
extern vmCvar_t	ui_knockback;
extern vmCvar_t	ui_dmgmult;
extern vmCvar_t	ui_adaptRespawn;
extern vmCvar_t	ui_holoIntro;
extern vmCvar_t	ui_forcerespawn;
extern vmCvar_t	ui_respawnGhostTime;
extern vmCvar_t	ui_warmup;
extern vmCvar_t	ui_dowarmup;
extern vmCvar_t	ui_team_race_blue;
extern vmCvar_t	ui_team_race_red;

extern vmCvar_t	ui_spSelection;

extern vmCvar_t	ui_browserMaster;
extern vmCvar_t	ui_browserGameType;
extern vmCvar_t	ui_browserSortKey;
extern vmCvar_t	ui_browserShowFull;
extern vmCvar_t	ui_browserShowEmpty;

extern vmCvar_t	ui_brassTime;
extern vmCvar_t	ui_drawCrosshair;
extern vmCvar_t	ui_drawCrosshairNames;
extern vmCvar_t	ui_marks;

extern vmCvar_t	ui_defaultChar;

extern vmCvar_t	ui_server1;
extern vmCvar_t	ui_server2;
extern vmCvar_t	ui_server3;
extern vmCvar_t	ui_server4;
extern vmCvar_t	ui_server5;
extern vmCvar_t	ui_server6;
extern vmCvar_t	ui_server7;
extern vmCvar_t	ui_server8;
extern vmCvar_t	ui_server9;
extern vmCvar_t	ui_server10;
extern vmCvar_t	ui_server11;
extern vmCvar_t	ui_server12;
extern vmCvar_t	ui_server13;
extern vmCvar_t	ui_server14;
extern vmCvar_t	ui_server15;
extern vmCvar_t	ui_server16;
extern vmCvar_t	ui_server17;
extern vmCvar_t	ui_server18;
extern vmCvar_t	ui_server19;
extern vmCvar_t	ui_server20;
extern vmCvar_t	ui_server21;
extern vmCvar_t	ui_server22;
extern vmCvar_t	ui_server23;
extern vmCvar_t	ui_server24;
extern vmCvar_t	ui_server25;
extern vmCvar_t	ui_server26;
extern vmCvar_t	ui_server27;
extern vmCvar_t	ui_server28;
extern vmCvar_t	ui_server29;
extern vmCvar_t	ui_server30;
extern vmCvar_t	ui_server31;
extern vmCvar_t	ui_server32;

extern vmCvar_t	ui_cdkeychecked;
extern vmCvar_t	ui_cdkeychecked2;
extern vmCvar_t	ui_playerClass;
extern vmCvar_t	ui_playerRank;

extern	vmCvar_t	ui_allowvote;
extern	vmCvar_t	ui_chatsallowed;
extern	vmCvar_t	ui_allowsuicide;
extern	vmCvar_t	ui_selfdamage;
extern	vmCvar_t	ui_rpg;
extern	vmCvar_t	ui_kickspammers;
extern	vmCvar_t	ui_kicksuiciders;
extern	vmCvar_t	ui_allowspmaps;
extern	vmCvar_t	ui_rangetricorder;
extern	vmCvar_t	ui_rangehypo;
extern	vmCvar_t	ui_norpgclasses;
extern	vmCvar_t	ui_forceclasscolor;
extern	vmCvar_t	ui_nosecurity;
extern	vmCvar_t	ui_nomarine;
extern	vmCvar_t	ui_nomedical;
extern	vmCvar_t	ui_noscience;
extern	vmCvar_t	ui_nocommand;
extern	vmCvar_t	ui_noengineer;
extern	vmCvar_t	ui_noalien;
extern	vmCvar_t	ui_nomaker;
extern	vmCvar_t	ui_nocloak;
extern	vmCvar_t	ui_noflight;
extern	vmCvar_t	ui_phaserdmg;
extern	vmCvar_t	ui_rifledmg;
extern	vmCvar_t	ui_stasisdmg;
extern	vmCvar_t	ui_imoddmg;
extern	vmCvar_t	ui_noweapons;
extern	vmCvar_t	ui_alienflags;
extern	vmCvar_t	ui_marineflags;
extern	vmCvar_t	ui_securityflags;
extern	vmCvar_t	ui_makerflags;
extern	vmCvar_t	ui_medicalflags;
extern	vmCvar_t	ui_scienceflags;
extern	vmCvar_t	ui_commandflags;
extern	vmCvar_t	ui_engineerflags;
extern	vmCvar_t	ui_dynamicCrosshair;
extern	vmCvar_t	ui_dynamicLensFlares;
extern	vmCvar_t	ui_currentRankSet;
extern	vmCvar_t	ui_currentClassSet;

extern	vmCvar_t	ui_age;
extern	vmCvar_t	ui_height;
extern	vmCvar_t	ui_weight;
extern	vmCvar_t	ui_race;

//Emote related CVARs
extern	vmCvar_t	ui_recentEmote1;
extern	vmCvar_t	ui_recentEmote2;
extern	vmCvar_t	ui_recentEmote3;
extern	vmCvar_t	ui_recentEmote4;
extern	vmCvar_t	ui_recentEmote5;
extern	vmCvar_t	ui_recentEmote6;
extern	vmCvar_t	ui_recentEmote7;
extern	vmCvar_t	ui_recentEmote8;
extern	vmCvar_t	ui_recentEmote9;
extern	vmCvar_t	ui_recentEmote10;
extern	vmCvar_t	ui_recentEmote11;
extern	vmCvar_t	ui_recentEmote12;
extern	vmCvar_t	ui_recentEmote13;
extern	vmCvar_t	ui_recentEmote14;
extern	vmCvar_t	ui_recentEmote15;
extern	vmCvar_t	ui_recentEmote16;

//-Users can have up to 16 favorite emotes
extern	vmCvar_t	ui_favoriteEmote1;
extern	vmCvar_t	ui_favoriteEmote2;
extern	vmCvar_t	ui_favoriteEmote3;
extern	vmCvar_t	ui_favoriteEmote4;
extern	vmCvar_t	ui_favoriteEmote5;
extern	vmCvar_t	ui_favoriteEmote6;
extern	vmCvar_t	ui_favoriteEmote7;
extern	vmCvar_t	ui_favoriteEmote8;
extern	vmCvar_t	ui_favoriteEmote9;
extern	vmCvar_t	ui_favoriteEmote10;
extern	vmCvar_t	ui_favoriteEmote11;
extern	vmCvar_t	ui_favoriteEmote12;
extern	vmCvar_t	ui_favoriteEmote13;
extern	vmCvar_t	ui_favoriteEmote14;
extern	vmCvar_t	ui_favoriteEmote15;
extern	vmCvar_t	ui_favoriteEmote16;

//TiM - Ban system
extern	vmCvar_t		sv_securityHash;
extern	vmCvar_t		sv_securityCode;

extern	vmCvar_t		ui_handleWidescreen;

#define GRAPHIC_SQUARE "menu/common/square.tga"
#define BUTTON_GRAPHIC_LONGRIGHT "menu/common/bar1.tga"

//
// ui_qmenu.c
//

#define RCOLUMN_OFFSET			( BIGCHAR_WIDTH )
#define LCOLUMN_OFFSET			(-BIGCHAR_WIDTH )

#define SLIDER_RANGE			10
#define	MAX_EDIT_LINE			256

#define MAX_MENUDEPTH			8
#define MAX_MENUITEMS			64

#define MTYPE_NULL				0
#define MTYPE_SLIDER			1	
#define MTYPE_ACTION			2
#define MTYPE_SPINCONTROL		3
#define MTYPE_FIELD				4
#define MTYPE_RADIOBUTTON		5
#define MTYPE_BITMAP			6	
#define MTYPE_TEXT				7
#define MTYPE_SCROLLLIST		8
#define MTYPE_PTEXT				9
#define MTYPE_BTEXT				10

#define QMF_BLINK				0x00000001
#define QMF_SMALLFONT			0x00000002
#define QMF_LEFT_JUSTIFY		0x00000004
#define QMF_CENTER_JUSTIFY		0x00000008
#define QMF_RIGHT_JUSTIFY		0x00000010
#define QMF_NUMBERSONLY			0x00000020	// edit field is only numbers
#define QMF_HIGHLIGHT			0x00000040
#define QMF_HIGHLIGHT_IF_FOCUS	0x00000080	// steady focus
#define QMF_PULSEIFFOCUS		0x00000100	// pulse if focus
#define QMF_HASMOUSEFOCUS		0x00000200
#define QMF_NOONOFFTEXT			0x00000400
#define QMF_MOUSEONLY			0x00000800	// only mouse input allowed
#define QMF_HIDDEN				0x00001000	// skips drawing
#define QMF_GRAYED				0x00002000	// grays and disables
#define QMF_INACTIVE			0x00004000	// disables any input
#define QMF_NODEFAULTINIT		0x00008000	// skip default initialization
#define QMF_OWNERDRAW			0x00010000
#define QMF_PULSE				0x00020000
#define QMF_LOWERCASE			0x00040000	// edit field is all lower case
#define QMF_UPPERCASE			0x00080000	// edit field is all upper case
#define QMF_SILENT				0x00100000
#define QMF_ALTERNATE			0x00200000  // use sqare buttion instead of round one 
#define QMF_ALTERNATE2			0x00400000

// callback notifications
#define QM_GOTFOCUS				1
#define QM_LOSTFOCUS			2
#define QM_ACTIVATED			3

typedef struct _tag_menuframework
{
	int	cursor;
	int cursor_prev;

	int	nitems;
	void *items[MAX_MENUITEMS];

	void (*draw) (void);
	sfxHandle_t (*key) (int key);

	qboolean	wrapAround;
	qboolean	fullscreen;
	qboolean	nobackground;
	qboolean	initialized;		// Have the structures for this menu been initialized?
	int			descX;				// Description x pos
	int			descY;				// Description y pos
	int			listX;				// Beginning X position of list
	int			listY;				// Beginning Y position of list
	int			titleX;				// Title x pos
	int			titleY;				// Title y pos
	int			titleI;				// The title
	int			footNoteEnum;		// Footnote text

	void		*displaySpinList;	//if not NULL, display the list from this one (must be typecast as menulist_s when used)
	qboolean	noNewSelecting;		//used when we want to stop other buttons getting selected. mainly for the spin list, and slider dragging
} menuframework_s;

typedef struct
{
	int type;
	const char *name;
	int	id;
	int x, y;
	int left;
	int	top;
	int	right;
	int	bottom;
	menuframework_s *parent;
	int menuPosition;
	unsigned flags;

	void (*callback)( void *self, int event );
	void (*statusbar)( void *self );
	void (*ownerdraw)( void *self );
} menucommon_s;

typedef struct {
	int		cursor;
	int		scroll;
	int		widthInChars;
	char	buffer[MAX_EDIT_LINE];
	int		maxchars;
	int		style;
	int		titleEnum;		// Label
	int		titlecolor;		// Normal color
	int		textcolor;		// Normal color
	int		textcolor2;		// Highlight color
} mfield_t;

typedef struct
{
	menucommon_s	generic;
	mfield_t		field;
} menufield_s;

typedef struct 
{
	menucommon_s generic;

	float minvalue;
	float maxvalue;
	float curvalue;
	float defvalue; //RPG-X: TiM | I'm going to make it if u click the button part, it'll reset to this default value

	int				focusWidth;		// For graph
	int				focusHeight;	// For graph
	int				color;			// Normal color
	int				color2;			// Highlight color
	int				shader;			// Graph shader
	int				width;			// Graph bitmap width
	int				height;			// Graph bitmap height
	char			*thumbName;		// Thumb file name
	int				thumbShader;	// THumb shader
	int				thumbWidth;		// Width of thumb graphic
	int				thumbHeight;	// Height of thumb graphic
	int				thumbColor;		// Normal color
	int				thumbColor2;	// Highlight color
	int				thumbGraphicWidth;	// Width of visible part of graphic
	char			*picName;
	int				picShader;
	int				picWidth;
	int				picHeight;
	int				picX;
	int				picY;
	int				textX;
	int				textY;
	int				textEnum;		// Label on pic
	int				textcolor;		// Normal color
	int				textcolor2;		// Highlight color

	float range;

	qboolean		mouseDown;
} menuslider_s;

typedef	struct {
	int		left;
	int		right;
	int		up;
	int		down;

	int		xOffset; //offsets in case the calculated box will exceed the darn screen lol
	int		yOffset; //Stored here, so they may be applied to the text as well
} drawList_t;

#define MAX_LIST 30

typedef struct
{
	menucommon_s generic;

	int	oldvalue;
	int curvalue;
	int	numitems;
	int	top;
		
	const char		**itemnames;
	int				*listnames;
	int				*listshaders;

	int width;
	int height;
	int	columns;
	int	seperation;
	int				color;			// Normal color
	int				color2;			// Highlight color
	int				textEnum;
	int				textX;
	int				textY;
	int				textFlags;
	int				textcolor;		// Normal color
	int				textcolor2;		// Highlight color
	byte			updated;		// 1 if changed
	int				focusWidth;		// 
	int				focusHeight;	// 
	int				listX;
	int				listY;
	int				listFlags;
	int				listcolor;
	int				maxChars;		//TiM - max number of characters it can display

	//TiM - draw list params
	drawList_t		drawList;
	qboolean		ignoreList;		//maybe don't show the list :P
} menulist_s;

typedef struct
{
	menucommon_s generic;
	int				color;	// Normal color
	int				color2;	// Highlight color
	int				color3;	// Greyed color
	int				textEnum;
	int				textEnum2;	// If there's a second line of text
	int				textX;
	int				textY;
	int				textcolor;	// Normal color
	int				textcolor2;	// Highlight color
	int				textcolor3;	// Grayed color
	int				width;
	int				height;
	byte			updated;	// 1 if changed
} menuaction_s;

typedef struct
{
	menucommon_s generic;
	int curvalue;
} menuradiobutton_s;

typedef struct
{
	menucommon_s	generic;
	char*			focuspic;	
	char*			errorpic;
	qhandle_t		shader;
	qhandle_t		focusshader;

	int				focusX;
	int				focusY;
	int				focusWidth;
	int				focusHeight;

	int				width;
	int				height;
	float*			focuscolor;

	int				color;	// Normal color
	int				color2;	// Highlight color

	char			*textPtr;	//	In case an enum doesn't work
	int				textEnum;
	int				textEnum2;	// If there's a second line of text
	int				textX;
	int				textY;
	int				textcolor;	// Normal color
	int				textcolor2;	// Highlight color
	int				textStyle;	// Style of text (UI_SMALLFONT)

} menubitmap_s;

typedef struct
{
	menucommon_s	generic;
	char*			string;			// A normal string
	int				normaltextEnum;	// Enum from normal menu text
	int				buttontextEnum;	// Enum from button text
	int				normaltextEnum2; // Enum from normal menu text
	int				buttontextEnum2; // Enum from button text
	int				normaltextEnum3; // Enum from normal menu text
	int				buttontextEnum3; // Enum from button text
	int				style;
	float			*color;	// Normal color
	float			*color2;	// Highlight color
	int				focusX;
	int				focusY;
	int				focusWidth;
	int				focusHeight;
} menutext_s;

typedef struct
{
	int				type;		// STRING or GRAPHIC
	float			timer;		// When it changes
	int				x;			// X position
	int				y;			// Y positon
	int				width;		// Graphic width
	int				height;		// Graphic height
	const char		*file;		// File name of graphic/ text if STRING
	int				normaltextEnum;	//	Text comes from Menu_Normal_text
	qhandle_t		graphic;	// Handle of graphic if GRAPHIC
	int				min;		// 
	int				max;
	int				target;		// Final value
	int				inc;
	int				style;
	int				color;		// Normal color
	void			*pointer;		// To an address
} menugraphics_s;

extern void Mouse_Hide(void);
extern void Mouse_Show(void);

extern void			UI_HolomatchInMenu_Cache (void);
extern void			Menu_Cache( void );
extern void			Menu_Focus( menucommon_s *m );
extern void			Menu_AddItem( menuframework_s *menu, void *item );
extern void			Menu_AdjustCursor( menuframework_s *menu, int dir );
extern void			Menu_Draw( menuframework_s *menu );
extern void			*Menu_ItemAtCursor( menuframework_s *m );
extern sfxHandle_t	Menu_ActivateItem( menuframework_s *s, menucommon_s* item );
extern void			Menu_SetCursor( menuframework_s *s, int cursor );
extern void			Menu_SetCursorToItem( menuframework_s *m, void* ptr );
extern sfxHandle_t	Menu_DefaultKey( menuframework_s *s, int key );
extern void			Bitmap_Init( menubitmap_s *b );
extern void			Bitmap_Draw( menubitmap_s *b );
extern void			ScrollList_Draw( menulist_s *l );
extern sfxHandle_t	ScrollList_Key( menulist_s *l, int key );
extern sfxHandle_t	menu_in_sound;
extern sfxHandle_t	menu_move_sound;
extern sfxHandle_t	menu_out_sound;
extern sfxHandle_t	menu_buzz_sound;
extern sfxHandle_t	menu_null_sound;
extern sfxHandle_t	menu_rpgx_theme;				//J2J
extern vec4_t		menu_text_color;
extern vec4_t		menu_grayed_color;
extern vec4_t		menu_dark_color;
extern vec4_t		menu_highlight_color;
extern vec4_t		menu_red_color;
extern vec4_t		menu_black_color;
extern vec4_t		menu_dim_color;
extern vec4_t		color_white;
extern vec4_t		color_yellow;
extern vec4_t		color_blue;
extern vec4_t		color_orange;
extern vec4_t		color_red;
extern vec4_t		color_dim;
extern vec4_t		name_color;
extern vec4_t		list_color;
extern vec4_t		listbar_color;
extern vec4_t		text_color_disabled; 
extern vec4_t		text_color_normal;
extern vec4_t		text_color_highlight;

extern char	*ui_medalNames[];
extern char	*ui_medalPicNames[];
extern char	*ui_medalSounds[];

//
// ui_mfield.c
//
extern void			MField_Clear( mfield_t *edit );
extern void			MField_KeyDownEvent( mfield_t *edit, int key );
extern void			MField_CharEvent( mfield_t *edit, int ch );
extern void			MField_Draw( mfield_t *edit, int x, int y, int style, vec4_t color,int cursor );
extern void			MenuField_Init( menufield_s* m );
extern void			MenuField_Draw( menufield_s *f );
extern sfxHandle_t	MenuField_Key( menufield_s* m, int* key );

//
// ui_menu.c
//
extern void MainMenu_Cache( void );
extern void UI_MainMenu(void);
extern void UI_RegisterCvars( void );
extern void UI_UpdateCvars( void );
extern void UI_Setup_MenuButtons(void);
extern void UI_QuitMenu( void );
extern void UI_ChooseServerTypeMenu( void ); 
extern void UI_QuitMenu_Cache(void); 

//
// ui_demo2.c
//
extern void UI_DemosMenu_Cache(void);

//
// ui_ingame.c
//
extern int			ingameFlag;	// true when ingame menu is in use

extern void InGame_Cache( void );
extern void UI_InGameMenu(void);

//
// ui_confirm.c
//
extern void ConfirmMenu_Cache( void );
extern void UI_ConfirmMenu( const char *question, void (*draw)( void ), void (*action)( qboolean result ) );

//
// ui_team.c
//
//extern void UI_TeamMainMenu( void );
//extern void TeamMain_Cache( void );

//
// ui_connect.c
//
extern void UI_DrawConnectScreen( qboolean overlay );

//
// ui_controls2.c
//
extern void Controls_Cache( void );
extern void UI_ControlsMouseJoyStickMenu_Cache(void);

void SetupMenu_TopButtons(menuframework_s *menu,int menuType,menuaction_s *s_video_apply_action);
#define MENU_CONTROLS	1
#define MENU_VIDEO		2
#define MENU_SOUND		3
#define MENU_GAME		4
#define MENU_CDKEY		5
#define MENU_PLAYER		6
#define MENU_FONTS		7
#define MENU_DEFAULT				8
#define MENU_CONTROLS_WEAPON		9
#define MENU_CONTROLS_LOOK			10
#define MENU_CONTROLS_MOVEMENT		11
#define MENU_CONTROLS_COMMAND		12
#define	MENU_CONTROLS_MODELVIEW		17 //RPG-X TiM
#define MENU_CONTROLS_MOUSE			13
#define MENU_CONTROLS_OTHER			14
#define MENU_NETWORK				15
#define MENU_VIDEODATA				16

//
// ui_motd.c
//
extern void UI_MotdMenu( void );
extern void UI_MotdMenu_Cache( void );
extern void MotdReceiveLine( const char *txt );
extern void MotdReset( void );

//
// ui_holodeck.c
//
extern void HoloDataReceived(const char *data);



//
// ui_admin.c
//
extern void UI_AdminMenu( qboolean fromConsole );
extern void UI_AdminMenu_Cache( void );

//
// ui_transporter.c
//
extern void UI_TransporterMenu(int trNum);
extern void TransDataReceived(const char *data);

//
// ui_login.c
//
/* TODO remove me ? */
extern void UI_LoginSetSqlkey(int key);

//
// ui_demo2.c
//
extern void UI_DemosMenu( void );

//
// ui_mods.c
//
extern void UI_ModsMenu( void );
extern void UI_ModsMenu_Cache( void );

//
// ui_credits.c
//
extern void UI_CreditsMenu( void );
extern void UI_CreditsMenu_Cache( void );

//
//ui_library.c
//
//extern void UI_LibraryMenu( void );
//extern void UI_LibraryMenu_Cache( void );
//extern void UI_AccessingMenu( void );
//extern void UI_AccessingMenu_Cache (void);

//
// ui_mods.c
//
extern void UI_ModsMenu( void );
extern void UI_ModsMenu_Cache( void );

// ui_emotes.c
extern void UI_EmotesMenu ( qboolean fromConsole );
extern void UI_PlayerEmotes_Cache( void );

//
// ui_cdkey.c
//
extern void UI_CDKeyMenu( void );
extern void UI_CDKeyMenu_Cache( void );
extern void UI_CDKeyMenu_f( void );
extern void UI_CDKeyMenu2( void );

//
// ui_playermodel.c
//
extern void UI_PlayerModelMenu(int menuFrom);
extern void PlayerModel_Cache( void );

//
// ui_playersettings.c
//
extern void UI_PlayerSettingsMenu(int menuFrom);
extern void PlayerSettings_Cache( void );

#define PS_MENU_CONTROLS		0
#define PS_MENU_SINGLEPLAYER	1
#define PS_MENU_SERVER			2

//
// ui_preferences.c
//
//extern void UI_PreferencesMenu( void );
//extern void Preferences_Cache( void );
extern void UI_GameOptionsMenu( void );
extern void UI_GameOptionsMenu_Cache(void);
extern int s_textlanguage_Names[];
extern int s_voicelanguage_Names[];

//
// ui_specifyserver.c
//
extern void UI_SpecifyServerMenu( void );
extern void SpecifyServer_Cache( void );

//
// ui_servers2.c
//
#define MAX_FAVORITESERVERS 32

extern void UI_ArenaServersMenu( void );
extern void ArenaServers_Cache( void );
extern void UI_ChooseServerTypeMenu_Cache( void );

//
// ui_startserver.c
//
extern void UI_StartServerMenu( qboolean multiplayer );
extern void StartServer_Cache( void );
extern void ServerOptions_Cache( void );
extern void UI_BotSelectMenu( char *bot );
extern void UI_BotSelectMenu_Cache( void );

//
// ui_serverinfo.c
//
extern void UI_ServerInfoMenu( void );
extern void ServerInfo_Cache( void );

// ui_turbolift.c

extern void UI_TurboliftMenu ( int liftNum );
extern void UI_TurboliftMenu_Cache (void);

//
// ui_video.c
//
//extern void GraphicsOptions_Cache( void );
extern void DriverInfo_Cache( void );
extern void UI_VideoDataMenu( void );
extern void UI_VideoDataMenu_Cache(void);
extern void UI_VideoData2Menu_Cache(void);
extern void UI_VideoDriverMenu_Cache(void);

//
// ui_players.c
//

//FIXME ripped from cg_local.h
typedef struct {
	int			oldFrame;
	int			oldFrameTime;		// time when ->oldFrame was exactly on

	int			frame;
	int			frameTime;			// time when ->frame will be exactly on

	float		backlerp;

	float		yawAngle;
	qboolean	yawing;
	float		pitchAngle;
	qboolean	pitching;

	int			animationNumber;	// may include ANIM_TOGGLEBIT
	animation_t	*animation;
	int			animationTime;		// time when the first frame of the animation will be exact
} lerpFrame_t;

//TiM : Model system relevent parameters
#define MAX_BOLTONS		10
#define MAX_TALK_SKINS	4

typedef enum {
	BOLTON_HEAD = 0,
	BOLTON_TORSO,
	BOLTON_LEGS,
	BOLTON_MAX
} boltonLoc_t;

//min and max value for any timed events
typedef struct {
	int nextTime;

	int minSeconds;
	int maxSeconds;
} charSecs_t;

//bolton info
typedef struct {
	int			modelBase;
	char		tagName[MAX_QPATH];
	qhandle_t	tagModel;
} boltonTags_t;

typedef struct {
	// model info
	char			modelName[MAX_QPATH];

	gender_t		gender;

	float			height;
	float			weight;

	qhandle_t		legsModel;
	qhandle_t		legsSkin;
	lerpFrame_t		legs;

	qhandle_t		torsoModel;
	qhandle_t		torsoSkin;
	lerpFrame_t		torso;

	qhandle_t		headModel;
	qhandle_t		headSkin;
	
	//TiM : model system data
	qhandle_t		headSkinBlink;
	qhandle_t		headSkinTalk[MAX_TALK_SKINS];
	boltonTags_t	boltonTags[MAX_BOLTONS];
	qboolean		hasRanks;
	charSecs_t		headBlinkTime;
	int				nextTalkTime;
	qhandle_t		currentTalkSkin;

	qboolean		upperEmoting;
	qboolean		lowerEmoting; //set to qtrue when performing a non-loop emote. 
	//so as to let the code know to cancel it when the timer ends

	char			race[256];

	animation_t		animations[MAX_ANIMATIONS];

	qhandle_t		weaponModel;
	qhandle_t		barrelModel;
	qhandle_t		flashModel;
	vec3_t			flashDlightColor;
	int				muzzleFlashTime;

	// currently in use drawing parms
	vec3_t			viewAngles;
	vec3_t			moveAngles;
	weapon_t		currentWeapon;
	int				legsAnim;
	int				torsoAnim;

	// animation vars
	weapon_t		weapon;
	weapon_t		lastWeapon;
	weapon_t		pendingWeapon;
	int				weaponTimer;
	int				pendingLegsAnim;
	int				torsoAnimationTimer;

	int				pendingTorsoAnim;
	int				legsAnimationTimer;

	qboolean		chat;
	qboolean		newModel;

	qboolean		barrelSpinning;
	float			barrelAngle;
	int				barrelTime;

	//TiM - Just to give this thing a little spice. :)
	qboolean		randomEmote;	//if qtrue, player will play STAND1_* random gestures every minute or so
	int				nextEmoteTime;

	int				upperLoopEmote;	//Model just finished emoting, so put them into the new loop animation
	int				lowerLoopEmote;

	int				realWeapon;
} playerInfo_t;

void UI_DrawPlayer( float x, float y, float w, float h, vec3_t pOrigin, playerInfo_t *pi, int time ); //RPG-X : TiM-  origin
void UI_PlayerInfo_SetModel( playerInfo_t *pi, const char *model );
void UI_PlayerInfo_SetInfo( playerInfo_t *pi, int legsAnim, int torsoAnim, vec3_t viewAngles, vec3_t moveAngles, weapon_t weaponNum, float height, float weight, qboolean chat );
qboolean UI_RegisterClientModelname( playerInfo_t *pi, const char *modelSkinName );

//
// ui_atoms.c
//
void UI_LanguageFilename(char *baseName,char *baseExtension,char *finalName);

//typedef char string[128];

typedef struct {
	int					frametime;
	int					realtime;

	//RPG-X : TiM
	int					cursorpx;
	qboolean			spinView;
	int					lastYaw;

	qboolean			playCinematic;

	//Ranks Data
	rankSets_t			rankSet;					//Main Storage for all the current rankset data
	int					currentRank;	
	// /RPG-X

	//RPG-X Class Data
	classData_t			classData[MAX_CLASSES];
	char				classList[MAX_CLASSSETS][MAX_NAMELENGTH];
	char				classSetName[36];

	int					cursorx;
	int					cursory;
	int					menusp;
	menuframework_s*	activemenu;
	menuframework_s*	stack[MAX_MENUDEPTH];
	glconfig_t			glconfig;
	qboolean			debug;
	qhandle_t			whiteShader;
	qhandle_t			menuBackShader;
	qhandle_t			charset;
	qhandle_t			charsetPropTiny;
	qhandle_t			charsetPropBig;
	qhandle_t			charsetProp;
//	qhandle_t			charsetPropGlow;
	qboolean			cursorDraw;
	qhandle_t			charsetPropB;
	qhandle_t			cursor;
	qhandle_t			rb_on;
	qhandle_t			rb_off;
	float				scalex;
	float				scaley;
//	float				bias;
	qboolean			demoversion;
	qboolean			firstdraw;

	//widescreen data
	widescreen_t		widescreen;

	// Common Menu Graphics
	qhandle_t			smallNumbers[10];
	qhandle_t			graphicButtonLeftEnd;			// Rounded left button end
	qhandle_t			graphicCircle;					// Solid circle
	qhandle_t			graphicBracket1CornerLU;		// Thin Left side upper corner
	qhandle_t			corner_12_18;
	qhandle_t			halfroundr_22;
	qhandle_t			graphicButtonLeft;

	sfxHandle_t			menu_choice1_snd;
	sfxHandle_t			menu_datadisp1_snd;
	sfxHandle_t			menu_datadisp2_snd;
	sfxHandle_t			menu_datadisp3_snd;

} uiStatic_t;

extern void			UI_LoadMenuText(void);
extern void			UI_LoadButtonText(void);
extern void			UI_InitSpinControl(menulist_s *spincontrol);
extern void			UI_Init( void );
extern void			UI_Shutdown( void );
extern void			UI_KeyEvent( int key );
extern void			UI_MouseEvent( int dx, int dy );
extern void			UI_Refresh( int realtime );
extern qboolean		UI_ConsoleCommand( void );
extern float		UI_ClampCvar( float min, float max, float value );
extern void			UI_DrawNamedPic( float x, float y, float width, float height, const char *picname );
extern void			UI_DrawHandlePic( float x, float y, float w, float h, qhandle_t hShader ); 
extern void UI_DrawHandleStretchPic( float x, float y, float w, float h, float s0, float t0, float s1, float t1, qhandle_t hShader );
extern void			UI_FillRect( float x, float y, float width, float height, const float *color );
extern void			UI_DrawRect( float x, float y, float width, float height, const float *color );
//extern void			UI_LerpColor(vec4_t a, vec4_t b, vec4_t c, float t);
extern void			UI_DrawBannerString( int x, int y, const char* str, int style, vec4_t color );
extern float		UI_ProportionalSizeScale( int style );
extern void			UI_DrawProportionalString( int x, int y, const char* str, int style, vec4_t color );
extern int			UI_ProportionalStringWidth( const char* str,int style );
extern void			UI_DrawString( int x, int y, const char* str, int style, vec4_t color, qboolean highRes );
extern void			UI_DrawChar( int x, int y, int ch, int style, vec4_t color );
extern qboolean 	UI_CursorInRect (int x, int y, int width, int height);
extern void			UI_AdjustFrom640( float *x, float *y, float *w, float *h );

//extern void			UI_DrawTextBox (int x, int y, int width, int lines);
extern qboolean		UI_IsFullscreen( void );
extern void			UI_SetActiveMenu( uiMenuCommand_t menu );
extern void			UI_PushMenu ( menuframework_s *menu );
extern void			UI_PopMenu (void);
extern void			UI_ForceMenuOff (void);
extern char			*UI_Argv( int arg );
extern char			*UI_Cvar_VariableString( const char *var_name );
extern void			UI_Refresh( int time );
extern void			UI_KeyEvent( int key );
//extern int			UI_RandomNumbers(int max);
extern void			UI_PrecacheMenuGraphics(menugraphics_s *menuGraphics,int maxI);
extern void			UI_MenuFrame(menuframework_s *menu);
extern void			UI_MenuFrame2(menuframework_s *menu);

extern int			UI_PopulateRanksArray( char* ranks[] ); //RPG-X: TiM
extern int			UI_PopulateRankSetArray( char *rankSets[] );
extern void			UI_InitRanksData( char* ranksName );
extern int			UI_LoadClassString( void );
extern int			UI_PopulateClassSetArray( char *classSets[] );
extern int			UI_PopulateClassArray( char *classes[] );
extern int 			UI_InitClassData( char* fileName );

extern qboolean		m_entersound;
extern uiStatic_t	uis;

//
// ui_spLevel.c
//
void UI_SPLevelMenu_Cache( void );
void UI_SPLevelMenu( void );
void UI_SPLevelMenu_f( void );
void UI_SPLevelMenu_ReInit( void );
extern void UI_ResetGameMenu_Cache(void);

//
// ui_spArena.c
//
void UI_SPArena_Start( const char *arenaInfo );

//
// ui_spPostgame.c
//
void UI_SPPostgameMenu_Cache( void );
void UI_SPPostgameMenu_f( void );

//
// ui_spSkill.c
//
void UI_SPSkillMenu( const char *arenaInfo );
void UI_SPSkillMenu_Cache( void );

//
// ui_syscalls.c
//
void			trap_Print( const char *string );
void			trap_Error( const char *string );
int				trap_Milliseconds( void );
void			trap_Cvar_Register( vmCvar_t *vmCvar, const char *varName, const char *defaultValue, int flags );
void			trap_Cvar_Update( vmCvar_t *vmCvar );
void			trap_Cvar_Set( const char *var_name, const char *value );
float			trap_Cvar_VariableValue( const char *var_name );
void			trap_Cvar_VariableStringBuffer( const char *var_name, char *buffer, int bufsize );
void			trap_Cvar_SetValue( const char *var_name, float value );
void			trap_Cvar_Reset( const char *name );
void			trap_Cvar_Create( const char *var_name, const char *var_value, int flags );
void			trap_Cvar_InfoStringBuffer( int bit, char *buffer, int bufsize );
int				trap_Argc( void );
void			trap_Argv( int n, char *buffer, int bufferLength );
void			trap_Cmd_ExecuteText( int exec_when, const char *text );	// don't use EXEC_NOW!
int				trap_FS_FOpenFile( const char *qpath, fileHandle_t *f, fsMode_t mode );
void			trap_FS_Read( void *buffer, int len, fileHandle_t f );
void			trap_FS_Write( const void *buffer, int len, fileHandle_t f );
void			trap_FS_FCloseFile( fileHandle_t f );
int				trap_FS_GetFileList(  const char *path, const char *extension, char *listbuf, int bufsize );
qhandle_t		trap_R_RegisterModel( const char *name );
qhandle_t		trap_R_RegisterSkin( const char *name );
qhandle_t		trap_R_RegisterShaderNoMip( const char *name );
void			trap_R_ClearScene( void );
void			trap_R_AddRefEntityToScene( const refEntity_t *re );
void			trap_R_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *verts );
void			trap_R_AddLightToScene( const vec3_t org, float intensity, float r, float g, float b );
void			trap_R_RenderScene( const refdef_t *fd );
void			trap_R_SetColor( const float *rgba );
void			trap_R_DrawStretchPic( float x, float y, float w, float h, float s1, float t1, float s2, float t2, qhandle_t hShader );
void			trap_UpdateScreen( void );
void			trap_CM_LerpTag( orientation_t *tag, clipHandle_t mod, int startFrame, int endFrame, float frac, const char *tagName );
void			trap_S_StartLocalSound( sfxHandle_t sfx, int channelNum );
sfxHandle_t		trap_S_RegisterSound( const char *sample );
void			trap_Key_KeynumToStringBuf( int keynum, char *buf, int buflen );
void			trap_Key_GetBindingBuf( int keynum, char *buf, int buflen );
void			trap_Key_SetBinding( int keynum, const char *binding );
qboolean		trap_Key_IsDown( int keynum );
qboolean		trap_Key_GetOverstrikeMode( void );
void			trap_Key_SetOverstrikeMode( qboolean state );
void			trap_Key_ClearStates( void );
int				trap_Key_GetCatcher( void );
void			trap_Key_SetCatcher( int catcher );
void			trap_GetClipboardData( char *buf, int bufsize );
void			trap_GetClientState( uiClientState_t *state );
void			trap_GetGlconfig( glconfig_t *glconfig );
int				trap_GetConfigString( int index, char* buff, int buffsize );
int				trap_LAN_GetLocalServerCount( void );
void			trap_LAN_GetLocalServerAddressString( int n, char *buf, int buflen );
int				trap_LAN_GetGlobalServerCount( void );
void			trap_LAN_GetGlobalServerAddressString( int n, char *buf, int buflen );
int				trap_LAN_GetPingQueueCount( void );
void			trap_LAN_ClearPing( int n );
void			trap_LAN_GetPing( int n, char *buf, int buflen, int *pingtime );
void			trap_LAN_GetPingInfo( int n, char *buf, int buflen );
int				trap_MemoryRemaining( void );
qboolean		trap_SetCDKey( char *buf );
void trap_R_ModelBounds( clipHandle_t model, vec3_t mins, vec3_t maxs );

//
// ui_addbots.c
//
void UI_AddBots_Cache( void );
void UI_AddBotsMenu( void );

//
// ui_removebots.c
//
void UI_RemoveBots_Cache( void );
void UI_RemoveBotsMenu( void );

//
// ui_teamorders.c
//
extern void UI_TeamOrdersMenu( int fromMenu );
extern void UI_TeamOrdersMenu_f( void );
extern void UI_TeamOrdersMenu_Cache( void );

//
// ui_display.c
//
//void UI_DisplayOptionsMenu_Cache( void );
void UI_DisplayOptionsMenu( void );

//
// ui_sound.c
//
//void UI_SoundOptionsMenu_Cache( void );
//void UI_SoundOptionsMenu( void );
extern float setup_menubuttons[8][2];
void UI_SoundMenu( void);
void UI_SoundMenu_Cache(void); 

//
// ui_fonts.c
//
void UI_FontsMenu( void); 

//
// ui_cvars.c
//
extern void GammaCallback( void *s, int notification );
extern void ScreensizeCallback( void *s, int notification );

//
// ui_network.c
//
void UI_NetworkOptionsMenu_Cache( void );
void UI_NetworkOptionsMenu( void );

//
// ui_gameinfo.c
//
typedef enum {
	AWARD_EFFICIENCY,		// Accuracy
	AWARD_SHARPSHOOTER,		// Most compression rifle frags
	AWARD_UNTOUCHABLE,		// Perfect (no deaths)
	AWARD_LOGISTICS,		// Most pickups
	AWARD_TACTICIAN,		// Kills with all weapons
	AWARD_DEMOLITIONIST,	// Most explosive damage kills
	AWARD_STREAK,			// Ace/Expert/Master/Champion
	AWARD_TEAM,				// MVP/Defender/Warrior/Carrier/Interceptor/Bravery
	AWARD_SECTION31,		// All-around god
	AWARD_MAX
} awardType_t;

const char *UI_GetArenaInfoByNumber( int num );
const char *UI_GetArenaInfoByMap( const char *map );
const char *UI_GetSpecialArenaInfo( const char *tag );
int UI_GetNumArenas( void );
int UI_GetNumSPArenas( void );
int UI_GetNumSPTiers( void );

void UI_ServerAdvancedOptions(int fromMenu);

char *UI_GetBotInfoByNumber( int num );
char *UI_GetBotInfoByName( const char *name );
int UI_GetNumBots( void );

void UI_GetBestScore( int level, int *score, int *skill );
void UI_SetBestScore( int level, int score );
int UI_TierCompleted( int levelWon );
qboolean UI_ShowTierVideo( int tier );
qboolean UI_CanShowTierVideo( int tier );
int  UI_GetCurrentGame( int curLevel );
void UI_NewGame( void );
void UI_LogAwardData( int award, int data );
int UI_GetAwardLevel( int award );

void UI_InitGameinfo( void );


void UI_MenuBottomLineEnd_Graphics (const char *string,int color, qboolean *space );
void UI_PrintMenuGraphics(menugraphics_s *menuGraphics,int maxI);

//
// ui_cvars.c
//
extern void InvertMouseCallback(void *s, int notification);
extern void MouseSpeedCallback( void *s, int notification );
extern void SmoothMouseCallback( void *s, int notification );
extern void AnisotropicFilteringCallback( void *s, int notification );
extern void JoyXButtonCallback( void *s, int notification );
extern void JoyYButtonCallback( void *s, int notification );

//
// ui_admin.c -- additional
//
typedef struct {
	int		id;
	char	name[36];
} clientData_t;

//Generic data, used in more than one menu
typedef struct {
	char				locList[MAX_LOCATIONS][32];
	char				*locListPtr[MAX_LOCATIONS+1]; //ghey....
	int					numLocs;	

	clientData_t		charList[MAX_CLIENTS];
	char				*charListPtr[MAX_CLIENTS+1]; //really ghey
	int					numChars;

	char*				giveItems[25];

} adminGeneric_t;

#endif
