--[[
	Informant
	An addon for World of Warcraft that shows pertinent information about
	an item in a tooltip when you hover over the item in the game.
	3.5.0.0824 (Platypus)
	$Id: InfCommand.lua 764 2006-03-22 22:17:45Z mentalpower $
	Command handler. Assumes responsibility for allowing the user to set the
	options via slash command, Khaos, MyAddon etc.

	License:
		This program is free software; you can redistribute it and/or
		modify it under the terms of the GNU General Public License
		as published by the Free Software Foundation; either version 2
		of the License, or (at your option) any later version.

		This program is distributed in the hope that it will be useful,
		but WITHOUT ANY WARRANTY; without even the implied warranty of
		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
		GNU General Public License for more details.

		You should have received a copy of the GNU General Public License
		along with this program(see GLP.txt); if not, write to the Free Software
		Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
--]]

-- function prototypes
local commandHandler, cmdHelp, onOff, genVarSet, chatPrint, registerKhaos, restoreDefault, cmdLocale, setLocale, isValidLocale
local setKhaosSetKeyValue

-- Localization function prototypes
local delocalizeFilterVal, localizeFilterVal, getLocalizedFilterVal, delocalizeCommand, localizeCommand, buildCommandMap

local commandMap = nil;
local commandMapRev = nil;

Informant_Slash_Registered = nil
Informant_GUI_Registered = nil
Informant_Khaos_Registered = nil

Informant.InitCommands = function()
	SLASH_INFORMANT1 = "/informant"
	SLASH_INFORMANT2 = "/inform"
	SLASH_INFORMANT3 = "/info"
	SLASH_INFORMANT4 = "/inf"
	SlashCmdList["INFORMANT"] = function(msg)
		commandHandler(msg, nil)
	end

	chatPrint(string.format(_INFM('FrmtWelcome'), INFORMANT_VERSION))

	if (Khaos) then
		if (not Informant_Khaos_Registered) then
			Informant_GUI_Registered = registerKhaos()
			if (Informant_GUI_Registered == true) then return true end
		end
	end
end

function setKhaosSetKeyValue(key, value)
	if (Informant_Khaos_Registered) then
		local kKey = Khaos.getSetKey("Informant", key)

		if (not kKey) then
			EnhTooltip.DebugPrint("setKhaosSetKeyParameter(): key " .. key .. " does not exist")
		elseif (kKey.checked ~= nil) then
			if (type(value) == "string") then value = (value == "on"); end
			Khaos.setSetKeyParameter("Informant", key, "checked", value)
		elseif (kKey.value ~= nil) then
			Khaos.setSetKeyParameter("Informant", key, "value", value)
		else
			EnhTooltip.DebugPrint("setKhaosSetKeyValue(): don't know how to update key ", key)
		end
	end
end

function buildCommandMap()
	commandMap = {
		[_INFM('CmdOn')]			=	'on',
		[_INFM('CmdOff')]			=	'off',
		[_INFM('CmdHelp')]			=	'help',
		[_INFM('CmdToggle')]		=	'toggle',
		[_INFM('CmdDisable')]		=	'disable',
		[_INFM('CmdLocale')]		=	'locale',
		[_INFM('CmdDefault')]		=	'default',
		[_INFM('CmdEmbed')]			=	'embed',
		[_INFM('ShowIcon')]			=	'show-icon',
		[_INFM('ShowStack')]		=	'show-stack',
		[_INFM('ShowUsage')]		=	'show-usage',
		[_INFM('ShowQuest')]		=	'show-quest',
		[_INFM('ShowMerchant')]		=	'show-merchant',
		[_INFM('ShowVendor')]		=	'show-vendor',
		[_INFM('ShowVendorBuy')]	=	'show-vendor-buy',
		[_INFM('ShowVendorSell')]	=	'show-vendor-sell',
	}

	commandMapRev = {}
	for k,v in pairs(commandMap) do
		commandMapRev[v] = k;
	end
end

--Cleaner Command Handling Functions (added by MentalPower)
function commandHandler(command, source)
	--To print or not to print, that is the question...
	local chatprint = nil
	if (source == "GUI") then chatprint = false
	else chatprint = true end

	--Divide the large command into smaller logical sections (Shameless copy from the original function)
	local i,j, cmd, param = string.find(command, "^([^ ]+) (.+)$")
	if (not cmd) then cmd = command end
	if (not cmd) then cmd = "" end
	if (not param) then param = "" end
	cmd = delocalizeCommand(cmd);

	--Now for the real Command handling
	if ((cmd == "") or (cmd == "help")) then
		cmdHelp()
		return

	elseif (cmd == "on" or cmd == "off" or cmd == "toggle") then
		onOff(cmd, chatprint)
	elseif (cmd == "disable") then
		Stubby.SetConfig("Informant", "LoadType", "never");
	elseif (cmd == "load") then
		if (param == "always") or (param == "never") then
			chatPrint("Setting Informant to "..param.." load for this toon");
			Stubby.SetConfig("Informant", "LoadType", param);
		end
	elseif (cmd == "locale") then
		setLocale(param, chatprint)
	elseif (cmd == "default") then
		restoreDefault(param, chatprint)
	elseif (cmd == "embed" or cmd == "show-stack" or cmd == "show-usage" or
			cmd == "show-quest" or cmd == "show-merchant" or cmd == "show-vendor" or
			cmd == "show-vendor-buy" or cmd == "show-vendor-sell" or cmd == "show-icon") then
		genVarSet(cmd, param, chatprint)
	else
		if (chatprint) then
			chatPrint(string.format(_INFM('FrmtActUnknown'), cmd))
		end
	end
end

--Help ME!! (The Handler) (Another shameless copy from the original function)
function cmdHelp()

	local onOffToggle = " (".._INFM('CmdOn').."|".._INFM('CmdOff').."|".._INFM('CmdToggle')..")"
	local lineFormat = "  |cffffffff/informant %s "..onOffToggle.."|r |cffff4020[%s]|r - %s"

	chatPrint(_INFM('TextUsage'))
	chatPrint("  |cffffffff/informant "..onOffToggle.."|r |cffff4020["..getLocalizedFilterVal('all').."]|r - " .. _INFM('HelpOnoff'))

	chatPrint("  |cffffffff/informant ".._INFM('CmdDisable').."|r - " .. _INFM('HelpDisable'));

	chatPrint(string.format(lineFormat, _INFM('ShowVendor'), getLocalizedFilterVal('show-vendor'), _INFM('HelpVendor')))
	chatPrint(string.format(lineFormat, _INFM('ShowVendorSell'), getLocalizedFilterVal('show-vendor-sell'), _INFM('HelpVendorSell')))
	chatPrint(string.format(lineFormat, _INFM('ShowVendorBuy'), getLocalizedFilterVal('show-vendor-buy'), _INFM('HelpVendorBuy')))
	chatPrint(string.format(lineFormat, _INFM('ShowUsage'), getLocalizedFilterVal('show-usage'), _INFM('HelpUsage')))
	chatPrint(string.format(lineFormat, _INFM('ShowMerchant'), getLocalizedFilterVal('show-merchant'), _INFM('HelpMerchant')))
	chatPrint(string.format(lineFormat, _INFM('ShowStack'), getLocalizedFilterVal('show-stack'), _INFM('HelpStack')))
	chatPrint(string.format(lineFormat, _INFM('ShowIcon'), getLocalizedFilterVal('show-icon'), _INFM('HelpIcon')))
	chatPrint(string.format(lineFormat, _INFM('CmdEmbed'), getLocalizedFilterVal('embed'), _INFM('HelpEmbed')))

	lineFormat = "  |cffffffff/informant %s %s|r |cffff4020[%s]|r - %s"
	chatPrint(string.format(lineFormat, _INFM('CmdLocale'), _INFM('OptLocale'), getLocalizedFilterVal('locale'), _INFM('HelpLocale')))

	lineFormat = "  |cffffffff/informant %s %s|r - %s"
	chatPrint(string.format(lineFormat, _INFM('CmdDefault'), "", _INFM('HelpDefault')))
end

--The onOff(state, chatprint) function handles the state of the Informant AddOn (whether it is currently on or off)
--If "on" or "off" is specified in the " state" variable then Informant's state is changed to that value,
--If "toggle" is specified then it will toggle Informant's state (if currently on then it will be turned off and vice-versa)
--If no keyword is specified then the functione will simply return the current state
--
--If chatprint is "true" then the state will also be printed to the user.

function onOff(state, chatprint)

	if ((state == nil) or (state == "")) then
		state = Informant.GetFilterVal("all")


	elseif ((state == _INFM('CmdOn')) or (state == "on")) then
		Informant.SetFilter("all", "on")


	elseif ((state == _INFM('CmdOff')) or (state == "off")) then
		Informant.SetFilter("all", "off")


	elseif ((state == _INFM('CmdToggle')) or (state == "toggle")) then
		Informant.SetFilter("all", not Informant.GetFilter("all"))
		state = Informant.GetFilterVal("all")


	end

	--Print the change and alert the GUI if the command came from slash commands. Do nothing if they came from the GUI.
	if (chatprint == true) then
		if ((state == _INFM('CmdOn')) or (state == "on")) then
			chatPrint(_INFM('StatOn'))

			if (Informant_Khaos_Registered) then
				Khaos.setSetKeyParameter("Informant", "enabled", "checked", true)
			end
		else
			chatPrint(_INFM('StatOff'))

			if (Informant_Khaos_Registered) then
				Khaos.setSetKeyParameter("Informant", "enabled", "checked", false)
			end
		end
	end

	return state
end

--Function decomisioned untill further notice
--[[function cmdLocale(param, chatprint)
	param = delocalizeFilterVal(param);
	local validLocale = nil;

	if (param == Informant_LocaleLastSet) then
		return
	end

	if (param == Informant.GetFilterVal('locale')) then
		validLocale = true;
	elseif (setLocale(param)) then
		validLocale = true;
	end

	Informant_LocaleLastSet = param;

	if (chatprint) then
		if (validLocale) then
			chatPrint(string.format(_INFM('FrmtActSet'), _INFM('CmdLocale'), localizeFilterVal(param)));
		else
			chatPrint(string.format(_INFM('FrmtUnknownLocale'), param));
			if (INFORMANT_VALID_LOCALES) then
				for locale, x in pairs(INFORMANT_VALID_LOCALES) do
					chatPrint("  "..locale);
				end
			end
		end
	end
end]]

function restoreDefault(param, chatprint)
	local oldLocale = InformantConfig.filters['locale']
	local paramLocalized

	if ( (param == nil) or (param == "") ) then
		return
	elseif ((param == _INFM('CmdClearAll')) or (param == "all")) then
		param = "all";
		InformantConfig.filters = {};
	else
		paramLocalized = param
		param = delocalizeCommand(param)
		Informant.SetFilter(param, nil);
	end

	-- Apply defaults for settings that went missing
	Informant.SetFilterDefaults();

	-- Apply new locale if needed
	if (oldLocale ~= InformantConfig.filters['locale']) then setLocale(InformantConfig.filters['locale']); end

	if (chatprint) then
		if (param == "all") then
			chatPrint(_INFM('FrmtActDefaultall'));
			for k,v in pairs(InformantConfig.filters) do
				setKhaosSetKeyValue(k, Informant.GetFilterVal(k));
			end
		else
			chatPrint(string.format(_INFM('FrmtActDefault'), paramLocalized));
			setKhaosSetKeyValue(param, Informant.GetFilterVal(param));
		end
	end
end

function genVarSet(variable, param, chatprint)
	if (type(param) == "string") then
		param = delocalizeFilterVal(param);
	end

	if (param == "on" or param == "off" or type(param) == "boolean") then
		Informant.SetFilter(variable, param);
	elseif (param == "toggle" or param == nil or param == "") then
		param = Informant.SetFilter(variable, not Informant.GetFilter(variable));
	end

	if (chatprint) then
		if (Informant.GetFilter(variable)) then
			chatPrint(string.format(_INFM('FrmtActEnable'), localizeCommand(variable)))
			setKhaosSetKeyValue(variable, true)
		else
			chatPrint(string.format(_INFM('FrmtActDisable'), localizeCommand(variable)))
			setKhaosSetKeyValue(variable, false)
		end
	end
end

local function getKhaosLocaleList()
	local options = { [_INFM('CmdDefault')] = 'default' };
	for locale, data in InformantLocalizations do
		options[locale] = locale;
	end
	return options
end

function registerKhaos()
	local optionSet = {
		id="Informant",
		text="Informant",
		helptext=_INFM('GuiMainHelp'),
		difficulty=1,
		default={checked=true},
		options={
			{
				id="Header",
				text="Informant",
				helptext=_INFM('GuiMainHelp'),
				type=K_HEADER,
				difficulty=1,
			},
			{
				id="enabled",
				type=K_TEXT,
				text=_INFM('GuiMainEnable'),
				helptext=_INFM('HelpOnoff'),
				callback=function(state)
					onOff(state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return _INFM('StatOn')
					else
						return _INFM('StatOff')
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				difficulty=1,
			},
			{
				id="locale";
				type=K_PULLDOWN;
				setup = {
					options = getKhaosLocaleList();
					multiSelect = false;
				};
				text=_INFM('GuiLocale');
				helptext=_INFM('HelpLocale');
				callback = function(state)
				end;
				feedback = function (state)
					setLocale(state.value);
					return string.format(_INFM('FrmtActSet'), _INFM('CmdLocale'), state.value);
				end;
				default = {
					value = getLocale();
				};
				disabled = {
					value = getLocale();
				};
				dependencies={enabled={checked=true;}};
				difficulty=2;
			};
			{
				id="ReloadUI",
				type=K_BUTTON,
				setup={
					buttonText = _INFM('GuiReloaduiButton')
				},
				text=_INFM('GuiReloadui'),
				helptext=_INFM('GuiReloaduiHelp'),
				callback=function()
					if(ReloadUI) then
						ReloadUIHandler("5");
					else
						ReloadUI();
					end
				end,
				feedback=function()
					return _INFM('GuiReloaduiFeedback');
				end;
				difficulty=3,
			},
			{
				id="InformantInfoHeader",
				type=K_HEADER,
				text=_INFM('GuiInfoHeader'),
				helptext=_INFM('GuiInfoHelp'),
				difficulty=1,
			},
			{
				id="show-icon",
				type=K_TEXT,
				text=_INFM('GuiInfoIcon'),
				helptext=_INFM('HelpIcon'),
				callback=function(state)
					genVarSet("show-icon", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'),  _INFM('ShowIcon')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('ShowIcon')))
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				dependencies={enabled={checked=true}},
				difficulty=1,
			},
			{
				id="show-stack",
				type=K_TEXT,
				text=_INFM('GuiInfoStack'),
				helptext=_INFM('HelpStack'),
				callback=function(state)
					genVarSet("show-stack", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'),  _INFM('ShowStack')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('ShowStack')))
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				dependencies={enabled={checked=true}},
				difficulty=1,
			},
			{
				id="show-usage",
				type=K_TEXT,
				text=_INFM('GuiInfoUsage'),
				helptext=_INFM('HelpUsage'),
				callback=function(state)
					genVarSet("show-usage", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'),  _INFM('ShowUsage')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('ShowUsage')))
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				dependencies={enabled={checked=true}},
				difficulty=1,
			},
			{
				id="show-quest",
				type=K_TEXT,
				text=_INFM('GuiInfoQuest'),
				helptext=_INFM('HelpQuest'),
				callback=function(state)
					genVarSet("show-quest", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'),  _INFM('ShowQuest')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('ShowQuest')))
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				dependencies={enabled={checked=true}},
				difficulty=1,
			},
			{
				id="show-merchant",
				type=K_TEXT,
				text=_INFM('GuiInfoMerchant'),
				helptext=_INFM('HelpMerchant'),
				callback=function(state)
					genVarSet("show-merchant", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'),  _INFM('ShowMerchant')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('ShowMerchant')))
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				dependencies={enabled={checked=true}},
				difficulty=1,
			},
			{
				id="InformantVendorHeader",
				type=K_HEADER,
				text=_INFM('GuiVendorHeader'),
				helptext=_INFM('GuiVendorHelp'),
				difficulty=1,
			},
			{
				id="show-vendor",
				type=K_TEXT,
				text=_INFM('GuiVendor'),
				helptext=_INFM('HelpVendor'),
				callback=function(state)
					genVarSet("show-vendor", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'), _INFM('ShowVendor')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('ShowVendor')))
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				dependencies={enabled={checked=true}},
				difficulty=1,
			},
			{
				id="show-vendor-buy",
				type=K_TEXT,
				text=_INFM('GuiVendorBuy'),
				helptext=_INFM('HelpVendorBuy'),
				callback=function(state)
					genVarSet("show-vendor-buy", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'), _INFM('ShowVendorBuy')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('ShowVendorBuy')))
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				dependencies={["show-vendor"]={checked=true}, enabled={checked=true}},
				difficulty=2,
			},
			{
				id="show-vendor-sell",
				type=K_TEXT,
				text=_INFM('GuiVendorSell'),
				helptext=_INFM('HelpVendorSell'),
				callback=function(state)
					genVarSet("show-vendor-sell", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'), _INFM('ShowVendorSell')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('ShowVendorSell')))
					end
				end,
				check=true,
				default={checked=true},
				disabled={checked=false},
				dependencies={["show-vendor"]={checked=true}, enabled={checked=true}},
				difficulty=2,
			},

			{
				id="InformantEmbedHeader",
				type=K_HEADER,
				text=_INFM('GuiEmbedHeader'),
				helptext=_INFM('HelpEmbed'),
				difficulty=1,
			},
			{
				id="embed",
				type=K_TEXT,
				text=_INFM('GuiEmbed'),
				helptext=_INFM('HelpEmbed'),
				callback=function(state)
					genVarSet("embed", state.checked)
				end,
				feedback=function(state)
					if (state.checked) then
						return (string.format(_INFM('FrmtActEnable'), _INFM('CmdEmbed')))
					else
						return (string.format(_INFM('FrmtActDisable'), _INFM('CmdEmbed')))
					end
				end,
				check=true,
				default={checked=false},
				disabled={checked=false},
				dependencies={enabled={checked=true}},
				difficulty=1,
			},
			{
				id="InformantOtherHeader",
				type=K_HEADER,
				text=_INFM('GuiOtherHeader'),
				helptext=_INFM('GuiOtherHelp'),
				difficulty=1,
			},
			{
				id="DefaultAll",
				type=K_BUTTON,
				setup={
					buttonText = _INFM('GuiDefaultAllButton')
				},
				text=_INFM('GuiDefaultAll'),
				helptext=_INFM('GuiDefaultAllHelp'),
				callback=function()
					restoreDefault(_INFM('CmdClearAll'))
				end,
				feedback=function()
					return _INFM('FrmtActDefaultall');
				end;
				dependencies={enabled={checked=true}},
				difficulty=1,
			},
			{
				id="DefaultOption",
				type=K_EDITBOX,
				setup = {
					callOn = {"enter", "tab"}
				},
				text=_INFM('GuiDefaultOption'),
				helptext=_INFM('HelpDefault'),
				callback = function(state)
					restoreDefault(state.value)
				end,
				feedback = function (state)
					if (state.value == _INFM('CmdClearAll')) then
						return _INFM('FrmtActDefaultall')
					else
						return string.format(_INFM('FrmtActDefault'), state.value)
					end
				end,
				default = {
					value = ""
				},
				disabled = {
					value = ""
				},
				dependencies={enabled={checked=true}},
				difficulty=4,
			},
		}
	}

	Khaos.registerOptionSet("tooltip",optionSet)
	Informant_Khaos_Registered = true
	Khaos.refresh();

	return true
end

local function resetKhaos()
	if (Informant_Khaos_Registered) then

		Khaos.unregisterOptionSet("Informant");
		Informant_Khaos_Registered = false;

		registerKhaos();
	end
end

Informant.Register = function()
	if (Khaos) then
		if (not Informant_Khaos_Registered) then
			Informant_GUI_Registered = registerKhaos()
		end
	end
	-- The following check is to accomodate other GUI libraries other than Khaos relatively easily.
	if (Informant_GUI_Registered == true) then
		return true
	else
		return false
	end
end

function setLocale(param, chatprint, updateKhaos)
	param = delocalizeFilterVal(param);
	if not Informant_LocaleLastSet then
		Informant_LocaleLastSet = "";
	end

	if not Babylonian.IsAddOnRegistered("Informant") then
		Babylonian.RegisterAddOn("Informant", Informant.SetLocale);
	end

	local validLocale = nil;

	if (param == Informant_LocaleLastSet) then
		validLocale = true;

	elseif (param == 'default') or (param == 'off') then
		Babylonian.SetOrder('');
		validLocale = true;

	elseif (isValidLocale(param)) then
		Babylonian.SetOrder(param);
		validLocale = true;

	else
		validLocale = false;
	end

	BINDING_HEADER_INFORMANT_HEADER = "Informant";
	BINDING_NAME_INFORMANT_POPUPDOWN = _INFM('MesgToggleWindow');

	if (chatprint) then
		if (validLocale) then
			chatPrint(string.format(_INFM('FrmtActSet'), _INFM('CmdLocale'), param));
			if not (param == Informant_LocaleLastSet) then
				setKhaosSetKeyValue('locale', param);
			end

		else
			chatPrint(string.format(_INFM("FrmtUnknownLocale"), param));
			local locales = "    ";
			for locale, data in pairs(InformantLocalizations) do
				locales = locales .. " '" .. locale .. "' ";
			end
			chatPrint(locales);
		end
	end

	if (Khaos and Informant_Khaos_Registered) then
		if (not (param == Informant_LocaleLastSet)) or (updateKhaos) then
			if (updateKhaos) then
				setKhaosSetKeyValue('locale', Babylonian.GetOrder());
			end
			resetKhaos();
		end
	end

	if (param) then
		Informant_LocaleLastSet = param;
	end

	commandMap = nil;
	commandMapRev = nil;

	return true;
end

function isValidLocale(param)

	if((InformantLocalizations) and (InformantLocalizations[param])) then
		return true;

	else
		return false;
	end
end

function chatPrint(msg)
	if (DEFAULT_CHAT_FRAME) then
		DEFAULT_CHAT_FRAME:AddMessage(msg, 0.25, 0.55, 1.0);
	end
end

--------------------------------------
--		Localization functions		--
--------------------------------------

function delocalizeFilterVal(value)
	if (value == _INFM('CmdOn')) then
		return 'on';
	elseif (value == _INFM('CmdOff')) then
		return 'off';
	elseif (value == _INFM('CmdDefault')) then
		return 'default';
	elseif (value == _INFM('CmdToggle')) then
		return 'toggle';
	else
		return value;
	end
end

function localizeFilterVal(value)
	local result
	if (value == 'on') then
		result = _INFM('CmdOn');
	elseif (value == 'off') then
		result = _INFM('CmdOff');
	elseif (value == 'default') then
		result = _INFM('CmdDefault');
	elseif (value == 'toggle') then
		result = _INFM('CmdToggle');
	end
	if (result) then return result; else return value; end
end

function getLocalizedFilterVal(key)
	return localizeFilterVal(Informant.GetFilterVal(key))
end

-- Turns a localized slash command into the generic English version of the command
function delocalizeCommand(cmd)
	if (not commandMap) then buildCommandMap(); end
	local result = commandMap[cmd];
	if (result) then return result; else return cmd; end
end

-- Translate a generic English slash command to the localized version, if available
function localizeCommand(cmd)
	if (not commandMapRev) then buildCommandMap(); end
	local result = commandMapRev[cmd];
	if (result) then return result; else return cmd; end
end

-- Globally accessible functions
Informant.SetLocale = setLocale;
