class KFAudioSettingsTab extends Settings_Tabs;

var localized string	AudioModes[4],
						VoiceModes[3];


var automated GUISectionBackground	i_BG1, i_BG2, i_BG3;
var automated moSlider		sl_MusicVol, sl_EffectsVol, sl_VOIP;
var automated moComboBox	co_Mode, co_Announce;
var automated moCheckbox 	ch_ReverseStereo, ch_MessageBeep, ch_LowDetail, ch_Default, ch_VoiceChat;

var automated moCheckBox    ch_AJPublic, ch_AutoSpeak, ch_Dampen;
var automated moEditBox     ed_Active;
var automated moEditBox     ed_ChatPassword;
var automated moComboBox    co_Quality, co_LANQuality;

var float	fMusic, fEffects, fVOIP;
var int		iVoice, iMode, iVoiceMode;
var bool	bRev, bBeep, bLow, bCompat, b3DSound, bEAX, bDefault, bVoiceChat, bDampen;

var bool 	bAJPublic, bAutoSpeak;
var string  sPwd, sCodec, sLANCodec, sActive;
var float 	fVoice;

var class<VoiceChatReplicationInfo> VoiceChatClass;
var string VoiceChatClassName;

function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
	local int i;
    local bool bIsWin32;
   	local string CName, CDesc;
	local class<VoiceChatReplicationInfo> Cls;
	local array<string>    InstalledCodecs;

	bIsWin32 = ( ( PlatformIsWindows() ) && ( !PlatformIs64Bit() ) );

	Super.InitComponent(MyController, MyOwner);

	if ( bIsWin32 )
	{
		for(i = 0;i < ArrayCount(AudioModes);i++)
			co_Mode.AddItem(AudioModes[i]);
	}
	else
	{
		co_Mode.AddItem("OpenAL");
	}

	// Need to load TeamVoiceReplicationInfo to get team channel names
	Cls = class<VoiceChatReplicationInfo>( DynamicLoadObject( VoiceChatClassName, class'Class') );
	if ( Cls != None )
		VoiceChatClass = Cls;

	VoiceChatClass.static.GetInstalledCodecs( InstalledCodecs );
	for ( i = 0; i < InstalledCodecs.Length; i++ )
	{
		VoiceChatClass.static.GetCodecInfo( InstalledCodecs[i], CName, CDesc );
		co_Quality.AddItem( CName,, InstalledCodecs[i] );
		co_LANQuality.AddItem( CName,, InstalledCodecs[i] );
	}

    ed_ChatPassword.MaskText(True);


	i_BG1.ManageComponent(sl_MusicVol);
	i_BG1.ManageComponent(sl_EffectsVol);
	i_BG1.ManageComponent(sl_VOIP);
	i_BG1.ManageComponent(co_Mode);
	i_BG1.ManageComponent(ch_LowDetail);
	i_BG1.ManageComponent(ch_Default);
	i_BG1.ManageComponent(ch_reverseStereo);
	i_BG1.ManageComponent(ch_MessageBeep);

	i_BG3.ManageComponent(ch_VoiceChat);
	i_BG3.ManageComponent(ch_Dampen);
	i_BG3.ManageComponent(ch_AJPublic);
	i_BG3.ManageComponent(ch_AutoSpeak);
	i_BG3.ManageComponent(ed_Active);
	i_BG3.ManageComponent(ed_ChatPassword);
	i_BG3.ManageComponent(co_Quality);
	i_BG3.ManageComponent(co_LANQuality);


	// !!! FIXME: Might use a preinstalled system OpenAL in the future on
	// !!! FIXME:  Mac or Unix, but for now, we don't...  --ryan.
	if ( !PlatformIsWindows() )
		ch_Default.DisableMe();
}

function ResetClicked()
{
	local class<AudioSubSystem> A;
	local PlayerController PC;
	local int i;

	Super.ResetClicked();

	PC = PlayerOwner();

	A = class<AudioSubSystem>(DynamicLoadObject(GetNativeClassName("Engine.Engine.AudioDevice"), Class'Class'));
	A.static.ResetConfig();

	class'Hud'.static.ResetConfig("bMessageBeep");
	class'LevelInfo'.static.ResetConfig("bLowSoundDetail");

	class'PlayerController'.static.ResetConfig("bNoVoiceTaunts");
	class'PlayerController'.static.ResetConfig("bNoVoiceMessages");

	A.static.ResetConfig("VoiceVolume");

	class'Engine.PlayerController'.static.ResetConfig("VoiceChatCodec");
	class'Engine.PlayerController'.static.ResetConfig("VoiceChatLANCodec");
    class'Engine.PlayerController'.static.ResetConfig("AutoJoinMask");
    class'Engine.PlayerController'.static.ResetConfig("ChatPassword");
    class'Engine.PlayerController'.static.ResetConfig("DefaultActiveChannel");
    class'Engine.PlayerController'.static.ResetConfig("bEnableInitialChatRoom");

	for (i = 0; i < Components.Length; i++)
		Components[i].LoadINI();
}

function InternalOnLoadINI(GUIComponent Sender, string s)
{
	local PlayerController PC;
	local bool bIsWin32;

	PC = PlayerOwner();

	switch (Sender)
	{
    	case sl_MusicVol:
    		fMusic = float(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice MusicVolume"));
    		sl_MusicVol.SetComponentValue(fMusic,true);
    		break;

    	case sl_EffectsVol:
    		fEffects = float(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice SoundVolume"));
    		sl_EffectsVol.SetComponentValue(fEffects,true);
    		break;

    	case co_Mode:
    		iMode = 1;
    		bIsWin32 = ( ( PlatformIsWindows() ) && ( !PlatformIs64Bit() ) );
    		if ( !bIsWin32 )
    		{
    			bCompat = False;
    			b3DSound = True;
    			iMode = 0;
    		}
    		else
    		{
    			if ( bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice CompatibilityMode")) )
    			{
    				bCompat = True;
    				iMode = 0;
    			}

    			if ( bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice Use3DSound")) )
    			{
    				b3DSound = True;
    				iMode = 2;
    			}

    			if ( bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseEAX" )) )
    			{
    				bEAX = True;
    				iMode = 3;
    			}
    		}
    		co_Mode.SilentSetIndex(iMode);
    		break;

    	case ch_ReverseStereo:
    		bRev = bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice ReverseStereo"));
    		ch_ReverseStereo.SetComponentValue(bRev,true);
    		break;

    	case ch_Default:
    		bDefault = bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseDefaultDriver"));
    		ch_Default.SetComponentValue(bDefault,true);
    		break;

       	case ch_MessageBeep:
    		bBeep = class'HUD'.default.bMessageBeep;
    		ch_MessageBeep.SetComponentValue(bBeep,true);
    		break;

    	case ch_LowDetail:
    		bLow = PC.Level.bLowSoundDetail;

    		// Make sure both are the same - LevelInfo.bLowSoundDetail take priority
    		if ( bLow != bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice LowQualitySound" )) )
    		{
    			PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice LowQualitySound"@bLow);
    			PC.ConsoleCommand("SOUND_REBOOT");

    			// Restart music.
    			if( PC.Level.Song != "" && PC.Level.Song != "None" )
    				PC.ClientSetMusic( PC.Level.Song, MTRAN_Instant );

    			else PC.ClientSetMusic( class'ROMainMenu'.default.MenuSong, MTRAN_Instant );
    		}

    		ch_LowDetail.SetComponentValue(bLow,true);
    		break;

    	case ch_VoiceChat:
    		bVoiceChat = bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseVoIP"));
    		ch_VoiceChat.SetComponentValue(bVoiceChat,true);
    		UpdateVOIPControlsState();
    		break;

        case ed_ChatPassword:
            sPwd = PC.ChatPassword;
            ed_ChatPassword.SetComponentValue(sPwd, True);
            break;

        case sl_VOIP:
        	fVoice = float(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice VoiceVolume"));
        	sl_VOIP.SetComponentValue(fVoice, True);
        	break;

    	case co_Quality:
    		sCodec = PC.VoiceChatCodec;
    		co_Quality.SetExtra(sCodec,true);
    		break;

    	case co_LANQuality:
    		sLANCodec = PC.VoiceChatLANCodec;
    		co_LANQuality.SetExtra(sLANCodec,true);
    		break;

    	case ch_Dampen:
    	    bDampen = bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice DampenWithVoIP"));
    	    ch_Dampen.SetComponentValue(bDampen,true);
    	    break;

    	case ch_AJPublic:
    		bAJPublic = bool(PC.AutoJoinMask & 1);
    		ch_AJPublic.SetComponentValue(bAJPublic,True);
    		break;

    	case ch_AutoSpeak:
    		bAutoSpeak = PC.bEnableInitialChatRoom;
    		if ( bAutoSpeak )
    			EnableComponent(ed_Active);
    		else DisableComponent(ed_Active);

    		ch_AutoSpeak.SetComponentValue(bAutoSpeak, True);
    		break;

    	case ed_Active:
    		sActive = PC.DefaultActiveChannel;
    		ed_Active.SetComponentValue(sActive, True);
    		break;

    	default:
    		log(Name@"Unknown component calling LoadINI:"$ GUIMenuOption(Sender).Caption);
    		GUIMenuOption(Sender).SetComponentValue(s,true);
	}
}

function InternalOnChange(GUIComponent Sender)
{
	local PlayerController PC;
	local bool bIsWin32;

	bIsWin32 = ( ( PlatformIsWindows() ) && ( !PlatformIs64Bit() ) );

	Super.InternalOnChange(Sender);
	PC = PlayerOwner();

	switch(Sender)
	{
		case sl_MusicVol:
			fMusic = sl_MusicVol.GetValue();
			PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice MusicVolume"@fMusic);
			PC.ConsoleCommand("SetMusicVolume"@fMusic);

			if( PC.Level.Song != "" && PC.Level.Song != "None" )
				PC.ClientSetMusic( PC.Level.Song, MTRAN_Instant );
			else PC.ClientSetMusic( class'ROMainMenu'.default.MenuSong, MTRAN_Instant );
			break;

		case sl_EffectsVol:
			fEffects = sl_EffectsVol.GetValue();
			PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice SoundVolume"@fEffects);
			PC.ConsoleCommand("stopsounds");
			break;

		case co_Mode:
			if ( !bIsWin32 )  // Simple OpenAL abstraction...  --ryan.
				break;

			iMode = co_Mode.GetIndex();
			if (iMode > 1)
				ShowPerformanceWarning();

			bCompat = iMode < 1;
			b3DSound = iMode > 1;
			bEAX = iMode > 2;
	        PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice CompatibilityMode"@bCompat);
	        PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice Use3DSound"@b3DSound);
	        PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice UseEAX"@bEAX);
			PC.ConsoleCommand("SOUND_REBOOT");

			// Restart music.
			if( PC.Level.Song != "" && PC.Level.Song != "None" )
				PC.ClientSetMusic( PC.Level.Song, MTRAN_Instant );
			else PC.ClientSetMusic( class'ROMainMenu'.default.MenuSong, MTRAN_Instant );
			break;

		case ch_ReverseStereo:
			bRev = ch_ReverseStereo.IsChecked();
			break;

		case ch_MessageBeep:
			bBeep = ch_MessageBeep.IsChecked();
			break;

		case ch_Default:
			bDefault = ch_Default.IsChecked();
			PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice UseDefaultDriver"@bDefault);
			PC.ConsoleCommand("SOUND_REBOOT");
			break;

		case ch_LowDetail:
			bLow = ch_LowDetail.IsChecked();

			PC.Level.bLowSoundDetail = bLow;
			PC.Level.SaveConfig();

			PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice LowQualitySound"@bLow);
			PC.ConsoleCommand("SOUND_REBOOT");

			// Restart music.
			if( PC.Level.Song != "" && PC.Level.Song != "None" )
				PC.ClientSetMusic( PC.Level.Song, MTRAN_Instant );
			else PC.ClientSetMusic( class'ROMainMenu'.default.MenuSong, MTRAN_Instant );
			break;

		case ch_VoiceChat:
			bVoiceChat = ch_VoiceChat.IsChecked();
			UpdateVOIPControlsState();
			break;

        case ch_Dampen:
            bDampen = ch_Dampen.IsChecked();
            break;

        case ed_ChatPassword:
            sPwd = ed_ChatPassword.GetText();
            break;

        case sl_VOIP:
        	fVoice = sl_VOIP.GetValue();
        	break;

		case co_Quality:
			sCodec = co_Quality.GetExtra();
			break;

		case co_LANQuality:
			sLANCodec = co_LANQuality.GetExtra();
			break;

		case ch_AJPublic:
			bAJPublic = ch_AJPublic.IsChecked();
			break;

		case ch_AutoSpeak:
			bAutoSpeak = ch_AutoSpeak.IsChecked();
			if ( bAutoSpeak )
				EnableComponent(ed_Active);
			else DisableComponent(ed_Active);
			break;

		case ed_Active:
			sActive = ed_Active.GetText();
			break;
	}
}

function SaveSettings()
{
	local PlayerController PC;
	local bool bSave, bReboot;

	Super.SaveSettings();
	PC = PlayerOwner();

	if (PC.bNoAutoTaunts != iVoiceMode > 0)
	{
		PC.bNoAutoTaunts = iVoiceMode > 0;
		PC.default.bNoAutoTaunts = PC.bNoAutoTaunts;
		bSave = True;
	}

	if (PC.bNoVoiceTaunts != iVoiceMode > 0)
	{
		PC.bNoVoiceTaunts = iVoiceMode > 0;
		PC.default.bNoVoiceTaunts = PC.bNoVoiceTaunts;
		bSave = True;
	}

	if (PC.bNoVoiceMessages != iVoiceMode == 2)
	{
		PC.bNoVoiceMessages = iVoiceMode == 2;
		PC.default.bNoVoiceMessages = PC.bNoVoiceMessages;
		bSave = True;
	}

	if (fMusic != sl_MusicVol.GetValue())
		PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice MusicVolume"@fMusic);

	if (fEffects != sl_EffectsVol.GetValue())
		PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice SoundVolume"@fEffects);

	if (bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice ReverseStereo")) != bRev)
		PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice ReverseStereo"@bRev);

	if (bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice DampenWithVoIP")) != bDampen)
		PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice DampenWithVoIP"@bDampen);

	if (bDefault != bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseDefaultDriver")))
	{
		PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice UseDefaultDriver"@bDefault);
		bReboot = True;
	}

	if( PC.MyHud != None )
	{
		if ( PC.myHUD.bMessageBeep != bBeep )
		{
			PC.myHUD.bMessageBeep = bBeep;
			PC.myHUD.SaveConfig();
		}
	}

	else
	{
		if ( class'HUD'.default.bMessageBeep != bBeep )
		{
			class'HUD'.default.bMessageBeep = bBeep;
			class'HUD'.static.StaticSaveConfig();
		}
	}

	if ( bAJPublic != bool(PC.AutoJoinMask & 1) )
	{
		if ( bAJPublic )
			PC.AutoJoinMask = PC.AutoJoinMask | 1;
		else PC.AutoJoinMask = PC.AutoJoinMask & ~1;
		bSave = True;
	}

    if ( fVoice != float(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice VoiceVolume")) )
    	PC.ConsoleCommand("set ini:Engine.Engine.AudioDevice VoiceVolume"@fVoice);

    if ( sCodec != PC.VoiceChatCodec )
    {
    	PC.VoiceChatCodec = sCodec;
    	bSave = True;
    }

    if ( sLANCodec != PC.VoiceChatLANCodec )
    {
    	PC.VoiceChatLANCodec = sLANCodec;
    	bSave = True;
    }

    if ( PC.bEnableInitialChatRoom != bAutoSpeak )
    {
    	PC.bEnableInitialChatRoom = bAutoSpeak;
    	bSave = True;
    }

	if ( !(PC.DefaultActiveChannel ~= sActive) )
	{
		PC.DefaultActiveChannel = sActive;
		bSave = True;
	}

    if (PC.ChatPassword != sPwd)
    {
        PC.SetChatPassword(sPwd);
        bSave = False;
    }

    if (bVoiceChat != bool(PC.ConsoleCommand("get ini:Engine.Engine.AudioDevice UseVoIP")))
	{
		if (bVoiceChat)
			PC.EnableVoiceChat();
		else
            PC.DisableVoiceChat();

		bReboot = False;
	}

	if (bSave)
		PC.SaveConfig();

	if (bReboot)
		PC.ConsoleCommand("SOUND_REBOOT");
}

function UpdateVOIPControlsState()
{
    if (bVoiceChat)
    {
        //ch_AJLocal.EnableMe();
        sl_VOIP.EnableMe();
        //ch_AJLocal.EnableMe();
        ch_AJPublic.EnableMe();
        //ch_AJTeam.EnableMe();
        ed_Active.EnableMe();
        ed_ChatPassword.EnableMe();
        co_Quality.EnableMe();
        co_LANQuality.EnableMe();
        ch_AutoSpeak.EnableMe();
    }
    else
    {
        //ch_AJLocal.DisableMe();
        sl_VOIP.DisableMe();
        //ch_AJLocal.DisableMe();
        ch_AJPublic.DisableMe();
        //ch_AJTeam.DisableMe();
        ed_Active.DisableMe();
        ed_ChatPassword.DisableMe();
        co_Quality.DisableMe();
        co_LANQuality.DisableMe();
        ch_AutoSpeak.DisableMe();
    }
}

defaultproperties
{
	Begin Object class=GUISectionBackground Name=AudioBK1
		WinWidth=0.485000
		WinHeight=0.65
		WinLeft=0.000948
		WinTop=0.1
		Caption="Sound System"
	End Object
	i_BG1=AudioBK1

	Begin Object class=GUISectionBackground Name=AudioBK3
		WinWidth=0.502751
		WinHeight=0.65
		WinLeft=0.495826
		WinTop=0.1
		Caption="Voice Chat"
	End Object
	i_BG3=AudioBK3

	Begin Object class=moSlider Name=AudioEffectsVolumeSlider
		WinWidth=0.450000
		WinLeft=0.524024
		WinTop=0.070522
		MinValue=0.0
		MaxValue=0.5//1.0
		Caption="Effects Volume"
		Hint="Adjusts the volume of all in game sound effects."
		LabelJustification=TXTA_Left
		ComponentJustification=TXTA_Right
		CaptionWidth=0.5
		ComponentWidth=-1
		bAutoSizeCaption=True
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		INIOption="@Internal"
		INIDefault="0.35"
		TabOrder=1
	End Object
	sl_EffectsVol=AudioEffectsVolumeSlider

	Begin Object class=moSlider Name=AudioMusicVolume
		WinWidth=0.450000
		WinLeft=0.018164
		WinTop=0.070522
		Caption="Music Volume"
		LabelJustification=TXTA_Left
		ComponentJustification=TXTA_Right
		CaptionWidth=0.5
		ComponentWidth=-1
		bAutoSizeCaption=True
		MinValue=0.0
		MaxValue=0.5//1.0
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		INIOption="@Internal"
		INIDefault="0.25"
		Hint="Adjusts the volume of the background music."
		TabOrder=2
	End Object
	sl_MusicVol=AudioMusicVolume

	Begin Object Class=moSlider Name=VoiceVolume
		WinWidth=0.408907
		WinLeft=0.518507
		WinTop=0.142484
    	Caption="Voice Chat Volume"
    	Hint="Adjusts the volume of other players' voice chat communication."
    	IniOption="@Internal"
    	INIDefault="1.0"
    	OnLoadINI=InternalOnLoadINI
    	OnChange=InternalOnChange
    	RenderWeight=1.04
	    TabOrder=3
	    MinValue=1.0
	    MaxValue=10.0
		CaptionWidth=0.5
		ComponentWidth=-1
		bAutoSizeCaption=True
    	ComponentJustification=TXTA_Right
    	LabelJustification=TXTA_Left
    End Object
    sl_VOIP=VoiceVolume

	Begin Object class=moComboBox Name=AudioMode
		WinWidth=0.450000
		WinLeft=0.018164
		WinTop=0.149739
		Caption="Audio Mode"
		INIOption="@Internal"
		INIDefault="Software 3D Audio"
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		Hint="Changes the audio system mode."
		CaptionWidth=0.5
		LabelJustification=TXTA_Left
		ComponentJustification=TXTA_Right
		bReadOnly=true
		TabOrder=4
	End Object
	co_Mode=AudioMode

	Begin Object class=moCheckBox Name=AudioLowDetail
		WinWidth=0.45
		WinLeft=0.018164
		WinTop=0.235052
		Caption="Low Sound Detail"
		INIOption="@Internal"
		INIDefault="False"
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		Hint="Lowers quality of sound."
		CaptionWidth=0.94
		bSquare=true
		ComponentJustification=TXTA_Left
		TabOrder=5
	End Object
	ch_LowDetail=AudioLowDetail

	Begin Object class=moCheckBox Name=AudioDefaultDriver
		WinWidth=0.45
		WinLeft=0.018164
		WinTop=0.320365
		Caption="System Driver"
		Hint="Use system installed OpenAL driver"
		INIOption="@Internal"
		INIDefault="False"
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		CaptionWidth=0.94
		ComponentJustification=TXTA_Left
		TabOrder=6
	End Object
	ch_Default=AudioDefaultDriver

	Begin Object class=moCheckBox Name=AudioReverseStereo
		WinWidth=0.45
		WinLeft=0.018164
		WinTop=0.405678
		Caption="Reverse Stereo"
		Hint="Reverses the left and right audio channels."
		INIOption="@Internal"
		INIDefault="False"
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		CaptionWidth=0.94
		ComponentJustification=TXTA_Left
		TabOrder=7
	End Object
	ch_ReverseStereo=AudioReverseStereo

	Begin Object class=moCheckBox Name=AudioMessageBeep
		WinWidth=0.45
		WinLeft=0.524024
		WinTop=0.405678
		Caption="Message Beep"
		Hint="Enables a beep when receiving a text message from other players."
		INIOption="@Internal"
		INIDefault="True"
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		CaptionWidth=0.94
		bSquare=true
		ComponentJustification=TXTA_Left
		TabOrder=9
	End Object
	ch_MessageBeep=AudioMessageBeep

	Begin Object class=moCheckBox Name=EnableVoiceChat
		WinWidth=0.461134
		WinLeft=0.527734
		WinTop=0.834777
		INIOption="@Internal"
		OnLoadINI=InternalOnLoadINI
		OnChange=InternalOnChange
		Hint="Enables the voice chat system during online matches."
		Caption="Enable Voice Chat"
		CaptionWidth=-1
		bSquare=true
		TabOrder=20
		ComponentJustification=TXTA_Right
	End Object
	ch_VoiceChat=EnableVoiceChat

    Begin Object Class=moCheckBox Name=Dampen
		WinWidth=0.826652
		WinLeft=0.086280
		WinTop=0.145784
    	Caption="Dampen Game Volume When Using VOIP"
    	Hint="Dampens the volume of the game when receiving VOIP communications."
    	IniOption="@Internal"
    	OnLoadINI=InternalOnLoadIni
    	OnChange=InternalOnChange
    	bSquare=True
    	ComponentJustification=TXTA_Right
    	LabelJustification=TXTA_Left
    	ComponentWidth=-1
    	CaptionWidth=0.94
    	TabOrder=21
   End Object
    ch_Dampen=Dampen

    Begin Object Class=moCheckBox Name=AutoJoinPublic
		WinWidth=0.826652
		WinLeft=0.086280
		WinTop=0.145784
    	Caption="Autojoin Public Channel"
    	Hint="Automatically join the 'Public' channel upon connecting to a server."
    	IniOption="@Internal"
    	OnLoadINI=InternalOnLoadIni
    	OnChange=InternalOnChange
    	bSquare=True
    	ComponentJustification=TXTA_Right
    	LabelJustification=TXTA_Left
    	ComponentWidth=-1
    	CaptionWidth=0.94
    	TabOrder=23
   End Object
    ch_AJPublic=AutoJoinPublic

    Begin Object Class=moCheckBox Name=AutoSpeakCheckbox
		WinWidth=0.442638
		WinHeight=0.060000
		WinLeft=0.039812
		WinTop=0.603526
    	Caption="Auto-select Active Channel"
    	Hint="Automatically set an active channel when you join a server.  The default channel is determined by the gametype, but you can specify your own using the editbox below"
    	IniOption="@Internal"
    	OnLoadINI=InternalOnLoadIni
    	OnChange=InternalOnChange
    	bSquare=True
    	ComponentJustification=TXTA_Right
    	LabelJustification=TXTA_Left
    	ComponentWidth=-1
    	CaptionWidth=0.8
    	TabOrder=24
		bBoundToParent=True
		bScaleToParent=True
    End Object
    ch_AutoSpeak=AutoSpeakCheckbox

        Begin Object Class=moEditBox Name=DefaultActiveChannelEditBox
		WinWidth=0.420403
		WinLeft=0.032569
		WinTop=0.757277
        Hint="Enter the name of the channel to speak on by default when you join the server.  To use the default chatroom for whichever gametype you're playing, leave this field empty"
        Caption="Default Channel Name"
        IniOption="@Internal"
        OnLoadIni=InternalOnLoadIni
        OnChange=InternalOnChange
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
    	CaptionWidth=0.6
    	ComponentWidth=-1
        TabOrder=25
	End Object
    ed_Active=DefaultActiveChannelEditBox

    Begin Object Class=moEditBox Name=ChatPasswordEdit
		WinWidth=0.420403
		WinLeft=0.032569
		WinTop=0.332828
        Hint="Set a password on your personal chat room to limit who is allowed to join"
        Caption="Chat Password"
        IniOption="@Internal"
        OnLoadIni=InternalOnLoadIni
        OnChange=InternalOnChange
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
    	CaptionWidth=0.6
    	ComponentWidth=-1
    	bAutoSizeCaption=True
        TabOrder=26
    End Object
    ed_ChatPassword=ChatPasswordEdit

    Begin Object class=moComboBox Name=VoiceQuality
		WinWidth=0.408907
		WinLeft=0.523390
		WinTop=0.241391
    	Caption="Internet Quality"
    	Hint="Determines the codec used to transmit voice chat to and from internet servers."
    	IniOption="@Internal"
    	OnLoadINI=InternalOnLoadINI
    	OnChange=InternalOnChange
    	TabOrder=27
    	bReadOnly=True
    	CaptionWidth=0.6
    	ComponentWidth=-1
    	bAutoSizeCaption=True
        ComponentJustification=TXTA_Right
       LabelJustification=TXTA_Left
    End Object
    co_Quality=VoiceQuality

    Begin Object class=moComboBox Name=VoiceQualityLAN
		WinWidth=0.408907
		WinLeft=0.523390
		WinTop=0.333786
    	Caption="LAN Quality"
    	Hint="Determines the codec used to transmit voice chat to and from LAN servers."
    	IniOption="@Internal"
    	OnLoadINI=InternalOnLoadINI
    	OnChange=InternalOnChange
    	TabOrder=28
    	bReadOnly=True
    	CaptionWidth=0.6
    	ComponentWidth=-1
    	bAutoSizeCaption=True
        ComponentJustification=TXTA_Right
        LabelJustification=TXTA_Left
    End Object
    co_LANQuality=VoiceQualityLAN

	VoiceChatClassName="UnrealGame.TeamVoiceReplicationInfo"
	VoiceChatClass=class'Engine.VoiceChatReplicationInfo'

	WinTop=0.15
	WinLeft=0
	WinWidth=1
	WinHeight=0.74
	bAcceptsInput=false

	AudioModes[0]="Safe Mode"
	AudioModes[1]="3D Audio"
	AudioModes[2]="H/W 3D Audio"
	AudioModes[3]="H/W 3D + EAX"

	VoiceModes[0]="All"
	VoiceModes[1]="No taunts"
	VoiceModes[2]="None"

	PanelCaption="Audio"
}


