SPAMIAM_FILTERS = {
	ERR_ABILITY_COOLDOWN, 					-- Ability is not ready yet. (Ability)
	ERR_SPELL_COOLDOWN, 						-- Spell is not ready yet. (Spell)
	ERR_OUT_OF_ENERGY,							-- Not enough energy. (Err)
	OUT_OF_ENERGY,									-- Not enough energy.
	ERR_OUT_OF_RAGE,								-- Not enough rage.
	ERR_NO_ATTACK_TARGET,						-- There is nothing to attack.
	SPELL_FAILED_NO_COMBO_POINTS,		-- That ability requires combo points.
	SPELL_FAILED_TARGETS_DEAD,			-- Your target is dead.
	SPELL_FAILED_SPELL_IN_PROGRESS,	-- Another action is in progress. (Spell)
	SPELL_FAILED_TARGET_AURASTATE,	-- You can't do that yet. (TargetAura)
	SPELL_FAILED_CASTER_AURASTATE,	-- You can't do that yet. (CasterAura)
};
SPAMIAM_SPAMIAM = "SpamIam";
SPAMIAM_INIT1 = "SpamIam ";
SPAMIAM_V = "v";
SPAMIAM_INIT2 = " loaded. Type /SpamIam or /sia for options.";
SPAMIAM_STATUS1 = "[SpamIam is currently ";
SPAMIAM_STATUS2 = "]";
SPAMIAM_ENABLED = "enabled";
SPAMIAM_DISABLED = "disabled";
SPAMIAM_HELP = "help";
SPAMIAM_USAGE1 = "Type /SpamIam or /sia followed by one of the following commands:";
SPAMIAM_USAGE2 = "  enable - Enables SpamIam";
SPAMIAM_USAGE3 = "  disable - Disables SpamIam";
SPAMIAM_USAGE4 = "  toggle - Toggles SpamIam on/off";
SPAMIAM_USAGE5 = "  list - Shows the current filters and their ID number";
SPAMIAM_USAGE6 = "  add [message] - Adds [message] to the filter list";
SPAMIAM_USAGE7 = "  remove [id] - Removes the message [id] from the filter list";
SPAMIAM_USAGE8 = "  speechoff - Disables Error Speech";
SPAMIAM_USAGE9 = "  speechon - Enables Error Speech";
SPAMIAM_ENABLE = "enable";
SPAMIAM_DISABLE = "disable";
SPAMIAM_FILTERSCMD = "list";
SPAMIAM_ADD = "add";
SPAMIAM_REMOVE = "remove";
SPAMIAM_TOGGLE = "toggle";
SPAMIAM_SPEECHOFF = "speechoff";
SPAMIAM_SPEECHON = "speechon";
SPAMIAM_UNKNOWNCOMMAND = "SpamIam: Unknown command. Type /SpamIam or /sia for help.";
SPAMIAM_SPEECHTEXT1 = "SpamIam: Error Speech Disabled.";
SPAMIAM_SPEECHTEXT2 = "SpamIam: Error Speech Enabled.";
SPAMIAM_CURRENTFILTERS = "Current SpamIam filters:";
SPAMIAM_SLASHCOMMAND1 = "/spamiam";
SPAMIAM_SLASHCOMMAND2 = "/sia";
SPAMIAM_ADDUSAGE1 = "Usage: /SpamIam add [msg]";
SPAMIAM_ADDUSAGE2 = "Example: /SpamIam add Hello, world!";
SPAMIAM_ADDEDFILTER = "SpamIam added filter: ";
SPAMIAM_REMOVEUSAGE1 = "Usage: /SpamIam remove [id]";
SPAMIAM_REMOVEUSAGE2 = "Example: /SpamIam remove 2";
SPAMIAM_REMOVEUSAGE3 = "Use /SpamIam list to see the ID's of every filter";
SPAMIAM_FILTERNOTFOUND = "SpamIam: filter not found";
SPAMIAM_REMOVEDFILTER = "Removed filter ";
SPAMIAM_Version = "0.1";
SPAMIAM_Enabled = 1;
SI_NameRegistered = 0;
function SI_BCC(r, g, b)
	return string.format("|cff%02x%02x%02x", (r*255), (g*255), (b*255));
end
local SIC = SI_BCC(1, .6, .2);
local SIW = SI_BCC(1, 1, 1);
function SI_Print(msg)
	if (DEFAULT_CHAT_FRAME) then
		DEFAULT_CHAT_FRAME:AddMessage(msg);
	end
end
function SPAMIAM_OnLoad()
	this:RegisterEvent("UNIT_NAME_UPDATE");
	this:RegisterEvent("PLAYER_ENTERING_WORLD");
	SlashCmdList["SPAMIAMCOMMAND"] = Spamiam_SlashHandler;
	SLASH_SPAMIAMCOMMAND1 = SPAMIAM_SLASHCOMMAND1;
	SLASH_SPAMIAMCOMMAND2 = SPAMIAM_SLASHCOMMAND2;
	SI_Old_UIErrorsFrame_OnEvent = UIErrorsFrame_OnEvent;
	UIErrorsFrame_OnEvent = SI_New_UIErrorsFrame_OnEvent;
end
function SPAMIAM_Localize()
	if (GetLocale() == "frFR") then
		SPAMIAM_SPAMIAM = "SpamIam";
		SPAMIAM_INIT1 = "SpamIam ";
		SPAMIAM_V = "v";
		SPAMIAM_INIT2 = " charg\195\169. Ecrivez /SpamIam ou /sia pour options.";
		SPAMIAM_STATUS1 = "[SpamIam est actuellemnt ";
		SPAMIAM_STATUS2 = "]";
		SPAMIAM_ENABLED = "activ\195\169";
		SPAMIAM_DISABLED = "d\195\169sactiv\195\169";
		SPAMIAM_HELP = "aide";
		SPAMIAM_USAGE1 = "Ecrivez /SpamIam ou /sia suivit d'une des commandes suivantes :";
		SPAMIAM_USAGE2 = "  activer - Active SpamIam";
		SPAMIAM_USAGE3 = "  d\195\169sactiver - D\195\169sactive SpamIam";
		SPAMIAM_USAGE4 = "  basculer - Basculer SpamIam en Activ\195\169/D\195\169sactiv\195\169";
		SPAMIAM_USAGE5 = "  liste - Affiche les filtres actuels et leur num\195\169ro d'ID ";
		SPAMIAM_USAGE6 = "  ajouter [message] - Ajoute [message] \195\160 la liste des filtres";
		SPAMIAM_USAGE7 = "  enlever [id] - Enl\195\168ve l'[id] du message de la liste des filtres";
		SPAMIAM_USAGE8 = "  La Parole D'Erreur De Debronchements";
		SPAMIAM_USAGE9 = "  Permet La Parole D'Erreur";
		SPAMIAM_ENABLE = "activer";
		SPAMIAM_DISABLE = "d\195\169sactiver";
		SPAMIAM_FILTERSCMD = "liste";
		SPAMIAM_ADD = "ajouter";
		SPAMIAM_REMOVE = "enlever";
		SPAMIAM_TOGGLE = "basculer";
		SPAMIAM_SPEECHOFF = "speechoff";
		SPAMIAM_SPEECHON = "speechon";
		SPAMIAM_UNKNOWNCOMMAND = "SpamIam : Commande inconnue. Ecrivez /SpamIam ou /sia pour l'aide.";
		SPAMIAM_SPEECHTEXT1 = "SpamIam: Discours D'Erreur Neutralise.";
		SPAMIAM_SPEECHTEXT2 = "SpamIam: Discours D'Erreur Permis.";
		SPAMIAM_CURRENTFILTERS = "Filtres actuels de SpamIam:";
		SPAMIAM_SLASHCOMMAND1 = "/spamiam";
		SPAMIAM_SLASHCOMMAND2 = "/sia";
		SPAMIAM_ADDUSAGE1 = "Utilisation : /SpamIam ajouter [msg]";
		SPAMIAM_ADDUSAGE2 = "Exemple : /SpamIam ajouter Bonjour tout le monde !";
		SPAMIAM_ADDEDFILTER = "SpamIam ajoute le filtre : ";
		SPAMIAM_REMOVEUSAGE1 = "Utilisation : /SpamIam enl\195\168ve l'[id]";
		SPAMIAM_REMOVEUSAGE2 = "Exemple : /SpamIam enl\195\168ve 2";
		SPAMIAM_REMOVEUSAGE3 = "Utiliser /SpamIam liste, pour voir l'ID de tous les filtres";
		SPAMIAM_FILTERNOTFOUND = "SpamIam : filtre non trouv\195\169";
		SPAMIAM_REMOVEDFILTER = "Filtre enlev\195\169 ";
	elseif (GetLocale() == "deDE") then
		SPAMIAM_INIT1 = "SpamIam ";
		SPAMIAM_V = "v";
		SPAMIAM_INIT2 = " geladen. /SpamIam oder /sia zeigt die Optionen an.";
		SPAMIAM_STATUS1 = "[SpamIam ist ";
		SPAMIAM_STATUS2 = "]";
		SPAMIAM_ENABLED = "aktiv";
		SPAMIAM_DISABLED = "inaktiv";
		SPAMIAM_HELP = "Hilfe";
		SPAMIAM_USAGE1 = "/SpamIam oder /sia mit einem der folgenden Befehle eingeben:";
		SPAMIAM_USAGE2 = " aktivieren - aktiviert SpamIam";
		SPAMIAM_USAGE3 = " deaktivieren - deaktiviert SpamIam";
		SPAMIAM_USAGE4 = " toggle - toggelt den Aktivzustand von SpamIam";
		SPAMIAM_USAGE5 = " liste - zeigt die aktuellen Filter und ihre IDs an";
		SPAMIAM_USAGE6 = " add [nachricht] - F\195\188gt [message] der Filterliste hinzu";
		SPAMIAM_USAGE7 = " remove [id] - L\195\182scht die Nachricht [id] von der Filterliste";
		SPAMIAM_USAGE8 = "  Sperrungen Storung Rede";
		SPAMIAM_USAGE9 = "  Ermoglicht Storung Rede";
		SPAMIAM_ENABLE = "aktivieren";
		SPAMIAM_DISABLE = "deaktivieren";
		SPAMIAM_FILTERSCMD = "liste";
		SPAMIAM_ADD = "add";
		SPAMIAM_REMOVE = "remove";
		SPAMIAM_TOGGLE = "toggle";
		SPAMIAM_SPEECHOFF = "speechoff";
		SPAMIAM_SPEECHON = "speechon";
		SPAMIAM_UNKNOWNCOMMAND = "SpamIam: Unbekannter Befehl. /SpamIam oder /sia zeigt die Hilfe an.";
		SPAMIAM_SPEECHTEXT1 = "SpamIam: Storung Rede Sperrte.";
		SPAMIAM_SPEECHTEXT2 = "SpamIam: Storung Rede Ermoglicht.";
		SPAMIAM_CURRENTFILTERS = "Momentane SpamIam-Filter:";
		SPAMIAM_SLASHCOMMAND1 = "/spamiam";
		SPAMIAM_SLASHCOMMAND2 = "/sia";
		SPAMIAM_ADDUSAGE1 = "Benutzung: /SpamIam add [msg]";
		SPAMIAM_ADDUSAGE2 = "Beispiel: /SpamIam add Hallo!";
		SPAMIAM_ADDEDFILTER = "SpamIam f\195\188gte folgenden Filter der Liste hinzu: ";
		SPAMIAM_REMOVEUSAGE1 = "Benutzung: /SpamIam remove [id]";
		SPAMIAM_REMOVEUSAGE2 = "Beispiel: /SpamIam remove 2";
		SPAMIAM_REMOVEUSAGE3 = "/SpamIam liste um die IDs der Filter anzeigen";
		SPAMIAM_FILTERNOTFOUND = "SpamIam: Filter nicht gefunden";
		SPAMIAM_REMOVEDFILTER = "Filter gel\195\182scht ";
	end
end
function SPAMIAM_Toggle()
	if (SPAMIAM_Enabled == 1) then
		SPAMIAM_Enabled = 0;
	else
		SPAMIAM_Enabled = 1;
	end
	SI_PrintStatus();
end
function SI_Initialize()
	this:UnregisterEvent("UNIT_NAME_UPDATE");
	this:UnregisterEvent("PLAYER_ENTERING_WORLD");
	SPAMIAM_Localize();
	if(myAddOnsList) then
		myAddOnsList.SpamIam = {
			name = "SpamIam",
			description = "",
			version = SPAMIAM_Version,
			frame = "SpamIamFrame",
			category = MYADDONS_CATEGORY_CLASS
		};
	end
	SI_Print(SIC..SPAMIAM_INIT1..SIW..SPAMIAM_V..SPAMIAM_Version..SIC..SPAMIAM_INIT2);
end
function SPAMIAM_OnEvent()
	if (event == "UNIT_NAME_UPDATE" and arg1 == "player") or (event=="PLAYER_ENTERING_WORLD") then
		if (SI_NameRegistered == 1) then
			return;
		end
		local playerName = UnitName("player");
		if (playerName ~= UNKNOWNBEING and playerName ~= "Unknown Entity" and playerName ~= nil ) then
			SI_NameRegistered = 1;
			SI_Initialize();
		end
	end
end
function SI_PrintStatus()
	s = SIC..SPAMIAM_STATUS1..SIW;
	if (SPAMIAM_Enabled == 1) then
		s = s..SPAMIAM_ENABLED;
	else
		s = s..SPAMIAM_DISABLED;
	end
	s = s..SIC..SPAMIAM_STATUS2;
	SI_Print(s);
end
function Spamiam_SlashHandler(msg, arg1, arg2)
	local omsg = msg;
	if (msg) then
		msg = string.lower(msg);
		if (msg == "" or msg == SPAMIAM_HELP) then
			SI_Print(SIC..SPAMIAM_USAGE1);
			SI_Print(SIC..SPAMIAM_USAGE2);
			SI_Print(SIC..SPAMIAM_USAGE3);
			SI_Print(SIC..SPAMIAM_USAGE4);
			SI_Print(SIC..SPAMIAM_USAGE5);
			SI_Print(SIC..SPAMIAM_USAGE6);
			SI_Print(SIC..SPAMIAM_USAGE7);
			SI_Print(SIC..SPAMIAM_USAGE8);
			SI_Print(SIC..SPAMIAM_USAGE9);
			SI_PrintStatus();
		elseif (msg == SPAMIAM_SPEECHOFF) then	
			SetCVar("EnableErrorSpeech", 0);
			SI_Print(SPAMIAM_SPEECHTEXT1);
		elseif (msg == SPAMIAM_SPEECHON) then
			SetCVar("EnableErrorSpeech", 1);
			SI_Print(SPAMIAM_SPEECHTEXT2);
		elseif (msg == SPAMIAM_DISABLE) then
			SPAMIAM_Enabled = 0;
			SI_PrintStatus();
		elseif (msg == SPAMIAM_ENABLE) then
			SPAMIAM_Enabled = 1;
			SI_PrintStatus();
		elseif (msg == SPAMIAM_FILTERSCMD) then
			SI_Print(SIW..SPAMIAM_CURRENTFILTERS);
			for key, text in SPAMIAM_FILTERS do
				SI_Print(SIC.."  ["..SIW..key..SIC.."] "..text);
			end
		elseif (msg == SPAMIAM_TOGGLE) then
			SPAMIAM_Toggle();
		elseif (string.sub(msg, 1, string.len(SPAMIAM_ADD)) == SPAMIAM_ADD) then
			if (string.sub(msg, 1, (string.len(SPAMIAM_ADD)+1)) ~= (SPAMIAM_ADD.." ")) then
				SI_Print(SPAMIAM_ADDUSAGE1);
				SI_Print(SPAMIAM_ADDUSAGE2);
			else
				str = string.sub(omsg, (string.len(SPAMIAM_ADD)+2), -1);
				table.insert(SPAMIAM_FILTERS, str);
				SI_Print(SIC..SPAMIAM_ADDEDFILTER..SIW..str);
			end
		elseif (string.sub(msg, 1, string.len(SPAMIAM_REMOVE)) == SPAMIAM_REMOVE) then
			if (string.sub(msg, 1, (string.len(SPAMIAM_REMOVE)+1)) ~= (SPAMIAM_REMOVE.." ")) then
				SI_Print(SPAMIAM_REMOVEUSAGE1);
				SI_Print(SPAMIAM_REMOVEUSAGE2);
				SI_Print(SPAMIAM_REMOVEUSAGE3);
			else
				str = string.sub(omsg, (string.len(SPAMIAM_REMOVE)+2), -1);
				for key, text in SPAMIAM_FILTERS do
					if (key == tonumber(str)) then
						table.remove(SPAMIAM_FILTERS, key);
						SI_Print(SIC..SPAMIAM_REMOVEDFILTER..SIW..text);
						return;
					end
				end
				SI_Print(SPAMIAM_FILTERNOTFOUND);
			end
		else
			SI_Print(SPAMIAM_UNKNOWNCOMMAND);
		end
	end
end
function SI_New_UIErrorsFrame_OnEvent(event, message, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9)
	if (SPAMIAM_Enabled == 1) then
		for key, text in SPAMIAM_FILTERS do
			if (text and message) then if (message == text) then return; end end
		end
	end
	SI_Old_UIErrorsFrame_OnEvent(event, message, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9);
end
