Quantcast
-- ================================================================================ --
--				EMA - ( Ebony's MultiBoxing Assistant )    							--
--				Current Author: Jennifer Cally (Ebony)								--
--																					--
--				License: All Rights Reserved 2018-2019 Jennifer Cally					--
--																					--
--				Some Code Used from "Jamba" that is 								--
--				Released under the MIT License 										--
--				"Jamba" Copyright 2008-2015  Michael "Jafula" Miller				--
--																					--
-- ================================================================================ --

-- Create the addon using AceAddon-3.0 and embed some libraries.
local EMA = LibStub( "AceAddon-3.0" ):NewAddon(
	"Information",
	"Module-1.0",
	"AceConsole-3.0",
	"AceEvent-3.0",
	"AceTimer-3.0"
)

-- Get the EMA Utilities Library.
local AceGUI = LibStub( "AceGUI-3.0" )
local EMAUtilities = LibStub:GetLibrary( "EbonyUtilities-1.0" )
local EMAHelperSettings = LibStub:GetLibrary( "EMAHelperSettings-1.0" )
local LibBagUtils = LibStub:GetLibrary( "LibBagUtils-1.0" )
EMA.SharedMedia = LibStub( "LibSharedMedia-3.0" )

--  Constants and Locale for this module.
EMA.moduleName = "Information"
EMA.settingsDatabaseName = "InformationProfileDB"
EMA.chatCommand = "ema-info"
local L = LibStub( "AceLocale-3.0" ):GetLocale( "Core" )
EMA.parentDisplayName = L["DISPLAY"]
EMA.moduleDisplayName = L["INFORMATION"]
-- Icon
EMA.moduleIcon = "Interface\\Addons\\EMA\\Media\\SellIcon.tga"
-- order
EMA.moduleOrder = 3

EMA.globalCurrencyFramePrefix = "EMAToonCurrencyListFrame"
--EMA.currTypes = {}
EMA.simpleCurrList = {}

-- Currency Identifiers. To add you own just add a new line at the bottom of this part
-- http://www.wowhead.com/currencies

local function allAlwaysCurrencys()
	local allAlwaysCurrencys = {}
		allAlwaysCurrencys.Honor = 1792
		allAlwaysCurrencys.TimeWalker = 1166
		allAlwaysCurrencys.Darkmoon = 515
	return allAlwaysCurrencys
end

-- Before WOD
local function classicCurrencys()
	local classicCurrencys = {}
		classicCurrencys.ChampionsSeal = 241
		classicCurrencys.TolBaradCommendation = 391
		classicCurrencys.LesserCharmOfGoodFortune = 738
		classicCurrencys.ElderCharmOfGoodFortune = 697
		classicCurrencys.MoguRuneOfFate = 752
		classicCurrencys.WarforgedSeal = 776
		classicCurrencys.BloodyCoin = 789
		classicCurrencys.TimelessCoin = 777
	return classicCurrencys
end

-- Wod Currency
local function wodCurrencys()
	local wodCurrencys = {}
		wodCurrencys.GarrisonResources = 824
		wodCurrencys.TemperedFate = 994
		wodCurrencys.ApexisCrystal = 823
		wodCurrencys.Oil = 1101
		wodCurrencys.InevitableFate = 1129
		wodCurrencys.Valor = 1191
	return wodCurrencys
end

--Legion Currency
local function legionCurrencys()
	local legionCurrencys = {}
		legionCurrencys.OrderResources = 1220
		legionCurrencys.AncientMana = 1155
		legionCurrencys.NetherShard = 1226
		legionCurrencys.SealofBrokenFate = 1273
		legionCurrencys.ShadowyCoins = 1154
		legionCurrencys.SightlessEye = 1149
		legionCurrencys.TimeWornArtifact = 1268
		legionCurrencys.CuriousCoin = 1275
		legionCurrencys.LegionfallWarSupplies = 1342
		legionCurrencys.CoinsOfAir = 1416
		legionCurrencys.WakeningEssence = 1533
		legionCurrencys.VeiledArgunite = 1508
	return legionCurrencys

end

-- BattleforAzeroth Currency
local function battleforAzerothnCurrencys()
	local bfa = {}
		bfa.WarResources = 1560
		bfa.RichAzeriteFragment = 1565
		bfa.SeafarersDubloon = 1710
		bfa.SealofWartornFate = 1580
		bfa.WarSupplies = 1587
		bfa.SeventhLegionService = 1717
		bfa.HonorboundService = 1716
		bfa.TitanResiduum = 1718
		bfa.PrismaticManapearl = 1721
		bfa.CoalescingVisions = 1755
		bfa.CorruptedMementos = 1719
		bfa.EchoesOfNyalotha = 1803
	return bfa
end

local function shadowlandsCurrencys()
	local shadowlandsCurrencys = {}
		shadowlandsCurrencys.ArgentCommendation = 1754
		shadowlandsCurrencys.SoulAsh = 1828
		shadowlandsCurrencys.Stygia = 1767
		shadowlandsCurrencys.ReservoirAnima = 1813
		shadowlandsCurrencys.SinstoneFragments = 1816
		shadowlandsCurrencys.InfusedRuby = 1820
		shadowlandsCurrencys.FreedSoul = 1751
	return shadowlandsCurrencys
end



local function testcode()
	return EMA.currTypes
end
-------------------------------------- End of edit --------------------------------------------------------------

function EMA:CurrencyIconAndName( id )
	local info = C_CurrencyInfo.GetCurrencyInfo(id)
	--EMA:Print("test", info.name, info.iconFileID, info.description )
	if 	info.iconFileID ~= nil then
		local currName = strconcat(" |T"..info.iconFileID..":20|t", L[" "]..info.name)
		return currName
	end
end

function EMA:AddCurrencyToTable()
	table.wipe( EMA.currTypes )
	for name, id in pairs( allAlwaysCurrencys() ) do
		EMA.currTypes[name] = id
	end

	if EMA.db.currClassicCurrencys == true then
		for name, id in pairs( classicCurrencys() ) do
			EMA.currTypes[name] = id
		end
	end
	if 	EMA.db.currWodCurrencys == true then
		for name, id in pairs( wodCurrencys() ) do
			EMA.currTypes[name] = id
		end
	end
	if EMA.db.currLegionCurrencys == true then
		for name, id in pairs( legionCurrencys() ) do
			EMA.currTypes[name] = id
		end
	end
	if EMA.db.currBattleforAzerothCurrencys == true then
		for name, id in pairs( battleforAzerothnCurrencys() ) do
			EMA.currTypes[name] = id
		end
	end
	if EMA.db.currShadowlands == true then
		for name, id in pairs( shadowlandsCurrencys() ) do
			EMA.currTypes[name] = id
		end
	end
end

-- Settings - the values to store and their defaults for the settings database.
EMA.settings = {
	profile = {
		currChatTrigger = false,
		currGold = true,
		currGoldInGuildBank = false,
		currBagSpace = false,
		currClassicCurrencys = false,
		currWodCurrencys = false,
		currLegionCurrencys = false,
		currBattleforAzerothCurrencys = false,
		currShadowlands = true,
		-- Currency default's ALL NONE! (saves updating every xpac....)
		CcurrTypeOne = 1,
		CcurrTypeOneName = "",
		CcurrTypeTwo = 1,
		CcurrTypeTwoName = "",
		CcurrTypeThree = 1,
		CcurrTypeThreeName = "",
		CcurrTypeFour = 1,
		CcurrTypeFourName = "",
		CcurrTypeFive = 1,
		CcurrTypeFiveName = "",
		CcurrTypeSix = 1,
		CcurrTypeSixName = "",
		currencyFrameAlpha = 1.0,
		currencyFramePoint = "CENTER",
		currencyFrameRelativePoint = "CENTER",
		currencyFrameXOffset = 0,
		currencyFrameYOffset = 0,
		currencyFrameBackgroundColourR = 1.0,
		currencyFrameBackgroundColourG = 1.0,
		currencyFrameBackgroundColourB = 1.0,
		currencyFrameBackgroundColourA = 1.0,
		currencyFrameBorderColourR = 1.0,
		currencyFrameBorderColourG = 1.0,
		currencyFrameBorerColourB = 1.0,
		currencyFrameBorderColourA = 1.0,
		currencyBorderStyle = L["BLIZZARD_TOOLTIP"],
		currencyBackgroundStyle = L["BLIZZARD_DIALOG_BACKGROUND"],
		currencyFontStyle = L["ARIAL_NARROW"],
		currencyFontSize = 12,
		currencyScale = 1,
		currencyNameWidth = 60,
		currencyPointsWidth = 50,
		currencyGoldWidth = 140,
		currencyOtherWidth = 50,
		currencySpacingWidth = 3,
		currencyLockWindow = false,
		currOpenStartUpMaster = false,
		currOpenStartUpAll = false
	},
}

-- Configuration.
function EMA:GetConfiguration()
	local configuration = {
		name = EMA.moduleDisplayName,
		handler = EMA,
		type = 'group',
		childGroups  = "tab",
		get = "EMAConfigurationGetSetting",
		set = "EMAConfigurationSetSetting",
		args = {
			config = {
				type = "input",
				name = L["OPEN_CONFIG"],
				desc = L["OPEN_CONFIG_HELP"],
				usage = "/ema-information config",
				get = false,
				set = "",
			},
			show = {
				type = "input",
				name = L["SHOW_CURRENCY"],
				desc = L["SHOW_CURRENCY_HELP"],
				usage = "ema-info show",
				get = false,
				set = "ShowInformationPanel",
			},
			hide = {
				type = "input",
				name = L["HIDE_CURRENCY"],
				desc = L["HIDE_CURRENCY_HELP"],
				usage = "ema-info hide",
				get = false,
				set = "EMAToonHideCurrency",
			},
			push = {
				type = "input",
				name = L["PUSH_ALL_SETTINGS"],
				desc = L["PUSH_SETTINGS_INFO"],
				usage = "ema-info push",
				get = false,
				set = "EMASendSettings",
			},
		},
	}
	return configuration
end

local function DebugMessage( ... )
	--EMA:Print( ... )
end
-------------------------------------------------------------------------------------------------------------
-- Command this module sends.
-------------------------------------------------------------------------------------------------------------

EMA.COMMAND_REQUEST_CURRENCY = "SendCurrency"
EMA.COMMAND_HERE_IS_CURRENCY = "HereIsCurrency"

-------------------------------------------------------------------------------------------------------------
-- Messages module sends.
-------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------
-- Variables used by module.
-------------------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------------------
-- Settings Dialogs.
-------------------------------------------------------------------------------------------------------------

local function SettingsCreate()
	EMA.settingsControl = {}
	-- Create the settings panel.
	EMAHelperSettings:CreateSettings(
		EMA.settingsControl,
		EMA.moduleDisplayName,
		EMA.parentDisplayName,
		EMA.SettingsPushSettingsClick,
		EMA.moduleIcon,
		EMA.moduleOrder
	)
	local bottomOfInfo = EMA:SettingsCreateCurrency( EMAHelperSettings:TopOfSettings() )
	EMA.settingsControl.widgetSettings.content:SetHeight( -bottomOfInfo )
	-- Help
	local helpTable = {}
	EMAHelperSettings:CreateHelp( EMA.settingsControl, helpTable, EMA:GetConfiguration() )
end




function EMA:SettingsCreateCurrency( top )
	-- Get positions.
	local checkBoxHeight = EMAHelperSettings:GetCheckBoxHeight()
	local sliderHeight = EMAHelperSettings:GetSliderHeight()
	local mediaHeight = EMAHelperSettings:GetMediaHeight()
	local editBoxHeight = EMAHelperSettings:GetEditBoxHeight()
	local buttonHeight = EMAHelperSettings:GetButtonHeight()
	local dropdownHeight = EMAHelperSettings:GetDropdownHeight() + 10
	local labelHeight = EMAHelperSettings:GetLabelHeight()
	local continueLabelHeight = 18
	local left = EMAHelperSettings:LeftOfSettings()
	local headingHeight = EMAHelperSettings:HeadingHeight()
	local headingWidth = EMAHelperSettings:HeadingWidth( true )
	local horizontalSpacing = EMAHelperSettings:GetHorizontalSpacing()
	local indent = horizontalSpacing * 12
	local verticalSpacing = EMAHelperSettings:GetVerticalSpacing()
	local halfWidth = (headingWidth - horizontalSpacing) / 2
	local thirdWidth = (headingWidth - (horizontalSpacing * 2)) / 3
	local halfWidthSlider = (headingWidth - horizontalSpacing) / 2
	local column2left = left + halfWidthSlider
	local left2 = left + thirdWidth
	local left3 = left + (thirdWidth * 2)
	local right = left + halfWidth + horizontalSpacing
	local movingTop = top
	-- A blank to get layout to show right?
	EMAHelperSettings:CreateHeading( EMA.settingsControl, "", movingTop, false )
	movingTop = movingTop - headingHeight
	EMAHelperSettings:CreateHeading( EMA.settingsControl, L["CHAT_TRIGGER"], movingTop, false )
	movingTop = movingTop - headingHeight
	EMA.settingsControl.checkBoxChatTrigger = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		halfWidth,
		left,
		movingTop,
		L["CHAT_TRIGGERS"],
		EMA.SettingsToggleChatTrigger,
		L["CHAT_TRIGGERS_HELP"]
	)
	movingTop = movingTop - checkBoxHeight
	EMAHelperSettings:CreateHeading( EMA.settingsControl, L["CURRENCY_HEADER"], movingTop, false )
	movingTop = movingTop - headingHeight
	EMA.settingsControl.checkBoxCurrencyGold = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		halfWidth,
		left,
		movingTop,
		L["GOLD"],
		EMA.SettingsToggleCurrencyGold,
		L["GOLD_HELP"]
	)
	EMA.settingsControl.checkBoxCurrencyGoldInGuildBank = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		halfWidth,
		column2left,
		movingTop,
		L["GOLD_GB"],
		EMA.SettingsToggleCurrencyGoldInGuildBank,
		L["GOLD_GB_HELP"]
	)
	movingTop = movingTop - checkBoxHeight
	EMA.settingsControl.checkBoxCurrencyShowBagSpace = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		halfWidth,
		left,
		movingTop,
		L["SHOW_BAG_SPACE"],
		EMA.SettingsToggleCurrencyShowBagSpace,
		L["SHOW_BAG_SPACE_HELP"]
	)
	movingTop = movingTop - checkBoxHeight
	EMAHelperSettings:CreateHeading( EMA.settingsControl, L["CURRENCY"], movingTop, false )
	movingTop = movingTop - headingHeight
	-- Xpacs
	EMA.settingsControl.checkBoxCurrencyShowClassic = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		thirdWidth,
		left,
		movingTop,
		L["CURRENCY_CLASSIC"],
		EMA.SettingsToggleCurrencyClassic,
		L["CURRENCY_CLASSIC_HELP"]
	)
	EMA.settingsControl.checkBoxCurrencyShowWarlordsofDraenor = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		thirdWidth,
		left2,
		movingTop,
		L["CURRENCY_WOD"],
		EMA.SettingsToggleCurrencyWarlordsofDraenor,
		L["CURRENCY_WOD_HELP"]
	)
	EMA.settingsControl.checkBoxCurrencyShowLegion = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		thirdWidth,
		left3,
		movingTop,
		L["CURRENCY_LEGION"],
		EMA.SettingsToggleCurrencyLegion,
		L["CURRENCY_LEGION_HELP"]
	)
	movingTop = movingTop - checkBoxHeight
	EMA.settingsControl.checkBoxCurrencyShowBattleforAzeroth = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		thirdWidth,
		left,
		movingTop,
		L["CURRENCY_BFA"],
		EMA.SettingsToggleCurrencyBattleforAzeroth,
		L["CURRENCY_BFA_HELP"]
	)
	EMA.settingsControl.checkBoxCurrencyShowShadowlands = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		thirdWidth,
		left2,
		movingTop,
		L["CURRENCY_SHADOWLANDS"],
		EMA.SettingsToggleCurrencyShadowlands,
		L["CURRENCY_SHADOWLANDS_HELP"]
	)
	--Currency One & Two
	movingTop = movingTop - checkBoxHeight
	EMA.settingsControl.editBoxCurrencyTypeOneID = EMAHelperSettings:CreateDropdown(
		EMA.settingsControl,
		halfWidth,
		left + indent,
		movingTop,
		L["CURRENCY"]..L[" "]..L["1"]
	)
	EMA.settingsControl.editBoxCurrencyTypeOneID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeOneID:SetCallback( "OnValueChanged",  EMA.EditBoxChangedCurrencyTypeOneID)
	EMA.settingsControl.editBoxCurrencyTypeTwoID = EMAHelperSettings:CreateDropdown(
		EMA.settingsControl,
		halfWidth,
		right + indent,
		movingTop,
		L["CURRENCY"]..L[" "]..L["2"]
	)
	EMA.settingsControl.editBoxCurrencyTypeTwoID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeTwoID:SetCallback( "OnValueChanged",  EMA.EditBoxChangedCurrencyTypeTwoID)
	--Currency Three & Four
	movingTop = movingTop - dropdownHeight
	EMA.settingsControl.editBoxCurrencyTypeThreeID = EMAHelperSettings:CreateDropdown(
		EMA.settingsControl,
		halfWidth,
		left + indent,
		movingTop,
		L["CURRENCY"]..L[" "]..L["3"]
	)
	EMA.settingsControl.editBoxCurrencyTypeThreeID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeThreeID:SetCallback( "OnValueChanged",  EMA.EditBoxChangedCurrencyTypeThreeID)
	EMA.settingsControl.editBoxCurrencyTypeFourID = EMAHelperSettings:CreateDropdown(
		EMA.settingsControl,
		halfWidth,
		right + indent,
		movingTop,
		L["CURRENCY"]..L[" "]..L["4"]
	)
	EMA.settingsControl.editBoxCurrencyTypeFourID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeFourID:SetCallback( "OnValueChanged",  EMA.EditBoxChangedCurrencyTypeFourID)
	--Currency Five & Six
	movingTop = movingTop - dropdownHeight
	EMA.settingsControl.editBoxCurrencyTypeFiveID = EMAHelperSettings:CreateDropdown(
		EMA.settingsControl,
		halfWidth,
		left + indent,
		movingTop,
		L["CURRENCY"]..L[" "]..L["5"]
	)
	EMA.settingsControl.editBoxCurrencyTypeFiveID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeFiveID:SetCallback( "OnValueChanged",  EMA.EditBoxChangedCurrencyTypeFiveID)
	EMA.settingsControl.editBoxCurrencyTypeSixID = EMAHelperSettings:CreateDropdown(
		EMA.settingsControl,
		halfWidth,
		right + indent,
		movingTop,
		L["CURRENCY"]..L[" "]..L["6"]
	)
	EMA.settingsControl.editBoxCurrencyTypeSixID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeSixID:SetCallback( "OnValueChanged",  EMA.EditBoxChangedCurrencyTypeSixID)
	-- Other Stuff
	movingTop = movingTop - dropdownHeight
	EMA.settingsControl.currencyButtonShowList = EMAHelperSettings:CreateButton(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["SHOW_CURRENCY"],
		EMA.EMAToonRequestCurrency,
		L["SHOW_CURRENCY_HELP"]
	)
	movingTop = movingTop - buttonHeight
	EMA.settingsControl.checkBoxCurrencyOpenStartUpAll = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		halfWidth,
		left,
		movingTop,
		L["CURR_STARTUP"],
		EMA.SettingsToggleCurrencyOpenStartUpAll,
		L["CURR_STARTUP_HELP"]
	)
	EMA.settingsControl.checkBoxCurrencyOpenStartUpMaster = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		halfWidth,
		column2left,
		movingTop,
		L["CURR_STARTUP_MASTER"],
		EMA.SettingsToggleCurrencyOpenStartUpMaster,
		L["CURR_STARTUP_MASTER_HELP"]
	)
	movingTop = movingTop - checkBoxHeight
	-- Create appearance & layout.
	EMAHelperSettings:CreateHeading( EMA.settingsControl, L["APPEARANCE_LAYOUT_HEALDER"], movingTop, true )
	movingTop = movingTop - headingHeight
	EMA.settingsControl.checkBoxCurrencyLockWindow = EMAHelperSettings:CreateCheckBox(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["LOCK_CURR_LIST"],
		EMA.SettingsToggleCurrencyLockWindow,
		L["LOCK_CURR_LIST_HELP"]
	)
	movingTop = movingTop - checkBoxHeight
	EMA.settingsControl.currencyScaleSlider = EMAHelperSettings:CreateSlider(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["SCALE"]
	)
	EMA.settingsControl.currencyScaleSlider:SetSliderValues( 0.5, 2, 0.01 )
	EMA.settingsControl.currencyScaleSlider:SetCallback( "OnValueChanged", EMA.SettingsChangeScale )
	movingTop = movingTop - sliderHeight - verticalSpacing
	EMA.settingsControl.currencyTransparencySlider = EMAHelperSettings:CreateSlider(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["TRANSPARENCY"]
	)
	EMA.settingsControl.currencyTransparencySlider:SetSliderValues( 0, 1, 0.01 )
	EMA.settingsControl.currencyTransparencySlider:SetCallback( "OnValueChanged", EMA.SettingsChangeTransparency )
	movingTop = movingTop - sliderHeight - verticalSpacing
	EMA.settingsControl.currencyMediaBorder = EMAHelperSettings:CreateMediaBorder(
		EMA.settingsControl,
		halfWidthSlider,
		left,
		movingTop,
		L["BORDER_STYLE"]
	)
	EMA.settingsControl.currencyMediaBorder:SetCallback( "OnValueChanged", EMA.SettingsChangeBorderStyle )

	EMA.settingsControl.currencyBorderColourPicker = EMAHelperSettings:CreateColourPicker(
		EMA.settingsControl,
		halfWidthSlider,
		column2left + 15,
		movingTop - 15,
		L["BORDER COLOUR"]
	)
	EMA.settingsControl.currencyBorderColourPicker:SetHasAlpha( true )
	EMA.settingsControl.currencyBorderColourPicker:SetCallback( "OnValueConfirmed", EMA.SettingsBorderColourPickerChanged )
	movingTop = movingTop - mediaHeight - verticalSpacing
	EMA.settingsControl.currencyMediaBackground = EMAHelperSettings:CreateMediaBackground(
		EMA.settingsControl,
		halfWidthSlider,
		left,
		movingTop,
		L["BACKGROUND"]
	)
	EMA.settingsControl.currencyMediaBackground:SetCallback( "OnValueChanged", EMA.SettingsChangeBackgroundStyle )
	EMA.settingsControl.currencyBackgroundColourPicker = EMAHelperSettings:CreateColourPicker(
		EMA.settingsControl,
		halfWidthSlider,
		column2left + 15,
		movingTop - 15,
		L["BG_COLOUR"]
	)
	EMA.settingsControl.currencyBackgroundColourPicker:SetHasAlpha( true )
	EMA.settingsControl.currencyBackgroundColourPicker:SetCallback( "OnValueConfirmed", EMA.SettingsBackgroundColourPickerChanged )
	movingTop = movingTop - mediaHeight - verticalSpacing
	--Font
	EMA.settingsControl.currencyMediaFont = EMAHelperSettings:CreateMediaFont(
		EMA.settingsControl,
		halfWidthSlider,
		left,
		movingTop,
		L["FONT"]
	)
	EMA.settingsControl.currencyMediaFont:SetCallback( "OnValueChanged", EMA.SettingsChangeFontStyle )
	EMA.settingsControl.currencyFontSize = EMAHelperSettings:CreateSlider(
		EMA.settingsControl,
		halfWidthSlider,
		column2left,
		movingTop,
		L["FONT_SIZE"]
	)
	EMA.settingsControl.currencyFontSize:SetSliderValues( 8, 20 , 1 )
	EMA.settingsControl.currencyFontSize:SetCallback( "OnValueChanged", EMA.SettingsChangeFontSize )
	movingTop = movingTop - mediaHeight - verticalSpacing
	EMA.settingsControl.currencySliderSpaceForName = EMAHelperSettings:CreateSlider(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["SPACE_FOR_NAME"]
	)
	EMA.settingsControl.currencySliderSpaceForName:SetSliderValues( 20, 200, 1 )
	EMA.settingsControl.currencySliderSpaceForName:SetCallback( "OnValueChanged", EMA.SettingsChangeSliderSpaceForName )
	movingTop = movingTop - sliderHeight - verticalSpacing
	EMA.settingsControl.currencySliderSpaceForGold = EMAHelperSettings:CreateSlider(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["SPACE_FOR_GOLD"]
	)
	EMA.settingsControl.currencySliderSpaceForGold:SetSliderValues( 20, 200, 1 )
	EMA.settingsControl.currencySliderSpaceForGold:SetCallback( "OnValueChanged", EMA.SettingsChangeSliderSpaceForGold )
	movingTop = movingTop - sliderHeight - verticalSpacing
	EMA.settingsControl.currencySliderSpaceForOther = EMAHelperSettings:CreateSlider(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["SPACE_FOR_OTHER"]
	)
	EMA.settingsControl.currencySliderSpaceForOther:SetSliderValues( 20, 200, 1 )
	EMA.settingsControl.currencySliderSpaceForOther:SetCallback( "OnValueChanged", EMA.SettingsChangeSliderSpaceForOther )
	movingTop = movingTop - sliderHeight - verticalSpacing
	EMA.settingsControl.currencySliderSpaceForPoints = EMAHelperSettings:CreateSlider(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["SPACE_FOR_POINTS"]
	)
	EMA.settingsControl.currencySliderSpaceForPoints:SetSliderValues( 20, 200, 1 )
	EMA.settingsControl.currencySliderSpaceForPoints:SetCallback( "OnValueChanged", EMA.SettingsChangeSliderSpaceForPoints )
	movingTop = movingTop - sliderHeight - verticalSpacing
	EMA.settingsControl.currencySliderSpaceBetweenValues = EMAHelperSettings:CreateSlider(
		EMA.settingsControl,
		headingWidth,
		left,
		movingTop,
		L["SPACE_BETWEEN_VALUES"]
	)
	EMA.settingsControl.currencySliderSpaceBetweenValues:SetSliderValues( 0, 20, 1 )
	EMA.settingsControl.currencySliderSpaceBetweenValues:SetCallback( "OnValueChanged", EMA.SettingsChangeSliderSpaceBetweenValues )
	movingTop = movingTop - sliderHeight - verticalSpacing
	return movingTop
end



-------------------------------------------------------------------------------------------------------------
-- Settings Populate.
-------------------------------------------------------------------------------------------------------------

function EMA:BeforeEMAProfileChanged()
end

function EMA:OnEMAProfileChanged()
	EMA:SettingsRefresh()
end

function EMA:SettingsRefresh()
	EMA.settingsControl.checkBoxChatTrigger:SetValue( EMA.db.currChatTrigger )
	EMA.settingsControl.checkBoxCurrencyGold:SetValue( EMA.db.currGold )
	EMA.settingsControl.checkBoxCurrencyGoldInGuildBank:SetValue( EMA.db.currGoldInGuildBank )
	EMA.settingsControl.checkBoxCurrencyGoldInGuildBank:SetDisabled( not EMA.db.currGold )
	EMA.settingsControl.checkBoxCurrencyShowBagSpace:SetValue( EMA.db.currBagSpace )
	EMA.settingsControl.checkBoxCurrencyShowClassic:SetValue( EMA.db.currClassicCurrencys )
	EMA.settingsControl.checkBoxCurrencyShowWarlordsofDraenor:SetValue( EMA.db.currWodCurrencys )
	EMA.settingsControl.checkBoxCurrencyShowLegion:SetValue( EMA.db.currLegionCurrencys )
	EMA.settingsControl.checkBoxCurrencyShowBattleforAzeroth:SetValue( EMA.db.currBattleforAzerothCurrencys)
	EMA.settingsControl.checkBoxCurrencyShowShadowlands:SetValue( EMA.db.currShadowlands )
	EMA.settingsControl.editBoxCurrencyTypeOneID:SetValue( EMA.db.CcurrTypeOne )
	EMA.settingsControl.editBoxCurrencyTypeOneID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeTwoID:SetValue ( EMA.db.CcurrTypeTwo )
	EMA.settingsControl.editBoxCurrencyTypeTwoID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeThreeID:SetValue ( EMA.db.CcurrTypeThree )
	EMA.settingsControl.editBoxCurrencyTypeThreeID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeFourID:SetValue ( EMA.db.CcurrTypeFour )
	EMA.settingsControl.editBoxCurrencyTypeFourID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeFiveID:SetValue ( EMA.db.CcurrTypeFive )
	EMA.settingsControl.editBoxCurrencyTypeFiveID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.editBoxCurrencyTypeSixID:SetValue ( EMA.db.CcurrTypeSix )
	EMA.settingsControl.editBoxCurrencyTypeSixID:SetList( EMA.CurrDropDownBox() )
	EMA.settingsControl.checkBoxCurrencyOpenStartUpAll:SetValue( EMA.db.currOpenStartUpAll )
	EMA.settingsControl.checkBoxCurrencyOpenStartUpMaster:SetValue( EMA.db.currOpenStartUpMaster )
	EMA.settingsControl.checkBoxCurrencyOpenStartUpMaster:SetDisabled( not EMA.db.currOpenStartUpAll )
	EMA.settingsControl.currencyTransparencySlider:SetValue( EMA.db.currencyFrameAlpha )
	EMA.settingsControl.currencyScaleSlider:SetValue( EMA.db.currencyScale )
	EMA.settingsControl.currencyMediaBorder:SetValue( EMA.db.currencyBorderStyle )
	EMA.settingsControl.currencyMediaBackground:SetValue( EMA.db.currencyBackgroundStyle )
	EMA.settingsControl.currencyBackgroundColourPicker:SetColor( EMA.db.currencyFrameBackgroundColourR, EMA.db.currencyFrameBackgroundColourG, EMA.db.currencyFrameBackgroundColourB, EMA.db.currencyFrameBackgroundColourA )
	EMA.settingsControl.currencyBorderColourPicker:SetColor( EMA.db.currencyFrameBorderColourR, EMA.db.currencyFrameBorderColourG, EMA.db.currencyFrameBorderColourB, EMA.db.currencyFrameBorderColourA )
	EMA.settingsControl.currencyMediaFont:SetValue( EMA.db.currencyFontStyle )
	EMA.settingsControl.currencyFontSize:SetValue( EMA.db.currencyFontSize )
	EMA.settingsControl.currencySliderSpaceForName:SetValue( EMA.db.currencyNameWidth )
	EMA.settingsControl.currencySliderSpaceForGold:SetValue( EMA.db.currencyGoldWidth )
	EMA.settingsControl.currencySliderSpaceForOther:SetValue( EMA.db.currencyOtherWidth )
	EMA.settingsControl.currencySliderSpaceForPoints:SetValue( EMA.db.currencyPointsWidth )
	EMA.settingsControl.currencySliderSpaceBetweenValues:SetValue( EMA.db.currencySpacingWidth )
	EMA.settingsControl.checkBoxCurrencyLockWindow:SetValue( EMA.db.currencyLockWindow )
	EMA.CurrDropDownBox()
	if EMA.currencyListFrameCreated == true then
		EMA:CurrencyListSetColumnWidth()
		EMA:SettingsUpdateBorderStyle()
		EMA:SettingsUpdateFontStyle()
		EMA:CurrencyUpdateWindowLock()
		EMAToonCurrencyListFrame:SetScale( EMA.db.currencyScale )
		EMA:UpdateHendingText()
		EMA:CurrencyListSetHeight()
	end
end

function EMA:SettingsPushSettingsClick( event )
	EMA:EMASendSettings()
end

function EMA:SettingsToggleChatTrigger( event, checked )
	EMA.db.currChatTrigger = checked
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyGold( event, checked )
	EMA.db.currGold = checked
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyGoldInGuildBank( event, checked )
	EMA.db.currGoldInGuildBank = checked
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyShowBagSpace( event, checked )
	EMA.db.currBagSpace = checked
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyClassic( event, checked )
	EMA.db.currClassicCurrencys = checked
	EMA:AddCurrencyToTable()
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyWarlordsofDraenor( event, checked )
	EMA.db.currWodCurrencys = checked
	EMA:AddCurrencyToTable()
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyLegion( event, checked )
	EMA.db.currLegionCurrencys = checked
	EMA:AddCurrencyToTable()
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyBattleforAzeroth( event, checked )
	EMA.db.currBattleforAzerothCurrencys = checked
	EMA:AddCurrencyToTable()
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyShadowlands( event, checked )
	EMA.db.currShadowlands = checked
	EMA:AddCurrencyToTable()
	EMA:SettingsRefresh()
end

function EMA:EditBoxChangedCurrencyTypeOneID( event, value )
	local currName, id = EMA:MatchCurrValue(value)
	EMA.db.CcurrTypeOne = id
	EMA.db.CcurrTypeOneName = currName
	EMA:EMAToonRequestCurrency()
	EMA:SettingsRefresh()
end

function EMA:EditBoxChangedCurrencyTypeTwoID( event, value )
	local currName, id = EMA:MatchCurrValue(value)
	EMA.db.CcurrTypeTwo = id
	EMA.db.CcurrTypeTwoName = currName
	EMA:EMAToonRequestCurrency()
	EMA:SettingsRefresh()
end

function EMA:EditBoxChangedCurrencyTypeThreeID( event, value )
	local currName, id = EMA:MatchCurrValue(value)
	EMA.db.CcurrTypeThree = id
	EMA.db.CcurrTypeThreeName = currName
	EMA:EMAToonRequestCurrency()
	EMA:SettingsRefresh()
end

function EMA:EditBoxChangedCurrencyTypeFourID( event, value )
	local currName, id = EMA:MatchCurrValue(value)
	EMA.db.CcurrTypeFour = id
	EMA.db.CcurrTypeFourName = currName
	EMA:EMAToonRequestCurrency()
	EMA:SettingsRefresh()
end

function EMA:EditBoxChangedCurrencyTypeFiveID( event, value )
	local currName, id = EMA:MatchCurrValue(value)

	EMA.db.CcurrTypeFive = id
	EMA.db.CcurrTypeFiveName = currName
	EMA:EMAToonRequestCurrency()
	EMA:SettingsRefresh()
end

function EMA:EditBoxChangedCurrencyTypeSixID( event, value )
	--EMA:Print("test", value)
	local currName, id = EMA:MatchCurrValue(value)
	EMA.db.CcurrTypeSix = id
	EMA.db.CcurrTypeSixName = currName
	EMA:EMAToonRequestCurrency()
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyOpenStartUpAll( event, checked )
	EMA.db.currOpenStartUpAll = checked
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyOpenStartUpMaster( event, checked )
	EMA.db.currOpenStartUpMaster = checked
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeScale( event, value )
	EMA.db.currencyScale = tonumber( value )
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeTransparency( event, value )
	EMA.db.currencyFrameAlpha = tonumber( value )
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeBorderStyle( event, value )
	EMA.db.currencyBorderStyle = value
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeBackgroundStyle( event, value )
	EMA.db.currencyBackgroundStyle = value
	EMA:SettingsRefresh()
end

function EMA:SettingsBackgroundColourPickerChanged( event, r, g, b, a )
	EMA.db.currencyFrameBackgroundColourR = r
	EMA.db.currencyFrameBackgroundColourG = g
	EMA.db.currencyFrameBackgroundColourB = b
	EMA.db.currencyFrameBackgroundColourA = a
	EMA:SettingsRefresh()
end

function EMA:SettingsBorderColourPickerChanged( event, r, g, b, a )
	EMA.db.currencyFrameBorderColourR = r
	EMA.db.currencyFrameBorderColourG = g
	EMA.db.currencyFrameBorderColourB = b
	EMA.db.currencyFrameBorderColourA = a
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeFontStyle( event, value )
	EMA.db.currencyFontStyle = value
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeFontSize( event, value )
	EMA.db.currencyFontSize = value
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeSliderSpaceForName( event, value )
	EMA.db.currencyNameWidth = tonumber( value )
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeSliderSpaceForGold( event, value )
	EMA.db.currencyGoldWidth = tonumber( value )
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeSliderSpaceForOther( event, value )
	EMA.db.currencyOtherWidth = tonumber( value )
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeSliderSpaceForPoints( event, value )
	EMA.db.currencyPointsWidth = tonumber( value )
	EMA:SettingsRefresh()
end

function EMA:SettingsChangeSliderSpaceBetweenValues( event, value )
	EMA.db.currencySpacingWidth = tonumber( value )
	EMA:SettingsRefresh()
end

function EMA:SettingsToggleCurrencyLockWindow( event, checked )
	EMA.db.currencyLockWindow = checked
	EMA:CurrencyUpdateWindowLock()
	EMA:SettingsRefresh()
end

-------------------------------------------------------------------------------------------------------------
-- Addon initialization, enabling and disabling.
-------------------------------------------------------------------------------------------------------------

-- Initialise the module.
function EMA:OnInitialize()
	EMA.currencyTotalGold = 0
	EMA.currencyListFrameCreated = false
	EMA.currencyFrameCharacterInfo = {}
	EMA.currentCurrencyValues = {}
	EMA.currTypes = {}
	-- Create the settings control.
	SettingsCreate()
	-- Initialise the EMAModule part of this module.
	EMA:EMAModuleInitialize( EMA.settingsControl.widgetSettings.frame )
	-- Create the currency list frame.
	EMA:CreateEMAToonCurrencyListFrame()
	EMA:AddCurrencyToTable()
	-- Populate the settings.
	EMA:SettingsRefresh()
end

-- Called when the addon is enabled.
function EMA:OnEnable()
	-- WoW events.
	EMA:RegisterEvent( "CHAT_MSG_PARTY", "DoChatCommand")
	EMA:RegisterEvent( "CHAT_MSG_GUILD", "DoChatCommand")
	EMA:RegisterEvent( "CHAT_MSG_PARTY_LEADER", "DoChatCommand")
	EMA:RegisterEvent( "CHAT_MSG_RAID", "DoChatCommand")
	EMA:RegisterEvent( "CHAT_MSG_RAID_LEADER", "DoChatCommand")
	--EMA:RegisterMessage( EMAApi.MESSAGE_MESSAGE_AREAS_CHANGED, "OnMessageAreasChanged" )
	if EMA.db.currOpenStartUpAll == true then
		if EMA.db.currOpenStartUpMaster == true then
			if EMAApi.IsCharacterTheMaster( EMA.characterName ) == true then
				EMA:ScheduleTimer( "EMAToonRequestCurrency", 10 )
			end
		else
			EMA:ScheduleTimer( "EMAToonRequestCurrency", 10 )
		end
	end
end

-- Called when the addon is disabled.
function EMA:OnDisable()
end

-- Settings received.
function EMA:EMAOnSettingsReceived( characterName, settings )
	if characterName ~= EMA.characterName then
		-- Update the settings.
		EMA.db.currChatTrigger = settings.currChatTrigger
		EMA.db.currGold = settings.currGold
		EMA.db.currGoldInGuildBank = settings.currGoldInGuildBank
		EMA.db.currBagSpace = settings.currBagSpace
		EMA.db.currClassicCurrencys = settings.currClassicCurrencys
		EMA.db.currWodCurrencys = settings.currWodCurrencys
		EMA.db.currLegionCurrencys = settings.currLegionCurrencys
		EMA.db.currBattleforAzerothCurrencys = settings.currBattleforAzerothCurrencys
		EMA.db.currShadowlands = settings.currShadowlands
		EMA.db.CcurrTypeOne = settings.CcurrTypeOne
		EMA.db.CcurrTypeOneName = settings.CcurrTypeOneName
		EMA.db.CcurrTypeTwo = settings.CcurrTypeTwo
		EMA.db.CcurrTypeTwoName = settings.CcurrTypeTwoName
		EMA.db.CcurrTypeThree = settings.CcurrTypeThree
		EMA.db.CcurrTypeThreeName = settings.CcurrTypeThreeName
		EMA.db.CcurrTypeFour = settings.CcurrTypeFour
		EMA.db.CcurrTypeFourName = settings.CcurrTypeFourName
		EMA.db.CcurrTypeFive = settings.CcurrTypeFive
		EMA.db.CcurrTypeFiveName = settings.CcurrTypeFiveName
		EMA.db.CcurrTypeSix = settings.CcurrTypeSix
		EMA.db.CcurrTypeSixName = settings.CcurrTypeSixName
		EMA.db.currOpenStartUpMaster = settings.currOpenStartUpMaster
		EMA.db.currOpenStartUpAll = settings.currOpenStartUpAll
		EMA.db.currencyScale = settings.currencyScale
		EMA.db.currencyFrameAlpha = settings.currencyFrameAlpha
		EMA.db.currencyFramePoint = settings.currencyFramePoint
		EMA.db.currencyFrameRelativePoint = settings.currencyFrameRelativePoint
		EMA.db.currencyFrameXOffset = settings.currencyFrameXOffset
		EMA.db.currencyFrameYOffset = settings.currencyFrameYOffset
		EMA.db.currencyFrameBackgroundColourR = settings.currencyFrameBackgroundColourR
		EMA.db.currencyFrameBackgroundColourG = settings.currencyFrameBackgroundColourG
		EMA.db.currencyFrameBackgroundColourB = settings.currencyFrameBackgroundColourB
		EMA.db.currencyFrameBackgroundColourA = settings.currencyFrameBackgroundColourA
		EMA.db.currencyFrameBorderColourR = settings.currencyFrameBorderColourR
		EMA.db.currencyFrameBorderColourG = settings.currencyFrameBorderColourG
		EMA.db.currencyFrameBorderColourB = settings.currencyFrameBorderColourB
		EMA.db.currencyFrameBorderColourA = settings.currencyFrameBorderColourA
		EMA.db.currencyBorderStyle = settings.currencyBorderStyle
		EMA.db.currencyBackgroundStyle = settings.currencyBackgroundStyle
		EMA.db.currencyFontSize = settings.currencyFontSize
		EMA.db.currencyFontStyle = settings.currencyFontStyle
		EMA.db.currencyNameWidth = settings.currencyNameWidth
		EMA.db.currencyPointsWidth = settings.currencyPointsWidth
		EMA.db.currencyGoldWidth = settings.currencyGoldWidth
		EMA.db.currencyOtherWidth = settings.currencyOtherWidth
		EMA.db.currencySpacingWidth = settings.currencySpacingWidth
		EMA.db.currencyLockWindow = settings.currencyLockWindow
		-- Refresh the settings.
		EMA:SettingsRefresh()
		-- Tell the player.
		EMA:Print( L["SETTINGS_RECEIVED_FROM_A"]( characterName ) )
	end
end

function EMA:CurrDropDownBox()
	--EMA:Print("test21")
	EMAUtilities:ClearTable( EMA.simpleCurrList )
	for name, id in pairs( EMA.currTypes ) do
		--EMA:Print("testDropDown", name, id)
		local currName = EMA:CurrencyIconAndName( id )
		--EMA.simpleCurrList[id] = currName
		EMA.simpleCurrList[id] = currName
	end
	EMA.simpleCurrList[0] = ""
	--table.sort(EMA.simpleCurrList, function(a,b) return a<b end)
	--table.concat(EMA.simpleCurrList, ", ")
	return EMA.simpleCurrList
end


function EMA:MatchCurrValue(value)
	if value == 0 then
		return "", 0
	end
	for name, id in pairs( EMA.currTypes ) do
		local currName = EMA:CurrencyIconAndName( id )
		if value == id then
			return currName, id
		end
	end
end


function EMA:DrawGroup1(container)
	for characterName, currencyFrameCharacterInfo in pairs( EMA.currencyFrameCharacterInfo ) do
		EMA:Print("test", characterName)
	end

end


function EMA:CreateEMAToonCurrencyListFrame()
	-- The frame.
	local frame = CreateFrame( "Frame", "EMAToonCurrencyListWindowFrame", UIParent, BackdropTemplateMixin and "BackdropTemplate" or nil )
	frame.obj = EMA
	frame:SetFrameStrata( "LOW" )
	frame:SetToplevel( false )
	frame:SetClampedToScreen( true )
	frame:EnableMouse( true )
	frame:SetMovable( true )
	frame:RegisterForDrag( "LeftButton" )
	frame:SetScript( "OnDragStart",
		function( this )
			if IsAltKeyDown() then
				this:StartMoving()
			end
		end )
	frame:SetScript( "OnDragStop",
		function( this )
			this:StopMovingOrSizing()
			local point, relativeTo, relativePoint, xOffset, yOffset = this:GetPoint()
			EMA.db.currencyFramePoint = point
			EMA.db.currencyFrameRelativePoint = relativePoint
			EMA.db.currencyFrameXOffset = xOffset
			EMA.db.currencyFrameYOffset = yOffset
	end	)
	frame:SetWidth( 500 )
	frame:SetHeight( 200 )
	frame:ClearAllPoints()
	frame:SetPoint( EMA.db.currencyFramePoint, UIParent, EMA.db.currencyFrameRelativePoint, EMA.db.currencyFrameXOffset, EMA.db.currencyFrameYOffset )

	-- Create the title for the frame.
	local titleName = frame:CreateFontString( "EMAToonCurrencyListWindowFrameTitleText", "OVERLAY", "GameFontNormal" )
	titleName:SetPoint( "TOPLEFT", frame, "TOPLEFT", 3, -8 )
	titleName:SetTextColor( NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b, 1.0 )
	titleName:SetText( L["CURRENCY"] )
	titleName:SetWidth( 200 )
	titleName:SetJustifyH( "LEFT" )
	titleName:SetWordWrap( false )
	frame.titleName = titleName

	-- Create the headings.
	local left = 10
	local spacing = 50
	local width = 50
	local top = -30
	local parentFrame = frame
	local r = 1.0
	local g = 0.96
	local b = 0.41
	local a = 1.0
	-- Set the characters name font string.
	local frameCharacterName = EMA.globalCurrencyFramePrefix.."TitleCharacterName"
	local frameCharacterNameText = parentFrame:CreateFontString( frameCharacterName.."Text", "OVERLAY", "GameFontNormal" )
	frameCharacterNameText:SetText( L["NAME"] )
	frameCharacterNameText:SetTextColor( r, g, b, a )
	frameCharacterNameText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameCharacterNameText:SetWidth( width * 2.5 )
	frameCharacterNameText:SetJustifyH( "LEFT" )
	frame.characterNameText = frameCharacterNameText
	left = left + (spacing * 2)
	-- Set the Gold font string.
	local frameGold = EMA.globalCurrencyFramePrefix.."TitleGold"
	local frameGoldText = parentFrame:CreateFontString( frameGold.."Text", "OVERLAY", "GameFontNormal" )
	frameGoldText:SetText( L["GOLD"] )
	frameGoldText:SetTextColor( r, g, b, a )
	frameGoldText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameGoldText:SetWidth( width )
	frameGoldText:SetJustifyH( "CENTER" )
	frame.GoldText = frameGoldText
	left = left + spacing
	-- Set the BagSpace font string.
	local frameBagSpace = EMA.globalCurrencyFramePrefix.."TitleBagSpace"
	local frameBagSpaceText = parentFrame:CreateFontString( frameBagSpace.."Text", "OVERLAY", "GameFontNormal" )
	frameBagSpaceText:SetText( L["BAG_SPACE"] )
	frameBagSpaceText:SetTextColor( r, g, b, a )
	frameBagSpaceText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameBagSpaceText:SetWidth( width )
	frameBagSpaceText:SetJustifyH( "CENTER" )
	frame.BagSpaceText = frameBagSpaceText
	left = left + spacing
	-- Set the TypeOne font string.
	local frameTypeOne = EMA.globalCurrencyFramePrefix.."TitleTypeOne"
	local frameTypeOneText = parentFrame:CreateFontString( frameTypeOne.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeOneText:SetText( L["CURR"]..L["1"] )
	frameTypeOneText:SetTextColor( r, g, b, a )
	frameTypeOneText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeOneText:SetWidth( width )
	frameTypeOneText:SetJustifyH( "CENTER" )
	frame.TypeOneText = frameTypeOneText
	left = left + spacing
	-- Set the TypeTwo font string.
	local frameTypeTwo = EMA.globalCurrencyFramePrefix.."TitleTypeTwo"
	local frameTypeTwoText = parentFrame:CreateFontString( frameTypeTwo.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeTwoText:SetText( L["CURR"]..L["2"] )
	frameTypeTwoText:SetTextColor( r, g, b, a )
	frameTypeTwoText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeTwoText:SetWidth( width )
	frameTypeTwoText:SetJustifyH( "CENTER" )
	frame.TypeTwoText = frameTypeTwoText
	left = left + spacing
	-- Set the TypeThree font string.
	local frameTypeThree = EMA.globalCurrencyFramePrefix.."TitleTypeThree"
	local frameTypeThreeText = parentFrame:CreateFontString( frameTypeThree.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeThreeText:SetText( L["CURR"]..L["3"] )
	frameTypeThreeText:SetTextColor( r, g, b, a )
	frameTypeThreeText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeThreeText:SetWidth( width )
	frameTypeThreeText:SetJustifyH( "CENTER" )
	frame.TypeThreeText = frameTypeThreeText
	left = left + spacing
	-- Set the TypeFour font string.
	local frameTypeFour = EMA.globalCurrencyFramePrefix.."TitleTypeFour"
	local frameTypeFourText = parentFrame:CreateFontString( frameTypeFour.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeFourText:SetText( L["CURR"]..L["4"] )
	frameTypeFourText:SetTextColor( r, g, b, a )
	frameTypeFourText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeFourText:SetWidth( width )
	frameTypeFourText:SetJustifyH( "CENTER" )
	frame.TypeFourText = frameTypeFourText
	left = left + spacing
	-- Set the TypeFive font string.
	local frameTypeFive = EMA.globalCurrencyFramePrefix.."TitleTypeFive"
	local frameTypeFiveText = parentFrame:CreateFontString( frameTypeFive.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeFiveText:SetText( L["CURR"]..L["5"] )
	frameTypeFiveText:SetTextColor( r, g, b, a )
	frameTypeFiveText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeFiveText:SetWidth( width )
	frameTypeFiveText:SetJustifyH( "CENTER" )
	frame.TypeFiveText = frameTypeFiveText
	left = left + spacing
	-- Set the TypeSix font string.
	local frameTypeSix = EMA.globalCurrencyFramePrefix.."TitleTypeSix"
	local frameTypeSixText = parentFrame:CreateFontString( frameTypeSix.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeSixText:SetText( L["CURR"]..L["6"] )
	frameTypeSixText:SetTextColor( r, g, b, a )
	frameTypeSixText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeSixText:SetWidth( width )
	frameTypeSixText:SetJustifyH( "CENTER" )
	frame.TypeSixText = frameTypeSixText
	left = left + spacing
	-- Set the Total Gold font string.
	left = 10
	top = -50
	local frameTotalGoldTitle = EMA.globalCurrencyFramePrefix.."TitleTotalGold"
	local frameTotalGoldTitleText = parentFrame:CreateFontString( frameTotalGoldTitle.."Text", "OVERLAY", "GameFontNormal" )
	frameTotalGoldTitleText:SetText( L["TOTAL"] )
	frameTotalGoldTitleText:SetTextColor( r, g, b, a )
	frameTotalGoldTitleText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTotalGoldTitleText:SetWidth( width )
	frameTotalGoldTitleText:SetJustifyH( "LEFT" )
	frame.TotalGoldTitleText = frameTotalGoldTitleText

	local frameTotalGoldGuildTitle = EMA.globalCurrencyFramePrefix.."TitleTotalGoldGuild"
	local frameTotalGoldGuildTitleText = parentFrame:CreateFontString( frameTotalGoldGuildTitle.."Text", "OVERLAY", "GameFontNormal" )
	frameTotalGoldGuildTitleText:SetText( L["GUILD"] )
	frameTotalGoldGuildTitleText:SetTextColor( r, g, b, a )
	frameTotalGoldGuildTitleText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTotalGoldGuildTitleText:SetWidth( width )
	frameTotalGoldGuildTitleText:SetJustifyH( "LEFT" )
	frame.TotalGoldGuildTitleText = frameTotalGoldGuildTitleText

	local frameTotalGold = EMA.globalCurrencyFramePrefix.."TotalGold"
	local frameTotalGoldText = parentFrame:CreateFontString( frameTotalGold.."Text", "OVERLAY", "GameFontNormal" )
	frameTotalGoldText:SetText( "0" )
	frameTotalGoldText:SetTextColor( r, g, b, a )
	frameTotalGoldText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTotalGoldText:SetWidth( width )
	frameTotalGoldText:SetJustifyH( "RIGHT" )
	frame.TotalGoldText = frameTotalGoldText

	local frameTotalGoldGuild = EMA.globalCurrencyFramePrefix.."TotalGoldGuild"
	local frameTotalGoldGuildText = parentFrame:CreateFontString( frameTotalGoldGuild.."Text", "OVERLAY", "GameFontNormal" )
	frameTotalGoldGuildText:SetText( "0" )
	frameTotalGoldGuildText:SetTextColor( r, g, b, a )
	frameTotalGoldGuildText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTotalGoldGuildText:SetWidth( width )
	frameTotalGoldGuildText:SetJustifyH( "RIGHT" )
	frame.TotalGoldGuildText = frameTotalGoldGuildText

	-- Set frame width.
	frame:SetWidth( left + 10 )

	-- Set transparency of the the frame (and all its children).
	frame:SetAlpha( EMA.db.currencyFrameAlpha )

	-- Set scale.
	frame:SetScale( EMA.db.currencyScale )

	-- Set the global frame reference for this frame.
	EMAToonCurrencyListFrame = frame

	-- Close.
	local closeButton = CreateFrame( "Button", EMA.globalCurrencyFramePrefix.."ButtonClose", frame, "UIPanelCloseButton" )
	closeButton:SetScript( "OnClick", function() EMAToonCurrencyListFrame:Hide() end )
	closeButton:SetPoint( "TOPRIGHT", frame, "TOPRIGHT", 0, 0 )
	frame.closeButton = closeButton

	-- Update.
	local updateButton = CreateFrame( "Button", EMA.globalCurrencyFramePrefix.."ButtonUpdate", frame, "UIPanelButtonTemplate" )
	updateButton:SetScript( "OnClick", function() EMA:EMAToonRequestCurrency() end )
	updateButton:SetPoint( "TOPRIGHT", frame, "TOPRIGHT", -30, -4 )
	updateButton:SetHeight( 22 )
	updateButton:SetWidth( 55 )
	updateButton:SetText( L["UPDATE"] )

	frame.updateButton = updateButton
	EMA:SettingsUpdateBorderStyle()
	EMA:CurrencyUpdateWindowLock()
	EMA:SettingsUpdateFontStyle()
	EMAToonCurrencyListFrame:Hide()
	EMA.currencyListFrameCreated = true
	EMA:UpdateHendingText()
	EMA:CurrencyListSetHeight()
end

local function GetIcon(iD)
	local info = C_CurrencyInfo.GetCurrencyInfo(iD)
	if 	info ~= nil then
		local iconTextureString = strconcat(" |T"..info.iconFileID..":20|t")
		return iconTextureString
	end
end

function EMA:UpdateHendingText()
	local parentFrame = EMAToonCurrencyListFrame
	-- Gold
	local iconTextureString = strconcat(" |T".."133785"..":20|t")
	if iconTextureString ~= nil then
		parentFrame.GoldText:SetText( iconTextureString )
	end
	-- BagSpace
	local iconTextureString = strconcat(" |T".."133633"..":20|t")
	if iconTextureString ~= nil then
		parentFrame.BagSpaceText:SetText( iconTextureString )
	end
	-- Type One
	local iconTextureString = GetIcon( EMA.db.CcurrTypeOne )
	if iconTextureString ~= nil then
		parentFrame.TypeOneText:SetText( iconTextureString )
	end
	-- Type Two
	local iconTextureString = GetIcon( EMA.db.CcurrTypeTwo )
	if iconTextureString ~= nil then
		parentFrame.TypeTwoText:SetText( iconTextureString )
	end
	-- Type Three
	local iconTextureString = GetIcon( EMA.db.CcurrTypeThree )
	if iconTextureString ~= nil then
		parentFrame.TypeThreeText:SetText( iconTextureString )
	end
	-- Type Four
	local iconTextureString = GetIcon( EMA.db.CcurrTypeFour )
	if iconTextureString ~= nil then
		parentFrame.TypeFourText:SetText( iconTextureString )
	end
	-- Type Five
	local iconTextureString = GetIcon( EMA.db.CcurrTypeFive )
	if iconTextureString ~= nil then
		parentFrame.TypeFiveText:SetText( iconTextureString )
	end
	-- Type six
	local iconTextureString = GetIcon( EMA.db.CcurrTypeSix )
	if iconTextureString ~= nil then
		parentFrame.TypeSixText:SetText( iconTextureString )
	end
end

function EMA:CurrencyUpdateWindowLock()
	if EMA.db.currencyLockWindow == false then
		EMAToonCurrencyListFrame:EnableMouse( true )
	else
		EMAToonCurrencyListFrame:EnableMouse( false )
	end
end

function EMA:SettingsUpdateBorderStyle()
	local borderStyle = EMA.SharedMedia:Fetch( "border", EMA.db.currencyBorderStyle )
	local backgroundStyle = EMA.SharedMedia:Fetch( "background", EMA.db.currencyBackgroundStyle )
	local frame = EMAToonCurrencyListFrame
	frame:SetBackdrop( {
		bgFile = backgroundStyle,
		edgeFile = borderStyle,
		tile = true, tileSize = frame:GetWidth(), edgeSize = 10,
		insets = { left = 3, right = 3, top = 3, bottom = 3 }
	} )
	frame:SetBackdropColor( EMA.db.currencyFrameBackgroundColourR, EMA.db.currencyFrameBackgroundColourG, EMA.db.currencyFrameBackgroundColourB, EMA.db.currencyFrameBackgroundColourA )
	frame:SetBackdropBorderColor( EMA.db.currencyFrameBorderColourR, EMA.db.currencyFrameBorderColourG, EMA.db.currencyFrameBorderColourB, EMA.db.currencyFrameBorderColourA )
	frame:SetAlpha( EMA.db.currencyFrameAlpha )
	frame:ClearAllPoints()
	frame:SetPoint( EMA.db.currencyFramePoint, UIParent, EMA.db.currencyFrameRelativePoint, EMA.db.currencyFrameXOffset, EMA.db.currencyFrameYOffset )
end

function EMA:SettingsUpdateFontStyle()
	local textFont = EMA.SharedMedia:Fetch( "font", EMA.db.currencyFontStyle )
	local textSize = EMA.db.currencyFontSize
	local frame = EMAToonCurrencyListFrame
	frame.titleName:SetFont( textFont , textSize , "OUTLINE")
	frame.characterNameText:SetFont( textFont , textSize , "OUTLINE")
	frame.GoldText:SetFont( textFont , textSize , "OUTLINE")
	frame.BagSpaceText:SetFont( textFont , textSize , "OUTLINE")
	frame.TotalGoldGuildTitleText:SetFont( textFont , textSize , "OUTLINE")
	frame.TotalGoldGuildText:SetFont( textFont , textSize , "OUTLINE")
	frame.TotalGoldText:SetFont( textFont , textSize , "OUTLINE")
	frame.TotalGoldTitleText:SetFont( textFont , textSize , "OUTLINE")
	for characterName, currencyFrameCharacterInfo in pairs( EMA.currencyFrameCharacterInfo ) do
		--EMA:Print("test", characterName)
		--currencyFrameCharacterInfo.characterNameText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.characterNameText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.GoldText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.BagSpaceText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.TypeOneText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.TypeTwoText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.TypeThreeText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.TypeFourText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.TypeFiveText:SetFont( textFont , textSize , "OUTLINE")
		currencyFrameCharacterInfo.TypeSixText:SetFont( textFont , textSize , "OUTLINE")
	end
end

function EMA:CurrencyListSetHeight()
	local additionalLines = 0
	local addHeight = 0
	if EMA.db.currGold == true then
		if EMA.db.currGoldInGuildBank == true then
			additionalLines = 2
			addHeight = 7
		else
			additionalLines = 1
			addHeight = 5
		end
	end
	EMAToonCurrencyListFrame:SetHeight( 56 + (( EMAApi.GetTeamListMaximumOrderOnline() + additionalLines) * 15) + addHeight )
end

function EMA:CurrencyListSetColumnWidth()
	local nameWidth = EMA.db.currencyNameWidth
	local pointsWidth = EMA.db.currencyPointsWidth
	local goldWidth = EMA.db.currencyGoldWidth
	local otherWidth = EMA.db.currencyOtherWidth
	local spacingWidth = EMA.db.currencySpacingWidth
	local frameHorizontalSpacing = 10
	local numberOfPointsColumns = 0
	local parentFrame = EMAToonCurrencyListFrame
	local headingRowTopPoint = -30
	local left = frameHorizontalSpacing
	local haveGold = 0
	local haveOther = 0
	-- Heading rows.
	parentFrame.characterNameText:SetWidth( nameWidth )
	parentFrame.characterNameText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
	left = left + nameWidth + spacingWidth
 	if EMA.db.currGold == true then
		parentFrame.GoldText:SetWidth( goldWidth )
		parentFrame.GoldText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
		left = left + goldWidth + (spacingWidth * 3)
		parentFrame.GoldText:Show()
		haveGold = 1
	else
		parentFrame.GoldText:Hide()
		haveGold = 0
	end
	if EMA.db.currBagSpace == true then
		parentFrame.BagSpaceText:SetWidth( otherWidth )
		parentFrame.BagSpaceText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
		left = left + otherWidth + (spacingWidth * 3)
		parentFrame.BagSpaceText:Show()
		haveOther = 1
	else
		parentFrame.BagSpaceText:Hide()
		haveOther = 0
	end
	if EMA.db.CcurrTypeOneName == "" then
		parentFrame.TypeOneText:Hide()
	else
		parentFrame.TypeOneText:SetWidth( pointsWidth )
		parentFrame.TypeOneText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
		left = left + pointsWidth + spacingWidth
		numberOfPointsColumns = numberOfPointsColumns + 1
		parentFrame.TypeOneText:Show()
	end
	if EMA.db.CcurrTypeTwoName == "" then
		parentFrame.TypeTwoText:Hide()
	else
		parentFrame.TypeTwoText:SetWidth( pointsWidth )
		parentFrame.TypeTwoText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
		left = left + pointsWidth + spacingWidth
		numberOfPointsColumns = numberOfPointsColumns + 1
		parentFrame.TypeTwoText:Show()
	end
	if EMA.db.CcurrTypeThreeName == "" then
		parentFrame.TypeThreeText:Hide()
	else
		parentFrame.TypeThreeText:SetWidth( pointsWidth )
		parentFrame.TypeThreeText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
		left = left + pointsWidth + spacingWidth
		numberOfPointsColumns = numberOfPointsColumns + 1
		parentFrame.TypeThreeText:Show()
	end
	if EMA.db.CcurrTypeFourName == "" then
		parentFrame.TypeFourText:Hide()
	else
		parentFrame.TypeFourText:SetWidth( pointsWidth )
		parentFrame.TypeFourText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
		left = left + pointsWidth + spacingWidth
		numberOfPointsColumns = numberOfPointsColumns + 1
		parentFrame.TypeFourText:Show()
	end
	if EMA.db.CcurrTypeFiveName == "" then
		parentFrame.TypeFiveText:Hide()
	else
		parentFrame.TypeFiveText:SetWidth( pointsWidth )
		parentFrame.TypeFiveText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
		left = left + pointsWidth + spacingWidth
		numberOfPointsColumns = numberOfPointsColumns + 1
		parentFrame.TypeFiveText:Show()
	end
	if EMA.db.CcurrTypeSixName == "" then
		parentFrame.TypeSixText:Hide()
	else
		parentFrame.TypeSixText:SetWidth( pointsWidth )
		parentFrame.TypeSixText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, headingRowTopPoint )
		left = left + pointsWidth + spacingWidth
		numberOfPointsColumns = numberOfPointsColumns + 1
		parentFrame.TypeSixText:Show()
	end
	-- Character rows.
	for characterName, currencyFrameCharacterInfo in pairs( EMA.currencyFrameCharacterInfo ) do
		if EMAPrivate.Team.GetCharacterOnlineStatus (characterName) == true then
			local left = frameHorizontalSpacing
			local characterRowTopPoint = currencyFrameCharacterInfo.characterRowTopPoint
				currencyFrameCharacterInfo.characterNameText:SetWidth( nameWidth )
				currencyFrameCharacterInfo.characterNameText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + nameWidth + spacingWidth
			if EMA.db.currGold == true then
				currencyFrameCharacterInfo.GoldText:SetWidth( goldWidth )
				currencyFrameCharacterInfo.GoldText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + goldWidth + (spacingWidth * 3)
				currencyFrameCharacterInfo.GoldText:Show()
			else
				currencyFrameCharacterInfo.GoldText:Hide()
			end
			if EMA.db.currBagSpace == true then
				currencyFrameCharacterInfo.BagSpaceText:SetWidth( otherWidth )
				currencyFrameCharacterInfo.BagSpaceText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + otherWidth + (spacingWidth * 3)
				currencyFrameCharacterInfo.BagSpaceText:Show()
			else
				currencyFrameCharacterInfo.BagSpaceText:Hide()
			end
			if EMA.db.CcurrTypeOneName == "" then
				currencyFrameCharacterInfo.TypeOneText:Hide()
			else
				currencyFrameCharacterInfo.TypeOneText:SetWidth( pointsWidth )
				currencyFrameCharacterInfo.TypeOneText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + pointsWidth + spacingWidth
				currencyFrameCharacterInfo.TypeOneText:Show()
			end
			if EMA.db.CcurrTypeTwoName == "" then
				currencyFrameCharacterInfo.TypeTwoText:Hide()
			else
				currencyFrameCharacterInfo.TypeTwoText:SetWidth( pointsWidth )
				currencyFrameCharacterInfo.TypeTwoText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + pointsWidth + spacingWidth
				currencyFrameCharacterInfo.TypeTwoText:Show()
			end
			if EMA.db.CcurrTypeThreeName == "" then
				currencyFrameCharacterInfo.TypeThreeText:Hide()
			else
				currencyFrameCharacterInfo.TypeThreeText:SetWidth( pointsWidth )
				currencyFrameCharacterInfo.TypeThreeText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + pointsWidth + spacingWidth
				currencyFrameCharacterInfo.TypeThreeText:Show()
			end
			if EMA.db.CcurrTypeFourName == "" then
				currencyFrameCharacterInfo.TypeFourText:Hide()
			else
				currencyFrameCharacterInfo.TypeFourText:SetWidth( pointsWidth )
				currencyFrameCharacterInfo.TypeFourText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + pointsWidth + spacingWidth
				currencyFrameCharacterInfo.TypeFourText:Show()
			end
			if EMA.db.CcurrTypeFiveName == "" then
				currencyFrameCharacterInfo.TypeFiveText:Hide()
			else
				currencyFrameCharacterInfo.TypeFiveText:SetWidth( pointsWidth )
				currencyFrameCharacterInfo.TypeFiveText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + pointsWidth + spacingWidth
				currencyFrameCharacterInfo.TypeFiveText:Show()

			end
			if EMA.db.CcurrTypeSixName == "" then
				currencyFrameCharacterInfo.TypeSixText:Hide()
			else
				currencyFrameCharacterInfo.TypeSixText:SetWidth( pointsWidth )
				currencyFrameCharacterInfo.TypeSixText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, characterRowTopPoint )
				left = left + pointsWidth + spacingWidth
				currencyFrameCharacterInfo.TypeSixText:Show()
			end
		end
	end
	-- Parent frame width and title.
	local finalParentWidth = frameHorizontalSpacing + nameWidth + spacingWidth + (haveGold * (goldWidth + (spacingWidth * 3))) + (haveOther * (otherWidth + (spacingWidth * 3))) + (numberOfPointsColumns * (pointsWidth + spacingWidth)) + frameHorizontalSpacing
	if finalParentWidth < 95 then
		finalParentWidth = 95
	end
	local widthOfCloseAndUpdateButtons = 70
	parentFrame.titleName:SetWidth( finalParentWidth - widthOfCloseAndUpdateButtons - frameHorizontalSpacing - frameHorizontalSpacing )
	parentFrame.titleName:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", frameHorizontalSpacing, -9 )
	if EMA.db.currGold == true then
		if numberOfPointsColumns > 1 then
			parentFrame.titleName:SetText( L["EMA_CURRENCY"] )
		else
			parentFrame.titleName:SetText( L["CURRENCY"] )
		end
	else
		if numberOfPointsColumns < 2 then
			parentFrame.titleName:SetText( "" )
		end
		if numberOfPointsColumns == 2 then
			parentFrame.titleName:SetText( L["CURR"] )
		end
		if (numberOfPointsColumns >= 3) and (numberOfPointsColumns <= 4) then
			parentFrame.titleName:SetText( L["CURRENCY"] )
		end
		if numberOfPointsColumns > 4 then
			parentFrame.titleName:SetText( L["EMA_CURRENCY"] )
		end
	end
	parentFrame:SetWidth( finalParentWidth )
	-- Total Gold.
	local nameLeft = frameHorizontalSpacing
	local goldLeft = frameHorizontalSpacing + nameWidth + spacingWidth
	--local guildTop = -35 - ((EMAApi.GetTeamListMaximumOrder() + 1) * 15) - 5
	--local goldTop = -35 - ((EMAApi.GetTeamListMaximumOrder() + 1) * 15) - 7
	local guildTop = -35 - ((EMAApi.GetTeamListMaximumOrderOnline() + 1) * 15) - 5
	local goldTop = -35 - ((EMAApi.GetTeamListMaximumOrderOnline() + 1) * 15) - 7
	if EMA.db.currGold == true then
		if EMA.db.currGoldInGuildBank == true then
			parentFrame.TotalGoldGuildTitleText:SetWidth( nameWidth )
			parentFrame.TotalGoldGuildTitleText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", nameLeft, guildTop )
			parentFrame.TotalGoldGuildTitleText:Show()
			parentFrame.TotalGoldGuildText:SetWidth( goldWidth )
			parentFrame.TotalGoldGuildText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", goldLeft, guildTop )
			parentFrame.TotalGoldGuildText:Show()
			--goldTop = -35 - ((EMAApi.GetTeamListMaximumOrder() + 2) * 15) - 5
			goldTop = -35 - ((EMAApi.GetTeamListMaximumOrderOnline() + 2) * 15) - 5
		else
			parentFrame.TotalGoldGuildTitleText:Hide()
			parentFrame.TotalGoldGuildText:Hide()
		end
		parentFrame.TotalGoldTitleText:SetWidth( nameWidth )
		parentFrame.TotalGoldTitleText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", nameLeft, goldTop )
		parentFrame.TotalGoldTitleText:Show()
		parentFrame.TotalGoldText:SetWidth( goldWidth )
		parentFrame.TotalGoldText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", goldLeft, goldTop )
		parentFrame.TotalGoldText:Show()
	else
		parentFrame.TotalGoldTitleText:Hide()
		parentFrame.TotalGoldText:Hide()
		parentFrame.TotalGoldGuildTitleText:Hide()
		parentFrame.TotalGoldGuildText:Hide()
	end
end

function EMA:CreateEMACurrencyFrameInfo( characterName, parentFrame )
	--EMA.Print("makelist", characterName)
	--if EMAPrivate.Team.GetCharacterOnlineStatus (characterName) == true then
	local left = 10
	local spacing = 50
	local width = 50
	local top = 0
	--local top = -35 + (-15 * EMAApi.GetPositionForCharacterName( characterName ))
	-- WHAT THE HELL IS GOING ON HERE! Ebony!
		local height1 = -35 + ( -15 * EMAApi.GetPositionForCharacterName( characterName) )
		local height2 = -35 + ( -15 * EMAApi.GetPositionForCharacterNameOnline( characterName) )
		if height1 < height2 then
			--EMA:Print("greater than ", characterName )
			top = height2
		elseif height1 > height2 then
			top = height2
		else
			top = height2
		end
	--EMA:Print("Top", top)
	-- Create the table to hold the status bars for this character.
	EMA.currencyFrameCharacterInfo[characterName] = {}
	-- Get the character info table.
	local currencyFrameCharacterInfo = EMA.currencyFrameCharacterInfo[characterName]
	currencyFrameCharacterInfo.characterRowTopPoint = top
	-- Set the characters name font string.
	local frameCharacterName = EMA.globalCurrencyFramePrefix.."CharacterName"
	local frameCharacterNameText = parentFrame:CreateFontString( frameCharacterName.."Text", "OVERLAY", "GameFontNormal" )
	frameCharacterNameText:SetText( Ambiguate( characterName , "none" ) )
	frameCharacterNameText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameCharacterNameText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameCharacterNameText:SetWidth( width * 2.5 )
	frameCharacterNameText:SetJustifyH( "LEFT" )
	currencyFrameCharacterInfo.characterNameText = frameCharacterNameText
	left = left + (spacing * 2)
	-- Set the Gold font string.
	local frameGold = EMA.globalCurrencyFramePrefix.."Gold"
	local frameGoldText = parentFrame:CreateFontString( frameGold.."Text", "OVERLAY", "GameFontNormal" )
	frameGoldText:SetText( "0" )
	frameGoldText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameGoldText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameGoldText:SetWidth( width )
	frameGoldText:SetJustifyH( "RIGHT" )
	currencyFrameCharacterInfo.GoldText = frameGoldText
	left = left + spacing
	-- Set the BagSpace font string.
	local frameBagSpace = EMA.globalCurrencyFramePrefix.."BagSpace"
	local frameBagSpaceText = parentFrame:CreateFontString( frameBagSpace.."Text", "OVERLAY", "GameFontNormal" )
	frameBagSpaceText:SetText( "0" )
	frameBagSpaceText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameBagSpaceText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameBagSpaceText:SetWidth( width )
	frameBagSpaceText:SetJustifyH( "RIGHT" )
	currencyFrameCharacterInfo.BagSpaceText = frameBagSpaceText
	left = left + spacing
	-- Set the TypeOne font string.
	local frameTypeOne = EMA.globalCurrencyFramePrefix.."TypeOne"
	local frameTypeOneText = parentFrame:CreateFontString( frameTypeOne.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeOneText:SetText( "0" )
	frameTypeOneText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameTypeOneText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeOneText:SetWidth( width )
	frameTypeOneText:SetJustifyH( "CENTER" )
	currencyFrameCharacterInfo.TypeOneText = frameTypeOneText
	left = left + spacing
	-- Set the TypeTwo font string.
	local frameTypeTwo = EMA.globalCurrencyFramePrefix.."TypeTwo"
	local frameTypeTwoText = parentFrame:CreateFontString( frameTypeTwo.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeTwoText:SetText( "0" )
	frameTypeTwoText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameTypeTwoText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeTwoText:SetWidth( width )
	frameTypeTwoText:SetJustifyH( "CENTER" )
	currencyFrameCharacterInfo.TypeTwoText = frameTypeTwoText
	left = left + spacing
		-- Set the TypeThree font string.
	local frameTypeThree = EMA.globalCurrencyFramePrefix.."TypeThree"
	local frameTypeThreeText = parentFrame:CreateFontString( frameTypeThree.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeThreeText:SetText( "0" )
	frameTypeThreeText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameTypeThreeText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeThreeText:SetWidth( width )
	frameTypeThreeText:SetJustifyH( "CENTER" )
	currencyFrameCharacterInfo.TypeThreeText = frameTypeThreeText
	left = left + spacing
	-- Set the TypeFour font string.
	local frameTypeFour = EMA.globalCurrencyFramePrefix.."TypeFour"
	local frameTypeFourText = parentFrame:CreateFontString( frameTypeFour.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeFourText:SetText( "0" )
	frameTypeFourText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameTypeFourText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeFourText:SetWidth( width )
	frameTypeFourText:SetJustifyH( "CENTER" )
	currencyFrameCharacterInfo.TypeFourText = frameTypeFourText
	left = left + spacing
	-- Set the TypeFive font string.
	local frameTypeFive = EMA.globalCurrencyFramePrefix.."TypeFive"
	local frameTypeFiveText = parentFrame:CreateFontString( frameTypeFive.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeFiveText:SetText( "0" )
	frameTypeFiveText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameTypeFiveText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeFiveText:SetWidth( width )
	frameTypeFiveText:SetJustifyH( "CENTER" )
	currencyFrameCharacterInfo.TypeFiveText = frameTypeFiveText
	left = left + spacing
	-- Set the TypeSix font string.
	local frameTypeSix = EMA.globalCurrencyFramePrefix.."TypeSix"
	local frameTypeSixText = parentFrame:CreateFontString( frameTypeSix.."Text", "OVERLAY", "GameFontNormal" )
	frameTypeSixText:SetText( "0" )
	frameTypeSixText:SetTextColor( 1.00, 1.00, 1.00, 1.00 )
	frameTypeSixText:SetPoint( "TOPLEFT", parentFrame, "TOPLEFT", left, top )
	frameTypeSixText:SetWidth( width )
	frameTypeSixText:SetJustifyH( "CENTER" )
	currencyFrameCharacterInfo.TypeSixText = frameTypeSixText
	left = left + spacing
	EMA:SettingsUpdateFontStyle()
end

function EMA:ShowInformationPanel()
	if EMAToonCurrencyListWindowFrame:IsShown() then
		EMAToonCurrencyListFrame:Hide()
	else
		--EMA:Print("startup")
		EMA:EMAToonRequestCurrency()
		EMAToonCurrencyListFrame:Show()
	end
end

function EMA:EMAToonHideCurrency()
	EMAToonCurrencyListFrame:Hide()
end

function EMA:EMAToonRequestCurrency()
	-- Colour Light Red.
	local r = 1.0
	local g = 0.42
	local b = 0.42
	local a = 0.6
	for characterName, currencyFrameCharacterInfo in pairs( EMA.currencyFrameCharacterInfo ) do
		--EMA.Print("DoRequestCurrency", characterName)
		-- Change Hight if a new member joins the team or leaves the team.
		local height1 = currencyFrameCharacterInfo.characterRowTopPoint
		local height2 = -35 + ( -15 * EMAApi.GetPositionForCharacterNameOnline( characterName) )
			if height1 < height2 then
				currencyFrameCharacterInfo.characterRowTopPoint = height2
			elseif height1 > height2 then
				currencyFrameCharacterInfo.characterRowTopPoint = height2
			end
		if EMAApi.GetCharacterOnlineStatus ( characterName ) == false then
			-- Hides currency for offline members.
			--EMA.Print("offlineRemove", characterName )
			currencyFrameCharacterInfo.characterNameText:Hide()
			currencyFrameCharacterInfo.GoldText:Hide()
			currencyFrameCharacterInfo.BagSpaceText:Hide()
			currencyFrameCharacterInfo.TypeOneText:Hide()
			currencyFrameCharacterInfo.TypeTwoText:Hide()
			currencyFrameCharacterInfo.TypeThreeText:Hide()
			currencyFrameCharacterInfo.TypeFourText:Hide()
			currencyFrameCharacterInfo.TypeFiveText:Hide()
			currencyFrameCharacterInfo.TypeSixText:Hide()
		else
			currencyFrameCharacterInfo.characterNameText:Show()
			currencyFrameCharacterInfo.GoldText:SetTextColor( r, g, b, a )
			currencyFrameCharacterInfo.BagSpaceText:SetTextColor( r, g, b, a )
			currencyFrameCharacterInfo.characterNameText:SetTextColor( r, g, b, a )
			currencyFrameCharacterInfo.TypeOneText:SetTextColor( r, g, b, a )
			currencyFrameCharacterInfo.TypeTwoText:SetTextColor( r, g, b, a )
			currencyFrameCharacterInfo.TypeThreeText:SetTextColor( r, g, b, a )
			currencyFrameCharacterInfo.TypeFourText:SetTextColor( r, g, b, a )
			currencyFrameCharacterInfo.TypeFiveText:SetTextColor( r, g, b, a )
			currencyFrameCharacterInfo.TypeSixText:SetTextColor( r, g, b, a )
		end
	end
	EMA.currencyTotalGold = 0
	if EMA.db.currGoldInGuildBank == true then
		if IsInGuild() then
			EMA.currencyTotalGold = GetGuildBankMoney()
		end
	end
	EMA:EMASendCommandToTeam( EMA.COMMAND_REQUEST_CURRENCY, "" )
	EMAToonCurrencyListFrame:Show()
	EMA.SettingsRefresh()
end

function EMA:DoSendCurrency( characterName, dummyValue )
	--EMA:Print("Test2")
	if EMAApi.GetCharacterOnlineStatus ( characterName ) == true then
		table.wipe( EMA.currentCurrencyValues )
		-- Gold
		EMA.currentCurrencyValues.currGold = GetMoney()
		-- BagSpace Maths
		local numFreeSlots, numTotalSlots = LibBagUtils:CountSlots("BAGS", 0)
		EMA.currentCurrencyValues.bagSpace = numFreeSlots
		EMA.currentCurrencyValues.bagSpaceMax = numTotalSlots
		--CcurrTypeOne
		local info = C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeOne )
		if info ~= nil then
			EMA.currentCurrencyValues.currTypeOne = info.quantity
			EMA.currentCurrencyValues.currMaxTypeOne = info.maxQuantity
		end
		--CcurrTypeTwo
		local infoTwo = C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeTwo )
		if infoTwo ~= nil then
			EMA.currentCurrencyValues.currTypeTwo = infoTwo.quantity
			EMA.currentCurrencyValues.currMaxTypeTwo = infoTwo.maxQuantity
		end
		--CcurrTypeThree
		local infoThree = C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeThree )
		if infoThree ~= nil then
			EMA.currentCurrencyValues.currTypeThree = infoThree.quantity
			EMA.currentCurrencyValues.currMaxTypeThree = infoThree.maxQuantity
		end
		--CcurrTypeFour
		local infoFour = C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeFour )
		if infoFour ~= nil then
			EMA.currentCurrencyValues.currTypeFour = infoFour.quantity
			EMA.currentCurrencyValues.currMaxTypeFour = infoFour.maxQuantity
		end
		--CcurrTypeFive
		local infoFive = C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeFive )
		if infoFive ~= nil then
			EMA.currentCurrencyValues.currTypeFive = infoFive.quantity
			EMA.currentCurrencyValues.currMaxTypeFive = infoFive.maxQuantity
		end
		--CcurrTypeSix
		local infoSix = C_CurrencyInfo.GetCurrencyInfo( EMA.db.CcurrTypeSix )
		if infoSix ~= nil then
			EMA.currentCurrencyValues.currTypeSix = infoSix.quantity
			EMA.currentCurrencyValues.currMaxTypeSix = infoSix.maxQuantity
		end
		-- SEND DATA
		--EMA:Print("testsendData", info.quantity, info.maxQuantity)
		EMA:EMASendCommandToToon( characterName, EMA.COMMAND_HERE_IS_CURRENCY, EMA.currentCurrencyValues )
	else
		return
	end
end

function EMA:DoShowToonsCurrency( characterName, currencyValues )
	--EMA.Print("DoShowCurrency", characterName, currencyValues.currTypeOne, currencyValues.currMaxTypeOne )
	local parentFrame = EMAToonCurrencyListFrame

	-- Get (or create and get) the character information.
	local currencyFrameCharacterInfo = EMA.currencyFrameCharacterInfo[characterName]
		--EMA.Print("Frame", characterName)
	if currencyFrameCharacterInfo == nil then
		EMA:CreateEMACurrencyFrameInfo( characterName, parentFrame )
		currencyFrameCharacterInfo = EMA.currencyFrameCharacterInfo[characterName]
	end
	-- Colour white.
	local r = 1.0
	local g = 1.0
	local b = 1.0
	local a = 1.0
	local v = 0
	--Gold
	currencyFrameCharacterInfo.GoldText:SetTextColor( r, g, b, a )
	currencyFrameCharacterInfo.characterNameText:SetTextColor( r, g, b, a )
	currencyFrameCharacterInfo.GoldText:SetTextColor( r, g, b, a )
	-- BagSpace
	if currencyValues.bagSpace == 0 then
		--EMA:Print("SetRed")
		currencyFrameCharacterInfo.BagSpaceText:SetTextColor( r, v, v, a )
	else
		--EMA:Print("SetWhite")
		currencyFrameCharacterInfo.BagSpaceText:SetTextColor( r, g, b, a )
	end
	if currencyValues.currTypeOne ~= nil then
		if currencyValues.currTypeOne == currencyValues.currMaxTypeOne and currencyValues.currTypeOne  > 0 then
			--EMA:Print("SetRed")
			currencyFrameCharacterInfo.TypeOneText:SetTextColor( r, v, v, a )
		else
			--EMA:Print("SetWhite")
			currencyFrameCharacterInfo.TypeOneText:SetTextColor( r, g, b, a )
		end
	end
	if currencyValues.currTypeTwo ~= nil then
		if currencyValues.currTypeTwo == currencyValues.currMaxTypeTwo and currencyValues.currTypeTwo  > 0 then
			currencyFrameCharacterInfo.TypeTwoText:SetTextColor( r, v, v, a )
		else
			currencyFrameCharacterInfo.TypeTwoText:SetTextColor( r, g, b, a )
		end
	end
	if currencyValues.currTypeThree ~= nil then
		if currencyValues.currTypeThree == currencyValues.currMaxTypeThree and currencyValues.currTypeThree  > 0 then
			currencyFrameCharacterInfo.TypeThreeText:SetTextColor( r, v, v, a )
		else
			currencyFrameCharacterInfo.TypeThreeText:SetTextColor( r, g, b, a )
		end
	end
	if currencyValues.currTypeFour ~= nil then
		if currencyValues.currTypeFour == currencyValues.currMaxTypeFour and currencyValues.currTypeFour  > 0 then
			currencyFrameCharacterInfo.TypeFourText:SetTextColor( r, v, v, a )
		else
			currencyFrameCharacterInfo.TypeFourText:SetTextColor( r, g, b, a )
		end
	end
	if currencyValues.currTypeFive~= nil then
		if currencyValues.currTypeFive == currencyValues.currMaxTypeFive and currencyValues.currTypeFive  > 0 then
			currencyFrameCharacterInfo.TypeFiveText:SetTextColor( r, v, v, a )
		else
			currencyFrameCharacterInfo.TypeFiveText:SetTextColor( r, g, b, a )
		end
	end
	if currencyValues.currTypeSix ~= nil then
		if currencyValues.currTypeSix == currencyValues.currMaxTypeSix and currencyValues.currTypeSix > 0 then
			currencyFrameCharacterInfo.TypeSixText:SetTextColor( r, v, v, a )
		else
			currencyFrameCharacterInfo.TypeSixText:SetTextColor( r, g, b, a )
		end
	end
	currencyFrameCharacterInfo.GoldText:SetText( EMAUtilities:FormatMoneyString( currencyValues.currGold ) )
	currencyFrameCharacterInfo.BagSpaceText:SetText( currencyValues.bagSpace..L["/"]..currencyValues.bagSpaceMax )
	currencyFrameCharacterInfo.TypeOneText:SetText( currencyValues.currTypeOne )
	currencyFrameCharacterInfo.TypeTwoText:SetText( currencyValues.currTypeTwo )
	currencyFrameCharacterInfo.TypeThreeText:SetText( currencyValues.currTypeThree )
	currencyFrameCharacterInfo.TypeFourText:SetText( currencyValues.currTypeFour )
	currencyFrameCharacterInfo.TypeFiveText:SetText( currencyValues.currTypeFive )
	currencyFrameCharacterInfo.TypeSixText:SetText( currencyValues.currTypeSix )
	-- Total gold.
	EMA.currencyTotalGold = EMA.currencyTotalGold + currencyValues.currGold
	parentFrame.TotalGoldText:SetText( EMAUtilities:FormatMoneyString( EMA.currencyTotalGold ) )
	--parentFrame.TotalGoldText:SetText( GetCoinTextureString( EMA.currencyTotalGold ) )
	if IsInGuild() then
		parentFrame.TotalGoldGuildText:SetText( EMAUtilities:FormatMoneyString( GetGuildBankMoney() ) )
		--parentFrame.TotalGoldGuildText:SetText( GetCoinTextureString( GetGuildBankMoney() ) )
	end
	-- Update width of currency list.
	EMA:CurrencyListSetColumnWidth()
	EMAToonCurrencyListFrame:Show()
	--EMAToonCurrencyListFrameTwo:Show()
end


-------------------------------------------------------------------------------------------------------------
-- Team Information Stuff.
-------------------------------------------------------------------------------------------------------------

local trigger = {
	["!emahelp"] = true,
	["!gold"] = true,
	["!keys"] = true,
	["!ping"] = true,
	["!durability"] = true,
	["!durr"] = true,
	["!item"] = true,
	["!bagspace"] = true
}

function EMA:DoChatCommand( event, msg, playerName, ... )
	if EMA.db.currChatTrigger == false then
		return
	end
	--EMA:Print("test3", event, msg, playerName )
	msg = msg:lower()
	for keyword in pairs(trigger) do
		--EMA:Print("aa", msg, keyword, playerName)
		if msg:match(keyword) then
			if EMAApi.IsCharacterInTeam(playerName) == true then
				if keyword == "!gold" then
					--EMA:Print("triggerFound", keyword)
					EMA:TellTeamGold( event, msg, playerName)
				elseif keyword == "!keys" then
					EMA:TellTeamKeys( event, msg, playerName)
				elseif keyword == "!ping" then
					EMA:TellTeamPing( event, msg, playerName)
				elseif 	keyword == "!durability" or keyword == "!durr" then
					EMA:TellTeamDurr( event, msg, playerName)
				elseif keyword == "!item" then
					EMA:TellTeamItem( event, msg, playerName)
				elseif keyword == "!bagspace" then
					EMA:TellTeamBagspace( event, msg, playerName)

				elseif keyword == "!emahelp" then
					EMA:TriggerHelp( msg, playerName )
				break
				end
			end
		end
	end
end

function EMA:TriggerHelp( msg, playerName )
	--EMA:Print("test?", playerName, EMA.CharacterName)
	if  playerName == EMA.characterName then
		EMA:Print( L["CHAT_TRIGGER"] )
		for keyword in pairs(trigger) do
		 EMA:Print(keyword)
		 end
	end
end

-- Report Gold.
function EMA:TellTeamGold( event, msg, playerName )
	--EMA:Print("goldtest", event, msg)
	local money = GetMoney()
	local gold, silver, copper  = EMAUtilities:MoneyStringFormatted(money)
	local goldText = gold.." Gold "..silver.." Silver "..copper.." Copper"
	local channel = nil
	if event == "CHAT_MSG_GUILD" then
		channel = "GUILD"
	elseif event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_PARTY_LEADER" then
		channel = "PARTY"
	elseif event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER" then
		channel = "RAID"
	end
	if channel ~= nil then
		SendChatMessage(L["I_HAVE_X_GOLD"](goldText), channel)
	end
end

-- KeyStones
function EMA:TellTeamKeys( event, msg, playerName)
	local KeyStone = EMA:LookForKeyStones()
	--EMA:Print("test", KeyStone)
	local channel = nil
	if event == "CHAT_MSG_GUILD" then
		channel = "GUILD"
	elseif event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_PARTY_LEADER" then
		channel = "PARTY"
	elseif event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER" then
		channel = "RAID"
	end
	if KeyStone == nil then
		KeyStone = L["NO_KEYSTONE_FOUND"]
	end

	if channel ~= nil and KeyStone ~= nil then
		SendChatMessage(L["MY_KEY_STONE_IS"](KeyStone), channel)
	end
end

function EMA:LookForKeyStones()
	for bagID = 0, NUM_BAG_SLOTS do
		for slotID = 1,GetContainerNumSlots( bagID ),1 do
			local item = Item:CreateFromBagAndSlot(bagID, slotID)
			if ( item ) then
				local bagItemID = item:GetItemID()
				local itemLink = item:GetItemLink()
				if ( bagItemID ) then
					--EMA:Print("test", bagItemID, itemLink)
					if (bagItemID == 158923) then
						return itemLink
					elseif (bagItemID == 123456) then
						return itemLink
					end
				end
			end
		end
	end
end

-- Ping (System)
function EMA:TellTeamPing( event, msg, playerName)
	local _, _, latencyHome, latencyWorld = GetNetStats()
	local channel = nil
	if event == "CHAT_MSG_GUILD" then
		channel = "GUILD"
	elseif event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_PARTY_LEADER" then
		channel = "PARTY"
	elseif event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER" then
		channel = "RAID"
	end
	if channel ~= nil then
		SendChatMessage(L["MY_LATENCY_IS:X_MS_X_MS"](latencyHome,latencyWorld), channel)
	end
end

 -- Durability
function EMA:TellTeamDurr( event, msg, playerName)
	local curTotal, maxTotal, broken = 0, 0, 0
	local durability = 100
	for i = 1, 17 do
		local curItemDurability, maxItemDurability = GetInventoryItemDurability(i)
		if (curItemDurability ~= nil) and (maxItemDurability ~= nil ) then
			--EMA:Print("£test", i, curItemDurability, maxItemDurability )
			curTotal = curTotal + curItemDurability
			maxTotal = maxTotal + maxItemDurability
			if maxItemDurability > 0 and curItemDurability == 0 then
				broken = broken + 1
			end
		end
	end
	local durabilityPercent = ( EMAUtilities:GetStatusPercent(curTotal, maxTotal) * 100 )
	local durabilityText = tostring(gsub( durabilityPercent, "%.[^|]+", "") )

	local channel = nil
	if event == "CHAT_MSG_GUILD" then
		channel = "GUILD"
	elseif event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_PARTY_LEADER" then
		channel = "PARTY"
	elseif event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER" then
		channel = "RAID"
	end
	if channel ~= nil then
		SendChatMessage(L["MY_CURRENT_DURABILITY_IS"](durabilityText)..L["%"], channel)
	end
end

-- Bag Item Scan:
function EMA:TellTeamItem( event, msg, playerName)
	--EMA:Print("item", event, msg, playerName )
	local _, item = strsplit(" ", msg, 2)
	local _, name = GetItemInfo( item )
	local countBags = GetItemCount( item )
	local countTotal = GetItemCount( item , true)
	local channel = nil
	if event == "CHAT_MSG_GUILD" then
		channel = "GUILD"
	elseif event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_PARTY_LEADER" then
		channel = "PARTY"
	elseif event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER" then
		channel = "RAID"
	end
	if channel ~= nil and name ~= nil then
		SendChatMessage(L["ITEMCOUNT:_x_BAGS_BANK"](name, countBags, countTotal), channel)
	end
end

function EMA:TellTeamBagspace( event, msg, playerName)
	local numFreeSlots, numTotalSlots = LibBagUtils:CountSlots("BAGS", 0)
	local channel = nil
	if event == "CHAT_MSG_GUILD" then
		channel = "GUILD"
	elseif event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_PARTY_LEADER" then
		channel = "PARTY"
	elseif event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER" then
		channel = "RAID"
	end
	if channel ~= nil then
		SendChatMessage(L["BAG_FREE_SPACE"](numFreeSlots, numTotalSlots), channel)
	end
end

-- A EMA command has been received.
function EMA:EMAOnCommandReceived( characterName, commandName, ... )
	if commandName == EMA.COMMAND_REQUEST_CURRENCY then
		EMA:DoSendCurrency( characterName, ... )
	end
	if commandName == EMA.COMMAND_HERE_IS_CURRENCY then
		EMA:DoShowToonsCurrency( characterName, ... )
	end
end

EMAApi.TestCodeCurr = testcode