//#define ENABLE_BUTTON_BG		1	// enables button background image
#define ENABLE_SEPARATOR		1	// enables separator bars
#define ENABLE_TITLE_BG			1	// enables menu title background graphics

/*
#ifndef CHOICE_SIZE_X
#error "CHOICE_SIZE_X undefined"
#endif
#ifndef CHOICE_SIZE_Y
#error "CHOICE_SIZE_Y undefined"
#endif
*/

#ifndef CHOICE_SIZE_X
#define CHOICE_SIZE_X			150
#endif

#ifndef CHOICE_SIZE_Y
#define CHOICE_SIZE_Y			22
#endif

#ifndef CHOICE_SIDEITEM_SIZE_X
#define CHOICE_SIDEITEM_SIZE_X	64
#endif
#ifndef CHOICE_SIDEITEM_SPACING
#define CHOICE_SIDEITEM_SPACING	16
#endif

#ifndef CHOICE_GROUP
#define CHOICE_GROUP ""
#endif

#ifndef CHOICE_X_START
#define CHOICE_X_START			58
#endif

#ifndef CHOICE_X_SPACING
#define CHOICE_X_SPACING		250
#endif

#ifndef CHOICE_Y_START
#define CHOICE_Y_START			82
#endif

#ifndef CHOICE_Y_SPACING
#define CHOICE_Y_SPACING		20
#endif

#ifndef CHOICE_Y_COUNT
#define CHOICE_Y_COUNT			20
#endif

#ifndef CHOICE_TEXT_OFFSET_X
#define CHOICE_TEXT_OFFSET_X	22
#endif
#ifndef SECTION_TEXT_OFFSET_X
#define SECTION_TEXT_OFFSET_X	0
#endif

#ifndef CHOICE_ACCEPT_ALIGN_X
#define CHOICE_ACCEPT_ALIGN_X	6
#endif

#ifndef CHOICE_ACCEPT_ALIGN_Y
#define CHOICE_ACCEPT_ALIGN_Y	2
#endif

#ifndef NEW_X_OFFSET			
#define NEW_X_OFFSET			0
#endif

#ifndef NEW_Y_OFFSET			
#define NEW_Y_OFFSET			0
#endif

#ifndef TITLE_Y_OFFSET
#define TITLE_Y_OFFSET			0
#endif

#ifndef TITLE_X_OFFSET
#define TITLE_X_OFFSET			0
#endif

#ifndef CHOICE_FOCUS_SOUND
#define CHOICE_FOCUS_SOUND		"mouse_over"
#endif

#ifndef CHOICE_TEXTSIZE
#define CHOICE_TEXTSIZE			TEXTSIZE_DEFAULT
#endif

#ifndef CHOICE_TEXTFONT
#define CHOICE_TEXTFONT			UI_FONT_NORMAL
#endif

#ifndef CHOICE_HEADERCOLOR
#define CHOICE_HEADERCOLOR		1 1 1 0.75
#endif

#ifndef CHOICE_TEXTCOLOR
#define CHOICE_TEXTCOLOR		1 1 1 0.5
#endif

#ifndef CHOICE_TEXTCOLOR_CAPT
#define CHOICE_TEXTCOLOR_CAPT	CHOICE_TEXTCOLOR
#endif

#ifndef CHOICE_TEXTSTYLE
#define CHOICE_TEXTSTYLE		0
#endif

#ifndef CHOICE_TEXTALIGN
#define	CHOICE_TEXTALIGN		ITEM_ALIGN_MIDDLE_LEFT
#endif

#ifndef ALT_HINT_X_OFFSET
#define ALT_HINT_X_OFFSET		-16
#endif

#ifndef SECTION_X_OFFSET
#define SECTION_X_OFFSET		0
#endif

#ifndef CHOICE_TEXTCOLOR_DISABLED
#define CHOICE_TEXTCOLOR_DISABLED		0.5 0.5 0.5 0.5
#endif

#ifndef CHOICE_SEP_WIDTH
#define CHOICE_SEP_WIDTH		130
#endif

#ifndef CHOICE_SEP_OFFSET_X
#define CHOICE_SEP_OFFSET_X		0
#endif

#ifndef CHOICE_SEP_OFFSET_Y
#define CHOICE_SEP_OFFSET_Y		0
#endif

#ifndef CHOICE_DVAR_WIDTH_OFFSET
#define	CHOICE_DVAR_WIDTH_OFFSET 0
#endif

#ifndef CHOICE_DVAR_TEXTALIGN
#define CHOICE_DVAR_TEXTALIGN	ITEM_ALIGN_MIDDLE_RIGHT
#endif

#ifndef CHOICE_DVAR_OFFSET_X
#define	CHOICE_DVAR_OFFSET_X	(0 - CHOICE_TEXT_OFFSET_X)
#endif

#ifndef CHOICE_SEP_BACKGROUND
#define	CHOICE_SEP_BACKGROUND	"gradient_fadein"
#endif

#ifndef HIGHLIGHT_SHADER_ART
#define HIGHLIGHT_SHADER_ART	"button_highlight_end"
#endif

#ifndef ALTERNATE_HINT_SHADER
#define ALTERNATE_HINT_SHADER	"alternate_hint"
#endif

#ifndef ALTERNATE_HINT_COLOR
#define ALTERNATE_HINT_COLOR	1 1 1 1 //0.55 0.95 0.55 0.9//0 1 0 0.35//0.75 .75 0.8 1
#endif

#ifndef HIGHLIGHT_COLOR
#define HIGHLIGHT_COLOR			0.2 0.25 0.35 0.25
#endif
#ifndef HIGHLIGHT_BORDER_COLOR
#define HIGHLIGHT_BORDER_COLOR	0.8 0.95 1 0.4
#endif

#ifndef CHOICE_HORIZONTAL_ALIGN
#define CHOICE_HORIZONTAL_ALIGN HORIZONTAL_ALIGN_DEFAULT
#endif
#ifndef CHOICE_VERTICAL_ALIGN
#define CHOICE_VERTICAL_ALIGN VERTICAL_ALIGN_DEFAULT
#endif

#ifndef HIGHLIGHT_BORDER
#define HIGHLIGHT_BORDER		WINDOW_BORDER_RAISED
#endif

#ifndef HIGHLIGHT_SHADER
#define HIGHLIGHT_SHADER		"white"
#endif

#ifndef A_BUTTON_SIZE
#define A_BUTTON_SIZE			0.33
#endif

#ifndef A_BUTTON_OFFSET_X
#define A_BUTTON_OFFSET_X		(0-4)
#endif

#ifndef	A_BUTTON_FONT
#define A_BUTTON_FONT UI_FONT_NORMAL
#endif

#ifndef A_BUTTON_OFFSET_Y
#define A_BUTTON_OFFSET_Y	0
#endif

#ifndef A_BUTTON_OFFSET_Y
#define A_BUTTON_OFFSET_Y		0
#endif


#ifdef PS3
	#define A_BUTTON_BG_COLOR 	0.25 0.25 0.25 1
#else
	#define A_BUTTON_BG_COLOR 	0 0 0 1
#endif

#define A_BUTTON_TEXTSTYLE	ITEM_TEXTSTYLE_NORMAL

#ifndef A_BUTTON_COLOR
#define A_BUTTON_COLOR			1 1 1 1
#endif

#ifndef BUTTON_BG_COLOR
#define BUTTON_BG_COLOR		0.9 0.9 1 0.07
#endif

// ------------ splitscreen ----------------


// -----------------------------------------

#if !defined( CHOICE_SEP_1 ) || !defined( CHOICE_SEP_SPACING )
#define CHOICE_SEP_TOTAL_SPACING( itemIndex )	0
#elif !defined( CHOICE_SEP_2 )
#define CHOICE_SEP_TOTAL_SPACING( itemIndex )	((itemIndex <= CHOICE_SEP_1) ? 0 : CHOICE_SEP_SPACING )
#elif !defined( CHOICE_SEP_3 )
#define CHOICE_SEP_TOTAL_SPACING( itemIndex )	((itemIndex <= CHOICE_SEP_1) ? 0 : ( (itemIndex <= CHOICE_SEP_2) ? CHOICE_SEP_SPACING : CHOICE_SEP_SPACING * 2 ) )
#else
#define CHOICE_SEP_TOTAL_SPACING( itemIndex )	((itemIndex <= CHOICE_SEP_1) ? 0 : ( (itemIndex <= CHOICE_SEP_2) ? CHOICE_SEP_SPACING : ( (itemIndex <= CHOICE_SEP_3) ? CHOICE_SEP_SPACING * 2 : CHOICE_SEP_SPACING * 3) ) )
#endif

#define CHOICE_ROW( itemIndex )		((itemIndex - 1) % CHOICE_Y_COUNT)
#define CHOICE_COL( itemIndex )		((itemIndex - 1 - ((itemIndex - 1) % CHOICE_Y_COUNT)) / CHOICE_Y_COUNT)

#define CHOICE_X( itemIndex ) 		(CHOICE_X_START + CHOICE_X_SPACING * CHOICE_COL( itemIndex ))
#define CHOICE_Y( itemIndex ) 		(CHOICE_Y_START + CHOICE_Y_SPACING * CHOICE_ROW( itemIndex ) + CHOICE_SEP_TOTAL_SPACING( itemIndex ))
#define CHOICE_ORIGIN( itemIndex )	CHOICE_X( itemIndex ) CHOICE_Y( itemIndex )
#define CHOICE_RECT( itemIndex )	CHOICE_ORIGIN( itemIndex ) CHOICE_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN

#define FOOTNOTE_RECT( x, y )			x y 240 60 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN

// ======================================================================================================================================
// ======================================================================================================================================
// ======================================================================================================================================

#define CHOICE_HIGHLIGHT( itemIndex, vis ) \
	CHOICE_HIGHLIGHT_CUSTOM( itemIndex, HIGHLIGHT_COLOR, HIGHLIGHT_BORDER_COLOR, vis )

#define UI_EDGE( porigin, palign, poffset_x, poffset_y, pcolor ) UI_EDGE_RAW( porigin, palign, 5, 20, poffset_x, poffset_y, pcolor )

#define UI_EDGE_REVERSE( porigin, palign, poffset_x, poffset_y, pcolor ) UI_EDGE_RAW( porigin, palign, -5, 20, poffset_x, poffset_y, pcolor )

#define UI_EDGE_RAW( porigin, palign, pw, ph, poffset_x, poffset_y, pcolor ) \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			porigin pw ph palign \
			origin			poffset_x poffset_y \
			background		HIGHLIGHT_SHADER_ART \
			forecolor		pcolor \
			visible			1; \
			decoration \
		} \

#define CHOICE_BUTTON_BG( itemIndex, visArg ) CHOICE_BUTTON_BG_RAW( itemIndex, "gradient_fadein", BUTTON_BG_COLOR, visArg )

#define CHOICE_BUTTON_BG_RAW( itemIndex, bgimage, foreColorArg, visArg ) \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X-(CHOICE_SIZE_Y/4)) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			exp				material( bgimage ); \
			forecolor		foreColorArg \
			visible			visArg; \
			decoration \
		} \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			(CHOICE_X( itemIndex )+(CHOICE_SIZE_X-(CHOICE_SIZE_Y/4))) CHOICE_Y( itemIndex ) (CHOICE_SIZE_Y/4) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			background		HIGHLIGHT_SHADER_ART \
			forecolor		foreColorArg \
			visible			visArg; \
			decoration \
		} \

#define CHOICE_HIGHLIGHT_CUSTOM( itemIndex, foreColorArg, borderColorArg, visArg ) \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X-(CHOICE_SIZE_Y/4)) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			background		HIGHLIGHT_SHADER \
			forecolor		foreColorArg \
			border			HIGHLIGHT_BORDER \
			bordersize		2 \
			bordercolor		borderColorArg \
			visible			when( localVarInt( ui_highlight ) == itemIndex && localVarString( ui_choicegroup ) == CHOICE_GROUP ); \
			decoration \
		} \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			(CHOICE_X( itemIndex )+(CHOICE_SIZE_X-(CHOICE_SIZE_Y/4))) CHOICE_Y( itemIndex ) (CHOICE_SIZE_Y/4) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			background		HIGHLIGHT_SHADER_ART \
			forecolor		foreColorArg \
			visible			when( localVarInt( ui_highlight ) == itemIndex && localVarString( ui_choicegroup ) == CHOICE_GROUP ); \
			decoration \
		} \
		CHOICE_ACCEPT_HINT( itemIndex, visArg )

// used for custom highlights for itemDefs that are special and can not use itemIndex or complie with the strict alignment of this macro set
#define CHOICE_HIGHLIGHT_CUSTOM_2( px, py, pw, ph, visArg ) \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			(px+(ph/4)) py (-(pw-(ph/4))) ph CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			background		HIGHLIGHT_SHADER \
			forecolor		BUTTON_BG_COLOR \
			visible			1 \
			decoration \
		} \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			px py (-(ph/4)) ph CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			background		HIGHLIGHT_SHADER_ART \
			forecolor		BUTTON_BG_COLOR \
			visible			1 \
			decoration \
		} \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			(px+(ph/4)) py (-(pw-(ph/4))) ph CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			background		HIGHLIGHT_SHADER \
			forecolor		HIGHLIGHT_COLOR \
			visible			visArg \
			decoration \
		} \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			px py (-(ph/4)) ph CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			background		HIGHLIGHT_SHADER_ART \
			forecolor		HIGHLIGHT_COLOR \
			visible			visArg \
			decoration \
		} \


//CHOICE_TEXT_OFFSET_X

#if defined( CONSOLE ) && !defined( SPLITSCREEN )
#define CHOICE_ACCEPT_HINT( itemIndex, vis ) \
		itemDef \
		{ \
			rect			CHOICE_RECT( itemIndex ) \
			origin			A_BUTTON_OFFSET_X A_BUTTON_OFFSET_Y \
			text			"@PLATFORM_UI_SELECTBUTTON" \
			textfont		A_BUTTON_FONT \
			textscale		A_BUTTON_SIZE \
			textstyle		A_BUTTON_TEXTSTYLE \
			textAlign		CHOICE_TEXTALIGN \
			textAlignX		0\
			textAlignY		-1\
			forecolor		1 1 1 1 \
			visible			when( localVarInt( ui_highlight ) == itemIndex && localVarString( ui_choicegroup ) == CHOICE_GROUP && vis ); \
			decoration \
		} 
#else // #if defined( CONSOLE ) && !defined( SPLITSCREEN )
#define CHOICE_ACCEPT_HINT( itemIndex, vis )
#endif // #else // #if defined( CONSOLE ) && !defined( SPLITSCREEN )
		
#define CHOICE_MENU_TITLE_SS( titleArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_TEXT \
			origin			ORIGIN_TITLE \
			forecolor		COLOR_TITLE \
			exp				text( titleArg ) \
			textalignx		-14 \
			textfont		UI_FONT_NORMAL \
			textscale		TEXTSIZE_DEFAULT \
			textstyle		CHOICE_TEXTSTYLE \
			textalign		ITEM_ALIGN_TOP_LEFT \
			visible			1 \
			decoration \
		}		
		
#define CHOICE_MENU_TITLE( titleArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_TEXT \
			origin			ORIGIN_TITLE \
			forecolor		COLOR_TITLE \
			exp				text( titleArg ) \
			textfont		UI_FONT_NORMAL \
			textscale		TEXTSIZE_TITLE \
			textstyle		CHOICE_TEXTSTYLE \
			textalign		ITEM_ALIGN_TOP_LEFT \
			textaligny		TITLE_Y_OFFSET \
			textalignx		TITLE_X_OFFSET \
			visible			1 \
			decoration \
		}
		
#define CHOICE_MENU_TITLE_VIS( titleArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_TEXT \
			origin			ORIGIN_TITLE \
			forecolor		COLOR_TITLE \
			text			titleArg \
			textfont		UI_FONT_NORMAL \
			textscale		TEXTSIZE_TITLE \
			textstyle		CHOICE_TEXTSTYLE \
			textalign		ITEM_ALIGN_TOP_LEFT \
			visible			when( visArg ) \
			decoration \
		}
	
#define CHOICE_SECTION_TITLE( itemIndex, titleArg ) \
	CHOICE_SECTION_TITLE_VIS( itemIndex, titleArg, 1 )	

#define CHOICE_SECTION_TITLE_VIS( itemIndex, titleArg, visArg ) \
	itemDef \
	{ \
		style			WINDOW_STYLE_SHADER \
		rect			(SECTION_X_OFFSET+0) 7 240 0.5 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
		origin			CHOICE_ORIGIN( itemIndex ) \
		background		"line_horizontal" \
		forecolor		1 1 1 0.85 \
		visible			visArg \
		decoration \
	}	 \
	itemDef \
	{ \
		style			WINDOW_STYLE_SHADER \
		rect			(SECTION_X_OFFSET+20) 8 200 10 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
		origin			CHOICE_ORIGIN( itemIndex ) \
		background		"line_horizontal" \
		forecolor		0.4 0.6 1 0.8 \
		visible			visArg \
		decoration \
	} \
	itemDef \
	{ \
		style			WINDOW_STYLE_SHADER \
		rect			(SECTION_X_OFFSET+0) 19 240 0.5 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
		origin			CHOICE_ORIGIN( itemIndex ) \
		background		"line_horizontal" \
		forecolor		1 1 1 0.85 \
		visible			visArg \
		decoration \
	} \
	itemDef \
	{ \
		type			ITEM_TYPE_TEXT \
		rect			(SECTION_X_OFFSET+0) -1 240 24 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
		origin			CHOICE_ORIGIN( itemIndex ) \
		forecolor		1 1 1 0.8 \
		exp				text( titleArg );\
		textstyle 		ITEM_TEXTSTYLE_SHADOWED \
		textfont		UI_FONT_NORMAL \
		textscale		TEXTSIZE_DEFAULT \
		textstyle		CHOICE_TEXTSTYLE \
		textAlign		ITEM_ALIGN_MIDDLE_CENTER \
		textAlignX		SECTION_TEXT_OFFSET_X \
		visible 		visArg \
		decoration \
	}


#define CHOICE_SEPARATOR( afterItemIndex ) \
		CHOICE_SEPARATOR_VIS( afterItemIndex, when( ENABLE_SEPARATOR ) )
		
#define CHOICE_SEPARATOR_VIS( afterItemIndex, visArg ) \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			(CHOICE_SEP_OFFSET_X) (CHOICE_Y_SPACING + CHOICE_SEP_SPACING / 2 + CHOICE_SEP_OFFSET_Y - 3 ) CHOICE_SEP_WIDTH 8 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			origin			CHOICE_ORIGIN( afterItemIndex ) \
			background		CHOICE_SEP_BACKGROUND \
			forecolor		BUTTON_BG_COLOR \
			visible			visArg \
			decoration \
		}
		
#define CHOICE_BUTTON( itemIndex, textArg, actionArg ) \
		CHOICE_BUTTON_VIS( itemIndex, textArg, actionArg, 1 )

#define CHOICE_BUTTON_NOHI( itemIndex, textArg, actionArg ) \
		CHOICE_BUTTON_VIS_NOHI( itemIndex, textArg, actionArg, 1 )

#define CHOICE_BUTTON_VIS( itemIndex, textArg, actionArg, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_BUTTON_VIS_NOHI( itemIndex, textArg, actionArg, visArg )
		
#define CHOICE_BUTTON_VIS_ADV( itemIndex, textArg, actionArg, visArg, vis ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, vis ) \
		CHOICE_BUTTON_VIS_NOHI( itemIndex, textArg, actionArg, visArg )

#define CHOICE_BUTTON_VIS_NOHI( itemIndex, textArg, actionArg, visArg ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, ;, ;, visArg )

#define CHOICE_BUTTON_FOCUS( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg ) \
		CHOICE_BUTTON_FOCUS_VIS( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, 1 )

#define CHOICE_BUTTON_FOCUS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, 1 )

#define CHOICE_BUTTON_FOCUS_VIS( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg )
		
#define CHOICE_BUTTON_FOCUS_VIS_ADV( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, vis ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, vis ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg )

#define CHOICE_BUTTON_FOCUS_VIS_NOHI( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, ; )

#define CHOICE_BUTTON_EX( itemIndex, textArg, actionArg, extraArgs ) \
		CHOICE_BUTTON_BG( itemIndex, 1 ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, ;, ;, 1, extraArgs )

#define CHOICE_BUTTON_EX_ADV( itemIndex, textArg, actionArg, extraArgs, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, 1 ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, ;, ;, visArg, extraArgs )
		
#define CHOICE_BUTTON_FOCUS_VIS_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs )
		
#define CHOICE_BUTTON_FOCUS_VIS_EX_ADV( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs, vis ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, vis ) \
		CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs )

#define CHOICE_BUTTON_FOCUS_VIS_NOHI_EX( itemIndex, textArg, actionArg, onFocusArg, leaveFocusArg, visArg, extraArgs ) \
		itemDef \
		{ \
			type			ITEM_TYPE_BUTTON \
			rect			CHOICE_RECT( itemIndex ) \
			exp				text( textArg ); \
			textfont		CHOICE_TEXTFONT \
			textscale		CHOICE_TEXTSIZE \
			textstyle		CHOICE_TEXTSTYLE \
			textAlign		CHOICE_TEXTALIGN \
			textAlignX		CHOICE_TEXT_OFFSET_X \
			forecolor		CHOICE_TEXTCOLOR \
			visible			visArg \
			extraArgs \
			CHOICE_SCRIPTS_ALL( itemIndex, actionArg, onFocusArg, leaveFocusArg ) \
		} \


#define CHOICE_DBUTTON_VIS_NOHI( itemIndex, textArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_TEXT \
			rect			CHOICE_RECT( itemIndex ) \
			exp				text( textArg ); \
			textfont		CHOICE_TEXTFONT \
			textscale		CHOICE_TEXTSIZE \
			textstyle		CHOICE_TEXTSTYLE \
			textAlign		CHOICE_TEXTALIGN \
			textAlignX		CHOICE_TEXT_OFFSET_X \
			forecolor		CHOICE_TEXTCOLOR_DISABLED \
			visible			visArg \
			decoration \
		} \
		
#define CHOICE_DBUTTON_VIS( itemIndex, textArg, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_TEXT \
			rect			CHOICE_RECT( itemIndex ) \
			exp				text( textArg ); \
			textfont		UI_FONT_NORMAL \
			textscale		CHOICE_TEXTSIZE \
			textstyle		CHOICE_TEXTSTYLE \
			textAlign		CHOICE_TEXTALIGN \
			textAlignX		CHOICE_TEXT_OFFSET_X \
			forecolor		CHOICE_TEXTCOLOR_DISABLED \
			visible			visArg \
			decoration \
		} \

#define CHOICE_DVARENUMLIST( itemIndex, textArg, dvarArg, dvarListArg, actionArg ) \
		CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_DVARENUM, dvarEnumList dvarListArg, actionArg, 1 )

#define CHOICE_DVARENUMLIST_VIS( itemIndex, textArg, dvarArg, dvarListArg, actionArg, visArg ) \
		CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_DVARENUM, dvarEnumList dvarListArg, actionArg, visArg )

#define CHOICE_DVARSTRINGLIST( itemIndex, textArg, dvarArg, strListArg, actionArg ) \
		CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarStrList strListArg, actionArg, 1 )

#define CHOICE_DVARSTRINGLIST_VIS( itemIndex, textArg, dvarArg, strListArg, actionArg, visArg ) \
		CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarStrList strListArg, actionArg, visArg )

#define CHOICE_DVARFLOATLIST( itemIndex, textArg, dvarArg, strListArg, actionArg ) \
		CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarFloatList strListArg, actionArg, 1 )

#define CHOICE_DVARFLOATLIST_VIS( itemIndex, textArg, dvarArg, strListArg, actionArg, visArg ) \
		CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarFloatList strListArg, actionArg, visArg )

#define CHOICE_DVARFLOATLIST_FOCUS_VIS( itemIndex, textArg, dvarArg, strListArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
		CHOICE_DVARLIST_FOCUS_VIS( itemIndex, textArg, dvarArg, ITEM_TYPE_MULTI, dvarFloatList strListArg, actionArg, onFocusArg, leaveFocusArg, visArg )

#define CHOICE_DVARLIST_VIS( itemIndex, textArg, dvarArg, listTypeArg, listArg, actionArg, visArg ) \
		CHOICE_DVARLIST_FOCUS_VIS( itemIndex, textArg, dvarArg, listTypeArg, listArg, actionArg, ;, ;, visArg )

#define CHOICE_DVARLIST_FOCUS_VIS( itemIndex, textArg, dvarArg, listTypeArg, listArg, actionArg, onFocusArg, leaveFocusArg, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
		itemDef \
		{ \
			type			listTypeArg \
			dvar			dvarArg \
			listArg \
			rect			CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+45) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			textalign		CHOICE_DVAR_TEXTALIGN \
			textalignx		CHOICE_DVAR_OFFSET_X \
			textscale		CHOICE_TEXTSIZE \
			textstyle 		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			forecolor		CHOICE_TEXTCOLOR \
			visible			visArg ; \
			CHOICE_SCRIPTS_ALL( itemIndex, actionArg, onFocusArg, leaveFocusArg ) \
		}

#define	CHOICE_STATUS_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_TEXT \
			rect			CHOICE_RECT( itemIndex ) \
			exp				text( textArg ); \
			textalign		ITEM_ALIGN_MIDDLE_RIGHT \
			textalignx		(0 - CHOICE_TEXT_OFFSET_X) \
			textscale		CHOICE_TEXTSIZE \
			style			WINDOW_STYLE_FILLED \
			forecolor		colorArg \
			visible			visArg ; \
			decoration \
		}

#define	CHOICE_NEWICON_VIS( itemIndex, imageArg, visArg ) \
		itemDef \
		{ \
			style			WINDOW_STYLE_SHADER \
			rect			(CHOICE_X( itemIndex ) + CHOICE_SIZE_X + NEW_X_OFFSET ) (CHOICE_Y( itemIndex )+2+NEW_Y_OFFSET) (CHOICE_SIZE_Y*2) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			exp				material( imageArg ) \
			visible			visArg ; \
			decoration \
		}

#define	CHOICE_LEFTITEM_VIS( itemIndex, textArg, colorArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_TEXT \
			rect			(CHOICE_X( itemIndex ) - CHOICE_SIDEITEM_SIZE_X - CHOICE_SIDEITEM_SPACING) CHOICE_Y( itemIndex ) CHOICE_SIDEITEM_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			exp				text( textArg ); \
			textalign		ITEM_ALIGN_MIDDLE_LEFT \
			textfont		CHOICE_TEXTFONT \
			textscale		CHOICE_TEXTSIZE \
			textstyle 		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			forecolor		colorArg \
			visible			visArg ; \
			decoration \
		}

#define	CHOICE_RIGHTITEM_VIS( itemIndex, textArg, colorArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_TEXT \
			rect			(CHOICE_X( itemIndex ) + CHOICE_SIDEITEM_SIZE_X + CHOICE_SIDEITEM_SPACING) CHOICE_Y( itemIndex ) CHOICE_SIDEITEM_SIZE_X CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			exp				text( textArg ); \
			textalign		ITEM_ALIGN_MIDDLE_RIGHT \
			textscale		CHOICE_TEXTSIZE \
			textstyle 		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			forecolor		colorArg \
			visible			visArg ; \
			decoration \
		}

#define CHOICE_DVAREDIT_NUMERIC( itemIndex, textArg, dvarArg, max_chars, actionArg ) \
		CHOICE_DVAREDIT_NUMERIC_VIS( itemIndex, textArg, dvarArg, max_chars, actionArg, 1 )

#define CHOICE_DVAREDIT_NUMERIC_VIS( itemIndex, textArg, dvarArg, max_chars, actionArg, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, 1 ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_CAPTION( itemIndex, textArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_NUMERICFIELD \
			text			" " \
			dvar			dvarArg \
			rect			CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			textalign		ITEM_ALIGN_MIDDLE_LEFT \
			textalignx		(CHOICE_SIZE_X+8) /*(-(CHOICE_TEXT_OFFSET_X))*/ \
			textscale		CHOICE_TEXTSIZE \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			forecolor		CHOICE_TEXTCOLOR \
			visible			visArg \
			maxChars		max_chars \
			CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
		}
		
		
#define CHOICE_DVAREDIT( itemIndex, textArg, dvarArg, actionArg ) \
		CHOICE_DVAREDIT_VIS( itemIndex, textArg, dvarArg, 31, 18, actionArg, 1 )

#define CHOICE_DVAREDIT_VIS( itemIndex, textArg, dvarArg, max_chars, max_paintchars, actionArg, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, 1 ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_CAPTION( itemIndex, textArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_EDITFIELD \
			text			" " \
			dvar			dvarArg \
			rect			CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			textalign		ITEM_ALIGN_MIDDLE_LEFT \
			textalignx		(CHOICE_SIZE_X+8) /*(-(CHOICE_TEXT_OFFSET_X))*/ \
			textscale		CHOICE_TEXTSIZE \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			forecolor		CHOICE_TEXTCOLOR \
			visible			visArg \
			maxChars		max_chars \
			maxpaintchars	max_paintchars \
			CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
		}
		
#define CHOICE_DVARSLIDER( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg ) \
		CHOICE_DVARSLIDER_VIS( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg, 1 )

#define CHOICE_DVARSLIDER_VIS( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg, visArg ) \
		CHOICE_DVARSLIDER_VIS_EX( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg, ;, 1 )

#define CHOICE_DVARSLIDER_VIS_EX( itemIndex, textArg, dvarArg, defaultArg, minArg, maxArg, actionArg, extraArg, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, 1 ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_CAPTION( itemIndex, textArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_SLIDER \
			dvarfloat		dvarArg defaultArg minArg maxArg \
			rect			CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			textalign		ITEM_ALIGN_MIDDLE_LEFT \
			textalignx		(CHOICE_SIZE_X+20) /*(-(CHOICE_TEXT_OFFSET_X))*/ \
			textscale		CHOICE_TEXTSIZE \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			forecolor		CHOICE_TEXTCOLOR \
			visible			visArg \
			extraArg \
			CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
		}


#define CHOICE_DVARYESNO( itemIndex, textArg, dvarArg, actionArg ) \
		CHOICE_DVARYESNO_VIS( itemIndex, textArg, dvarArg, actionArg, 1 )

#define CHOICE_DVARYESNO_VIS( itemIndex, textArg, dvarArg, actionArg, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, 1 ) \
		CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_YESNO \
			dvar			dvarArg \
			rect			CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			textalign		ITEM_ALIGN_MIDDLE_LEFT \
			textalignx		(CHOICE_SIZE_X+20)/*(-(CHOICE_TEXT_OFFSET_X))*/ \
			textscale		CHOICE_TEXTSIZE \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			forecolor		CHOICE_TEXTCOLOR \
			visible			visArg \
			CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
		}

#define CHOICE_BIND( itemIndex, textArg, cmdArg, actionArg ) \
		CHOICE_BIND_VIS( itemIndex, textArg, cmdArg, actionArg, 1 )

#define CHOICE_BIND_VIS( itemIndex, textArg, cmdArg, actionArg, visArg ) \
		CHOICE_BUTTON_BG( itemIndex, visArg ) \
		CHOICE_HIGHLIGHT( itemIndex, visArg ) \
		CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_BIND \
			dvar			cmdArg \
			rect			CHOICE_ORIGIN( itemIndex ) (CHOICE_SIZE_X+120) CHOICE_SIZE_Y CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			textalign		ITEM_ALIGN_MIDDLE_LEFT \
			textalignx		(CHOICE_SIZE_X+20)/*(-(CHOICE_TEXT_OFFSET_X))*/ \
			textscale		CHOICE_TEXTSIZE \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			forecolor		CHOICE_TEXTCOLOR \
			visible			visArg \
			CHOICE_SCRIPTS_ALL( itemIndex, actionArg, show keyBindStatus, hide keyBindStatus ) \
		}


#define CHOICE_CAPTION( itemIndex, textArg ) \
		CHOICE_CAPTION_VIS( itemIndex, textArg, 1 )

#define CHOICE_CAPTION_COLOR( itemIndex, textArg, colorArg ) \
		CHOICE_CAPTION_COLOR_VIS( itemIndex, textArg, colorArg, 1 )

#define CHOICE_CAPTION_VIS( itemIndex, textArg, visArg ) \
		CHOICE_CAPTION_COLOR_VIS( itemIndex, textArg, CHOICE_TEXTCOLOR_CAPT, visArg )

#define CHOICE_CAPTION_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_BUTTON \
			rect			CHOICE_RECT( itemIndex ) \
			exp				text( textArg ); \
			textfont		UI_FONT_NORMAL \
			textscale		CHOICE_TEXTSIZE \
			textstyle		CHOICE_TEXTSTYLE \
			textAlign		CHOICE_TEXTALIGN \
			textAlignX		CHOICE_TEXT_OFFSET_X \
			forecolor		colorArg \
			visible			visArg \
			decoration \
		}

#define CHOICE_SUBTEXT_COLOR_VIS( itemIndex, textArg, colorArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_BUTTON \
			rect			CHOICE_RECT( itemIndex ) \
			exp				text( textArg ); \
			textfont		UI_FONT_NORMAL \
			textscale		CHOICE_TEXTSIZE \
			textstyle		CHOICE_TEXTSTYLE \
			textAlign		ITEM_ALIGN_MIDDLE_LEFT \
			forecolor		colorArg \
			visible			visArg \
			decoration \
		}


#define CHOICE_SCRIPTS_ACTION( itemIndex, actionArg ) \
	CHOICE_SCRIPTS_ALL( itemIndex, actionArg, ;, ; )



#define CHOICE_SCRIPTS_ALL( itemIndex, actionArg, onFocusArg, leaveFocusArg ) \
			onFocus \
			{ \
				play CHOICE_FOCUS_SOUND; \
				setLocalVarInt ui_highlight itemIndex; \
				setLocalVarString ui_choicegroup CHOICE_GROUP; \
				onFocusArg \
			} \
			leaveFocus \
			{ \
				setLocalVarInt ui_highlight 0; \
				leaveFocusArg \
			} \
			action \
			{ \
				play "mouse_click"; \
				actionArg; \
			}


#define CHOICE_APPLY( textArg, actionArg ) \
		CHOICE_APPLY_VIS( textArg, actionArg, 1 )

#define CHOICE_APPLY_VIS( textArg, actionArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_BUTTON \
			rect			430 422 100 16 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			text			textArg \
			textfont		UI_FONT_NORMAL \
			textscale		TEXTSIZE_DEFAULT \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			textAlign		ITEM_ALIGN_MIDDLE_CENTER \
			forecolor		COLOR_FOCUSED \
			visible			visArg ; \
			action \
			{ \
				play "mouse_click"; \
				actionArg; \
			} \
		}

#define CHOICE_BACK( textArg, actionArg ) \
		CHOICE_BACK_VIS( textArg, actionArg, 1 )

#define CHOICE_BACK_VIS( textArg, actionArg, visArg ) \
		itemDef \
		{ \
			type			ITEM_TYPE_BUTTON \
			rect			270 422 100 16 CHOICE_HORIZONTAL_ALIGN CHOICE_VERTICAL_ALIGN \
			text			textArg \
			textfont		UI_FONT_NORMAL \
			textscale		TEXTSIZE_DEFAULT \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			textAlign		ITEM_ALIGN_MIDDLE_CENTER \
			forecolor		COLOR_FOCUSED \
			visible			visArg ; \
			action \
			{ \
				play "mouse_click"; \
				actionArg; \
			} \
		}


#define CHOICE_FOOTNOTE( textArg, x, y ) \
		CHOICE_FOOTNOTE_VIS( textArg, x, y, 1 )

#define CHOICE_FOOTNOTE_VIS( textArg, x, y, visArg ) \
		itemDef \
		{ \
			text 			textArg \
			rect 			FOOTNOTE_RECT( x, y ) \
			autowrapped \
			textfont		UI_FONT_NORMAL \
			textscale 		TEXTSIZE_SMALL \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			textalign 		ITEM_ALIGN_TOP_LEFT \
			visible 		visArg \
			decoration \
		}


#define CHOICE_KEYBINDHELP \
		itemDef \
		{ \
			name			keyBindStatus \
			rect			-190 -8 300 20 HORIZONTAL_ALIGN_CENTER VERTICAL_ALIGN_BOTTOM \
			ownerdraw		UI_KEYBINDSTATUS \
			textstyle		ITEM_TEXTSTYLE_SHADOWED \
			style			WINDOW_STYLE_FILLED \
			backcolor		0 0 0 0 \
			forecolor		.9 .9 .9 1 \
			border			0 \
			bordercolor		.5 .5 .5 .5 \
			textscale		TEXTSIZE_SMALL \
			textalign		ITEM_ALIGN_MIDDLE_LEFT \
			visible			0 \
			decoration \
		}





