//------------------------------------
//
// GUI screen functions
//
//------------------------------------

function ClearPlayerConfig()
{
	Control::setValue(IDCTG_PLYR_CFG_NAME, "");
	Control::setValue(IDCTG_PLYR_CFG_EMAIL, "");
	Control::setValue(IDCTG_PLYR_CFG_TRIBE, "");
	Control::setValue(IDCTG_PLYR_CFG_URL, "");
	Control::setValue(IDCTG_PLYR_CFG_INFO, "");
	Control::setValue(IDCTG_PLYR_CFG_SCRIPT, "");
	Control::setValue(IDCTG_PLYR_CFG_GENDER_M, "TRUE");
	Control::setValue(IDCTG_PLYR_CFG_GENDER_F, "FALSE");
	FGCombo::clear(IDCTG_PLYR_CFG_SKIN);

	$PCFG::Name			= "";
	$PCFG::RealName	= ""; 
	$PCFG::EMail		= ""; 
	$PCFG::Tribe		= ""; 
	$PCFG::URL			= ""; 
	$PCFG::Info			= ""; 
	$PCFG::Gender		= "MALE"; 
	$PCFG::Script		= ""; 
	$PCFG::Voice		= ""; 
	$PCFG::SkinBase	= ""; 
}

function PlayerSetupGui::onOpen()
{
   // Must do twice.  A dml resource could be referencing bitmaps. DMM
   purgeResources();
   purgeResources();

	//clear all the config controls to start
	ClearPlayerConfig();

	//first add all the players to the player list combo box
	$PCFG::LastPlayer = -1;
   for(%i = 0; $PCFG::Name[%i] != ""; %i++)
	{
		FGCombo::addEntry(IDCTG_PLYR_CFG_COMBO, $PCFG::Name[%i], %i);
		$PCFG::LastPlayer = %i;
	}

	//verify the current player
	if (($PCFG::CurrentPlayer == "") || ($PCFG::name[$PCFG::CurrentPlayer] == "") ||
													($PCFG::CurrentPlayer > $PCFG::LastPlayer))
	{
		if ($PCFG::LastPlayer < 0)
		{
			$PCFG::CurrentPlayer = -1;
		}
		else
		{
			$PCFG::CurrentPlayer = 0;
		}
	}

	//now add all voices to the voice list box
	FGCombo::clear(IDCTG_PLYR_CFG_VOICE);
	%voiceCount = 0;
	%voiceSet = File::findFirst("*.whello.wav");
	while (%voiceSet != "")
	{
		%strIndex = String::findSubStr(%voiceSet, ".whello.wav");
		%voiceBase = String::getSubStr(%voiceSet, 0, %strIndex);

		if (%voiceBase != "")
		{
			$VoiceArray[%voiceCount] = %voiceBase;
			FGCombo::addEntry(IDCTG_PLYR_CFG_VOICE, %voiceBase, %voiceCount);
			%voiceCount = %voiceCount + 1;
		}

      %voiceSet = File::findNext("*.whello.ogg");
	}
	
	%voiceSet = File::findFirst("*.whello.ogg");
	while (%voiceSet != "")
	{
		%strIndex = String::findSubStr(%voiceSet, ".whello.ogg");
		%voiceBase = String::getSubStr(%voiceSet, 0, %strIndex);

		if (%voiceBase != "")
		{
			$VoiceArray[%voiceCount] = %voiceBase;
			FGCombo::addEntry(IDCTG_PLYR_CFG_VOICE, %voiceBase, %voiceCount);
			%voiceCount = %voiceCount + 1;
		}

      %voiceSet = File::findNext("*.whello.ogg");
	}

	//add all the male skins to the array
	%skinCount = 0;
	%skin = File::findFirst("*.larmor.png");
	while (%skin != "")
	{
		$SkinArray[%skinCount] = %skin;
		%skinCount = %skinCount + 1;
		%skin = File::findNext("*.larmor.png");
	}

	//add all the female skiins to the array
	%skin = File::findFirst("*.lfemale.png");
	while (%skin != "")
	{
		$SkinArray[%skinCount] = %skin;
		%skinCount = %skinCount + 1;
		%skin = File::findNext("*.lfemale.png");
	}

	if ($PCFG::CurrentPlayer >= 0)
	{
		ReadPlayerConfig($PCFG::CurrentPlayer);
	}
	else
	{
		OpenNewPlayerDialog();
	}
}

function OpenNewPlayerDialog()
{
	//push the dialog
   GuiPushDialog(MainWindow, "gui/NewPlayer.gui");

	//if we don't have any players, disable the cancel button
	if ($PCFG::LastPlayer < 0)
	{
		Control::setActive(IDCTG_PLYR_CFG_CANCEL, FALSE);
	}
	else
	{
		Control::setActive(IDCTG_PLYR_CFG_CANCEL, TRUE);
	}

	//disable the done button
	Control::setActive(IDCTG_NEW_PLAYER, FALSE);
}

function PlayerSetupGui::onClose()
{
	WriteCurrentPlayerConfig();
   export("PCFG::*", "config/Players.cs", False);
}

function ReadPlayerConfig(%cfgNum)
{
	echo("Reading player: " @ %cfgNum);

	if (%cfgNum >= 0 && %cfgNum <= $PCFG::LastPlayer)
	{
		//load the values into the gui controls
		Control::setValue(IDCTG_PLYR_CFG_NAME, $PCFG::RealName[%cfgNum]);
		Control::setValue(IDCTG_PLYR_CFG_EMAIL, $PCFG::EMail[%cfgNum]);
		Control::setValue(IDCTG_PLYR_CFG_TRIBE, $PCFG::Tribe[%cfgNum]);
		Control::setValue(IDCTG_PLYR_CFG_URL, $PCFG::URL[%cfgNum]);
		Control::setValue(IDCTG_PLYR_CFG_INFO, $PCFG::Info[%cfgNum]);
		Control::setValue(IDCTG_PLYR_CFG_Script, $PCFG::Script[%cfgNum]);

		if (String::ICompare($PCFG::Gender[%cfgNum], "MALE") == 0)
		{
			Control::setValue(IDCTG_PLYR_CFG_GENDER_M, "TRUE");
			Control::setValue(IDCTG_PLYR_CFG_GENDER_F, "FALSE");
		}
		else
		{
			Control::setValue(IDCTG_PLYR_CFG_GENDER_M, "FALSE");
			Control::setValue(IDCTG_PLYR_CFG_GENDER_F, "TRUE");
		}

		//copy the values into the current set used by FearCSDelegate.cpp
		$PCFG::Name			= $PCFG::Name[%cfgNum];
		$PCFG::RealName	= $PCFG::RealName[%cfgNum];
		$PCFG::EMail		= $PCFG::EMail[%cfgNum];
		$PCFG::Tribe		= $PCFG::Tribe[%cfgNum];
		$PCFG::URL			= $PCFG::URL[%cfgNum];
		$PCFG::Info			= $PCFG::Info[%cfgNum];
		$PCFG::Gender		= $PCFG::Gender[%cfgNum];
		$PCFG::Script		= $PCFG::Script[%cfgNum];
		
		//set the selected player in the combo box
		$PCFG::CurrentPlayer = %cfgNum;
		FGCombo::setSelected(IDCTG_PLYR_CFG_COMBO, $PCFG::CurrentPlayer);

		//make sure the voice exists
		%voiceSet = 0;
		%found = -1;
		while ($VoiceArray[%voiceSet] != "")
		{
			if (String::ICompare($VoiceArray[%voiceSet], $PCFG::Voice[%cfgNum]) == 0)
			{
				%found = %voiceSet;
		   }
			%voiceSet = %voiceSet + 1;
		}

		//see if we found the voice set
		if (%found >= 0)
		{
			$PCFG::Voice		= $PCFG::Voice[%cfgNum];
			FGCombo::setSelected(IDCTG_PLYR_CFG_VOICE, %found);
		}
		else
		{
			//find a voice set that exists
			%searchVoiceSet = $PCFG::Gender[$PCFG::CurrentPlayer] @ 1;
			%voiceSet = 0;
			%found = -1;
			while ($VoiceArray[%voiceSet] != "")
			{
				if (String::ICompare($VoiceArray[%voiceSet], %searchVoiceSet) == 0)
				{
					%found = %voiceSet;
			   }
				%voiceSet = %voiceSet + 1;
			}
			if (%found >= 0)
			{
				$PCFG::Voice[%cfgNum]	= %searchVoiceSet;
				$PCFG::Voice				= $PCFG::Voice[%cfgNum];
				FGCombo::setSelected(IDCTG_PLYR_CFG_VOICE, %found);
			}
		}

		//add the correct skins to the combo box
		FGCombo::clear(IDCTG_PLYR_CFG_SKIN);
		%skin = 0;
		%found = -1;
		while ($SkinArray[%skin] != "")
		{
			if (! String::ICompare($PCFG::Gender[$PCFG::CurrentPlayer], "MALE"))
			{
				%strIndex = String::findSubStr($SkinArray[%skin], ".larmor");
			}
			else
			{
				%strIndex = String::findSubStr($SkinArray[%skin], ".lfemale");
			}
			if (%strIndex >= 0)
			{
				%skinBase = String::getSubStr($SkinArray[%skin], 0, %strIndex);
            if(String::ICompare(%skinBase, $PCFG::SkinBase[%cfgNum]) == 0)
               %found = %skin;
				FGCombo::addEntry(IDCTG_PLYR_CFG_SKIN, %skinBase, %skin);
			}
			%skin++;
		}

		//see if we found the skin
		if (%found >= 0)
		{
			setSkinBase(%found, $PCFG::Gender[%cfgNum]);
		}
		else
		{
			//find a default skin
			%skin = 0;
			%found = -1;
			if (! String::ICompare($PCFG::Gender[$PCFG::CurrentPlayer], "MALE"))
			{
				while ($SkinArray[%skin] != "")
				{
					%strIndex = String::findSubStr($SkinArray[%skin], ".larmor");
					if (%strIndex >= 0)
					{
						%found = %skin;
					}
					%skin = %skin + 1;
				}
			}
			else
			{
				while ($SkinArray[%skin] != "")
				{
					%strIndex = String::findSubStr($SkinArray[%skin], ".lfemale");
					if (%strIndex >= 0)
					{
						%found = %skin;
					}
					%skin = %skin + 1;
				}
			}

			if (%found >= 0)
			{
				$PCFG::SkinBase[%cfgNum]	= $SkinArray[%found];
				setSkinBase(%found, $PCFG::Gender[%cfgNum]);
			}
		}
	}
}
	
function WriteCurrentPlayerConfig()
{
	if ($PCFG::CurrentPlayer >= 0 && $PCFG::CurrentPlayer <= $PCFG::LastPlayer)
	{
		//get the values from the gui controls
		$PCFG::RealName[$PCFG::CurrentPlayer]	= Control::getValue(IDCTG_PLYR_CFG_NAME);
		$PCFG::EMail[$PCFG::CurrentPlayer]		= Control::getValue(IDCTG_PLYR_CFG_EMAIL);
		$PCFG::Tribe[$PCFG::CurrentPlayer]		= Control::getValue(IDCTG_PLYR_CFG_TRIBE);
		$PCFG::URL[$PCFG::CurrentPlayer]			= Control::getValue(IDCTG_PLYR_CFG_URL);
		$PCFG::Info[$PCFG::CurrentPlayer]		= Control::getValue(IDCTG_PLYR_CFG_INFO);
		$PCFG::Script[$PCFG::CurrentPlayer]		= Control::getValue(IDCTG_PLYR_CFG_SCRIPT);

		//Gender
		if (String::ICompare(Control::getValue(IDCTG_PLYR_CFG_GENDER_M), "TRUE") == 0)
		{
			$PCFG::Gender[$PCFG::CurrentPlayer]	= "MALE";
		}
		else
		{
			$PCFG::Gender[$PCFG::CurrentPlayer]	= "FEMALE";
		}

		//voice
		$PCFG::Voice[$PCFG::CurrentPlayer]		= $VoiceArray[FGCombo::getSelected(IDCTG_PLYR_CFG_VOICE)];

		//skin
		$PCFG::SkinBase[$PCFG::CurrentPlayer]		= $PCFG::SkinBase;

		//update the set of vars used by FearCSDelegate
		$PCFG::Name			= $PCFG::Name[$PCFG::CurrentPlayer];
		$PCFG::RealName	= $PCFG::RealName[$PCFG::CurrentPlayer];
		$PCFG::EMail		= $PCFG::EMail[$PCFG::CurrentPlayer];
		$PCFG::Tribe		= $PCFG::Tribe[$PCFG::CurrentPlayer];
		$PCFG::URL			= $PCFG::URL[$PCFG::CurrentPlayer];
		$PCFG::Info			= $PCFG::Info[$PCFG::CurrentPlayer];
		$PCFG::Gender		= $PCFG::Gender[$PCFG::CurrentPlayer];
		$PCFG::Script		= $PCFG::Script[$PCFG::CurrentPlayer];
		$PCFG::Voice		= $PCFG::Voice[$PCFG::CurrentPlayer];
		$PCFG::SkinBase 	= $PCFG::SkinBase[$PCFG::CurrentPlayer];
	}
}
	
function SelectedPlayerConfig()
{
	WriteCurrentPlayerConfig();
	ReadPlayerConfig(FGCombo::getSelected(IDCTG_PLYR_CFG_COMBO));
}

function AddPlayerConfig(%newPlayer)
{
	WriteCurrentPlayerConfig();
	if (%newPlayer != "")
	{
		//first search, see if the player name already exists
		%found = -1;
		%plyr = 0;
		while (%plyr <= $PCFG::lastPlayer)
		{
			if (! String::ICompare($PCFG::Name[%plyr], %newPlayer))
			{
				%found = %plyr;
			}
			%plyr = %plyr + 1;
		}

		if (%found >= 0)
		{
			ReadPlayerConfig(%found);
		}
		else
		{
			//add it to the end
			$PCFG::LastPlayer = $PCFG::LastPlayer + 1;
			
			//create the vars
			$PCFG::Name[$PCFG::LastPlayer]		= %newPlayer;
			$PCFG::RealName[$PCFG::LastPlayer]	= "";
			$PCFG::EMail[$PCFG::LastPlayer]		= "";
			$PCFG::Tribe[$PCFG::LastPlayer]		= "";
			$PCFG::URL[$PCFG::LastPlayer]			= "";
			$PCFG::Info[$PCFG::LastPlayer]		= "";
			$PCFG::Gender[$PCFG::LastPlayer]		= "MALE";
			$PCFG::Script[$PCFG::LastPlayer]		= "";
			$PCFG::Voice[$PCFG::LastPlayer]		= "";
			$PCFG::SkinBase[$PCFG::LastPlayer]	= "";

			//add it to the list
			FGCombo::addEntry(IDCTG_PLYR_CFG_COMBO, $PCFG::Name[$PCFG::LastPlayer], $PCFG::LastPlayer);

			//set the added player as the current
			ReadPlayerConfig($PCFG::LastPlayer);
		}
	}
}

function DeleteCurrentPlayerConfig()
{
	//first close the dialog popup
	GuiPopDialog(MainWindow, 0);

	if ($PCFG::CurrentPlayer >= 0 && $PCFG::CurrentPlayer <= $PCFG::LastPlayer)
	{
		//copy the last player entries over top of the one being deleted
		if ($PCFG::CurrentPlayer < $PCFG::LastPlayer)
		{
			$PCFG::Name[$PCFG::CurrentPlayer]		= $PCFG::Name[$PCFG::LastPlayer];
			$PCFG::RealName[$PCFG::CurrentPlayer]	= $PCFG::RealName[$PCFG::LastPlayer];
			$PCFG::EMail[$PCFG::CurrentPlayer]		= $PCFG::EMail[$PCFG::LastPlayer];
			$PCFG::Tribe[$PCFG::CurrentPlayer]		= $PCFG::Tribe[$PCFG::LastPlayer];
			$PCFG::URL[$PCFG::CurrentPlayer]			= $PCFG::URL[$PCFG::LastPlayer];
			$PCFG::Info[$PCFG::CurrentPlayer]		= $PCFG::Info[$PCFG::LastPlayer];
			$PCFG::Gender[$PCFG::CurrentPlayer]		= $PCFG::Gender[$PCFG::LastPlayer];
			$PCFG::Script[$PCFG::CurrentPlayer]		= $PCFG::Script[$PCFG::LastPlayer];
			$PCFG::Voice[$PCFG::CurrentPlayer]		= $PCFG::Voice[$PCFG::LastPlayer];
			$PCFG::SkinBase[$PCFG::CurrentPlayer]	= $PCFG::SkinBase[$PCFG::LastPlayer];


			//delete it from the combo box
			FGCombo::deleteEntry(IDCTG_PLYR_CFG_COMBO, $PCFG::CurrentPlayer);

			//delete the last entry, and re-add it with the new ID number
			FGCombo::deleteEntry(IDCTG_PLYR_CFG_COMBO, $PCFG::LastPlayer);
			FGCombo::addEntry(IDCTG_PLYR_CFG_COMBO, $PCFG::Name[$PCFG::CurrentPlayer], $PCFG::CurrentPlayer);
		}
		else
		{
			//delete it from the combo box
			FGCombo::deleteEntry(IDCTG_PLYR_CFG_COMBO, $PCFG::CurrentPlayer);
		}
		
		//erase the last player config
		$PCFG::Name[$PCFG::LastPlayer]		= "";
		$PCFG::RealName[$PCFG::LastPlayer]	= "";
		$PCFG::EMail[$PCFG::LastPlayer]		= "";
		$PCFG::Tribe[$PCFG::LastPlayer]		= "";
		$PCFG::URL[$PCFG::LastPlayer]			= "";
		$PCFG::Info[$PCFG::LastPlayer]		= "";
		$PCFG::Gender[$PCFG::LastPlayer]		= "";
		$PCFG::Script[$PCFG::LastPlayer]		= "";
		$PCFG::Voice[$PCFG::LastPlayer]		= "";
		$PCFG::SkinBase[$PCFG::LastPlayer]	= "";

		//decriment the last player index
		$PCFG::LastPlayer = $PCFG::LastPlayer - 1;

		//now set the current player to be the first
		if ($PCFG::LastPlayer >= 0)
		{
			ReadPlayerConfig(0);
		}
		else
		{
			ClearPlayerConfig();
			OpenNewPlayerDialog();
		}
	}
}

function SwitchGender(%gender)
{
	//see if we actually switched genders
	if (String::ICompare(%gender, $PCFG::Gender[$PCFG::CurrentPlayer]) != 0)
	{
		$PCFG::Gender[$PCFG::CurrentPlayer] = %gender;

		//find a voice set that exists
		%searchVoiceSet = $PCFG::Gender[$PCFG::CurrentPlayer] @ "1";
		%voiceSet = 0;
		%found = -1;
		while ($VoiceArray[%voiceSet] != "")
		{
			if (String::ICompare($VoiceArray[%voiceSet], %searchVoiceSet) == 0)
			{
				%found = %voiceSet;
		   }
			%voiceSet = %voiceSet + 1;
		}
		if (%found >= 0)
		{
			$PCFG::Voice[$PCFG::CurrentPlayer]	= %searchVoiceSet;
			FGCombo::setSelected(IDCTG_PLYR_CFG_VOICE, %found);
		}

		//set the skin combo
		//add the correct skins to the combo box
		FGCombo::clear(IDCTG_PLYR_CFG_SKIN);
		%skin = 0;
		while ($SkinArray[%skin] != "")
		{
			if (! String::ICompare($PCFG::Gender[$PCFG::CurrentPlayer], "MALE"))
			{
				%strIndex = String::findSubStr($SkinArray[%skin], ".larmor");
			}
			else
			{
				%strIndex = String::findSubStr($SkinArray[%skin], ".lfemale");
			}
			if (%strIndex >= 0)
			{
				%skinBase = String::getSubStr($SkinArray[%skin], 0, %strIndex);
				FGCombo::addEntry(IDCTG_PLYR_CFG_SKIN, %skinBase, %skin);
			}
			%skin = %skin + 1;
		}

		//see if we can set the original
		%skin = FGCombo::findEntry(IDCTG_PLYR_CFG_SKIN, $PCFG::SkinBase);
		if (%skin < 0)
		{
			FGCombo::selectNext(IDCTG_PLYR_CFG_SKIN);
			%skin = FGCombo::getSelected(IDCTG_PLYR_CFG_SKIN);
		}

		if (%skin >= 0)
		{
			$PCFG::SkinBase[$PCFG::CurrentPlayer] = $SkinArray[%skin];
			setSkinBase(%skin, $PCFG::Gender[$PCFG::CurrentPlayer]);
		}
	}
}

function setSkinBase(%index, %gender)
{
	//strip off the extention
	if (! String::ICompare(%gender, "MALE"))
	{
		%strIndex = String::findSubStr($SkinArray[%index], ".larmor");
	}
	else
	{
		%strIndex = String::findSubStr($SkinArray[%index], ".lfemale");
	}
	if (%strIndex >= 0)
	{
		%skinBase = String::getSubStr($SkinArray[%index], 0, %strIndex);
		$PCFG::SkinBase = %skinBase;
	}
	else
	{
		$PCFG::SkinBase = "";
	}

	FGCombo::setSelected(IDCTG_PLYR_CFG_SKIN, %index);
	if ($PCFG::SkinBase != "")
	{
		FGSkin::set(IDCTG_PLAYER_TS, $PCFG::SkinBase, %gender); 
	}
}

function selectPlayerSkin()
{
	setSkinBase(FGCombo::getSelected(IDCTG_PLYR_CFG_SKIN), $PCFG::Gender[$PCFG::CurrentPlayer]);
}

