local TraceFrame = DEFAULT_CHAT_FRAME;

local CMS_debug = 0;	-- cette ligne doit etre disponible
--local CMS_debug = 1;	-- cette ligne ne doit pas etre mise pour une version distribuée

--essayer de remplacer tous les noms de joueurs par leur GUID, si les joueurs d'un autre serveur peuvent venir sur les canaux
--peut etre pas possible vu les arg des event

local CMS_wow_build;
local CMS_wow_build_live = 18414;	--13623;
--
_, CMS_wow_build, _, _ = GetBuildInfo();
CMS_wow_build = tonumber(CMS_wow_build);

CMS_NOMCANAL = "cms";
local CMS_numcanalCMS = 0;
CMS_VERSION1 = "01";
CMS_VERSION2 = "00";
CMS_VERSION3 = "37";
local CMS_serveur = GetRealmName();
local CMS_versionclientwow = GetLocale();
local CMS_newversion = 0;
local CMS_inumligne = 0;

local CMS_baffichermessagescanaux = 1;

local CMS_TIMEOUT = 5; -- 5 secondes

local CMS_config_premierefois_time = 0;

local CMS_listecanaux_old = "";

local CMS_v_phrase_nb_max_carac = 223;	--225;	--	12 + 18 + lgmax = 255

local CMS_language = nil;

--levelup:55:LEVEL_UP_TYPE_PET:grossécaille [niveau 55]		( sorte de orange)
--levelup:56:LEVEL_UP_TYPE_CHARACTER [niveau 56]		( sorte de orange )
--pettalentpane: [Point de talent de familier]

--ALREADY_BOUND = "|cffff0000est en conflit avec %s !|r";
--CHAT_MODERATION_OFF_NOTICE = "|Hchannel:%d|h[%s]|h Modération du canal désactivée par %s.";
--CHAT_MODERATION_ON_NOTICE = "|Hchannel:%d|h[%s]|h Modération du canal activée par %s.";
--CHAT_MONSTER_EMOTE_GET = "";
--CHAT_MONSTER_PARTY_GET = "|Hchannel:Party|h[Groupe]|h %s :\32";

--Prat3
--Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"]["Kirin Tor"]["classes"]["cygne"] = "PALADIN"
--Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"]["Kirin Tor"]["levels"]["cygne"] = 80

----/script CMS_test_chat2();
--function CMS_test_chat2()
--
--	SendChatMessage("( test : vend machin "..DBCS_montant_vers_chaine(1000000).." )","CHANNEL",this.language,2);
--
--end

--ICON_LIST = {
--	"|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_1:",
--	"|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_2:",
--	"|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_3:",
--	"|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_4:",
--	"|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_5:",
--	"|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_6:",
--	"|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_7:",
--	"|TInterface\\TargetingFrame\\UI-RaidTargetingIcon_8:",
--}

----Links tags from Global Strings to indicies for entries in ICON_LIST. This way addons can easily replace icons
--ICON_TAG_LIST =
--{
--	[strlower(ICON_TAG_RAID_TARGET_STAR)] = 1,
--	[strlower(ICON_TAG_RAID_TARGET_CIRCLE)] = 2,
--	[strlower(ICON_TAG_RAID_TARGET_DIAMOND)] = 3,
--	[strlower(ICON_TAG_RAID_TARGET_TRIANGLE)] = 4,
--	[strlower(ICON_TAG_RAID_TARGET_MOON)] = 5,
--	[strlower(ICON_TAG_RAID_TARGET_SQUARE)] = 6,
--	[strlower(ICON_TAG_RAID_TARGET_CROSS)] = 7,
--	[strlower(ICON_TAG_RAID_TARGET_SKULL)] = 8,
--	[strlower(RAID_TARGET_1)] = 1,
--	[strlower(RAID_TARGET_2)] = 2,
--	[strlower(RAID_TARGET_3)] = 3,
--	[strlower(RAID_TARGET_4)] = 4,
--	[strlower(RAID_TARGET_5)] = 5,
--	[strlower(RAID_TARGET_6)] = 6,
--	[strlower(RAID_TARGET_7)] = 7,
--	[strlower(RAID_TARGET_8)] = 8,
--}

--CMS 010037 du 20141025
	--résolution bug aléatoire dans l'addon DBCS_region "compactraid etc" qui n'arrive qu'en combat -> déplacement des initialisations des dropdown au moment où l'utilisateur a besoin de les voir, surtout pas avant

--CMS 010036 du 20141020
	--maj .toc pour wow 6.0
	--légères corrections

--CMS 010035 du 20141014
	--maj compatible avec wow 6.0

--CMS 010034 du 20111201
	--maj pour la 4.3
	--ajout ds l'addon DBCS_Region des 5 nouvelles zones, 3 héro + 1 raid + sombrelune

--CMS 010033 du 20110712
	--maj de l'addon DBCS_Region avec l'ajout des 2 zones bas niveau de Gilnéas

--CMS 010032 du 20110708
	--maj du .toc à 4.2
	--ajout des monnaies ds les canaux ( currency )
	--les liens d'instance raid sont raccourcis au nom strict de l'instance ds les messages visibles

--CMS 010031 du 20101123
	--maj pour wow 4.0.3a

--CMS 010030 du 20100329
	--coupe les messages + grand que 225 caractères en 2 messages
	--n'envoi plus le nom du joueur qui a parlé sur 1 canal, mais son GUID, permettra de faire + de choses, connaitre son nom, race, classe etc
	--ajout d'un lien vers une bulle d'aide, avec un "[M]" ou un "[F]" pour indiquer si c'est un personnage Masculin ou Féminin
	--ajout du GUID du joueur après son nom, utilisé pour créer les links vers haut-fait ou métier ou etc
	--si le GUID du joueur commence par "0x018" qui est le début d'un GUID habituel, je n'affiche pas ce début, ni les 0 suivants inutils
	--un GUID complet fait 18 caractères
	--n'affiche pas l'info " - capitales" pour les messages provenant des canaux :"Commerce - capitales" "RechercheDeGroupe - capitales" "RechercheDeGuilde - capitales"

--CMS 010029 du 20100304
	--permet de lire ( pas écrire ) le canal recherchedegroupe à distance, si quelqun avec l'addon est ds une capitale

--CMS 010028 du 20091210
	-- maj du .toc pour wow 3.3

--CMS 010027 du 20091031
	-- colorisation des noms ds les messages recus si on possède prat3 ou censius ( à ajouter )
	-- les link de métiers sont maintenant aussi traduit ds la langue du client
	--ajout de l'instance : La Forge des âmes : instance en groupe pour wow 3.3 avec le roi liche
	--ajout de l'instance : Fosse de Saron : instance en groupe pour wow 3.3 avec le roi liche
	--ajout de l'instance : Citadelle de la Couronne de glace : instance en raid pour wow 3.3 avec le roi liche

--CMS 010026 du 20090831
	-- maj du .toc pour wow 3.2

--CMS 010025 du 20090501
	-- maj du .toc pour wow 3.1

--CMS 010024 du 20090305
	-- modif du nom de l'instance : l'Arène des valeureux

--CMS 010023 du 20081221
	--maj de certains noms de régions
	-- ajout de 5 instances : naxxramas, l'arene des valeureux, égouts de dalaran, Caveau d'Archavon, Ulduar
	-- ajout de la zone : Maleterres : l'enclave éEcarlate
	-- maj du nom de l'instance : Ahn'kahet\194\160: l'Ancien royaume
	-- maj du nom de l'instance "Le sanctum obsidien" en "Le sanctum Obsidien"
	-- masquage bug chatmondialserveur 2687
	-- amélioration de l'addon chatmondialserveur pour bien lire les link sur les canaux à distance des link de métier et de tous les autres link ( ajout d'un # à la fin des link qui complète les @@ )

--CMS 010022 du 20081023
	-- affiche correctement les links métier à distance( et vi, ca ne marchait pas encore bien :) )

--CMS 010021 du 20081021
	-- envoi correctement les links métier

--CMS 010020 du 20081020
	-- pour les liens d'objets, si le link d'1 enchant est buggé ( cad pas de titre, direct la liste des composants ) cms l'affiche sans changement en fonction de la langue du client ( cad si il trouve un saut de ligne ds le titre du lien )
	-- memes traitements pour les talents/sorts

--CMS 010019 du 20080416
	-- force l'affichage de tous les canaux à la première connexion depuis cms 19, après, vous pouvez les remasquer

--CMS 010018 du 20080411
	-- l'addon : SendChatMessageTimer est obligatoire ( pour gérer l'envoi d'un enreg que toutes les 1 sec ( à cause de la limite anti flood de blizzard )
	-- n'affiche plus le nom du métier pour les liens de craft sur les chats
	-- affiche ds la bonne langue les messages recu de cms, ( si l'objet est validé sur votre ordinateur )
	-- ajout d'un choix "ignorer ligne" ds le click droit sur un lien de joueur ds les chats ( avec l'addon CMS_antispam )
	-- ajout de l'addon facultatif CMS_antispam
-- CMS_antispam : version 00.00.01 du 20080411
	-- addon anti spam
	-- ajoute dans le click droit sur lien de joueur , le choix : Ignorer ligne
	-- met en minuscule la ligne, et enlève tous les espaces
	-- si cette ligne est revue, elle n'est plus affichée
	-- mémorise 30 minutes de chat pendant lesquelles vous pouvez ignorer certaines lignes
	-- si une ligne n'est jamais relue ( et donc masquée ) pendant un mois, elle sera enlevée des lignes masquées, si elles reviennent, vous devrez de nouveau les masquer
	-- fonctionne aussi pour l'addon : ChatMondialServeur
	-- aucun report pour spam n'est envoyé à blizzard, ces lignes ne sont justes pas affichées

--CMS 010017 du 20080329
	-- pret pour wow 2.4 ( fonctionne avec wow 2.3 )
	-- ajout des liens d'objets : quetes et talents
	-- valid sur votre ordi tous les objets/talents/quetes lus sur les canaux
	-- traduit ds votre langue tous les liens d'objets/talents/quetes lus sur les canaux

--CMS 010016 du 20080207
	-- amélioration de la connexion automatique au canal cms, au bout de 5 secondes après le dernier canal de discussion accédè à la connexion ou plus tard, si on est plus connecté à cms  ( sinon, vous pouvez faire /cmson ou /cmsoff )
	-- correction du nom de la région : "L'OEil du cyclone"

--CMS 010015 du 20080130
	-- amélioration pour savoir qui est connecté sur un canal et qui en est le lead ( celui qui enverra les messages lus des vrais canaux vers cms )
	-- amélioration de la gestion du débugage

--/6 @T0001frFR@Quidam@@@Gants de traqueur du ciel@6@31567:0:0:0:0:0:-5:3@@
--@T0001frFR@Le Maître du Monde@@@Clé de la porte du Temple Noir@6@27388:0:0:0:0:0:0:0@@

--@T0001frFR@Le Maître du Monde@@@Clé de la porte du Temple Noir@3@31925:2673:0:0:0:0:0:0@@

--CMS_cliquer = 1;	-- à mettre en -- pour une version pour internet
CMS_cliquer = 0;	-- à ne pas mettre en -- pour le débuggage

--	version 14	du 20070926
--		affichage des lien de listes d'ingrédients de craft affichés sur les canaux virtuels ds la bonne couleur

--/script ChatFrame_RemoveChannel(ChatFrame1, "cms");

----this is hook step
--	lOriginalChatFrame_OnEvent = ChatFrame_OnEvent;
--	ChatFrame_OnEvent = Demo_ChatFrame_OnEvent;

--function ChatFrame_RemoveChannel(chatFrame, channel)
--	for index, value in chatFrame.channelList do
--		if ( strupper(channel) == strupper(value) ) then
--			chatFrame.channelList[index] = nil;
--			chatFrame.zoneChannelList[index] = nil;
--		end
--	end
--	RemoveChatWindowChannel(chatFrame:GetID(), channel);
--end
--function ChatFrame_RemoveAllChannels(chatFrame)
--	chatFrame.channelList = {};
--	chatFrame.zoneChannelList = {};
--end
--function ChatFrame_OnEvent(event) 				à hooker

-- TraceFrame = ChatFrame#; # = 1 ou 2 ou 3 etc
--/script DEFAULT_CHAT_FRAME:SetMaxLines(100000)

--/script DEFAULT_CHAT_FRAME:SetMaxLines(1000000)

--	ChatMondialServeurRegionData = { nb = 2 };
--	ChatMondialServeurRegionData[0]           = { nb = 1 };
--	ChatMondialServeurRegionData[0][0]  = { index = 0, name = "Mondiaux" };
--	ChatMondialServeurRegionData[0][1]  = { index = 1, name = "Capitales" };
--	ChatMondialServeurRegionData[1]           = { nb = 21 };
--	ChatMondialServeurRegionData[1][0]  = { index = 0, name = "Kalimdor" };
--	ChatMondialServeurRegionData[1][1]  = { index = 1, name = "Ashenvale" };
--	ChatMondialServeurRegionData[1][2]  = { index = 2, name = "Azshara" };

--ChatMondialServeurLangue = {};
--ChatMondialServeurLangue[1] = "frFR";
--ChatMondialServeurLangue[2] = "enUS";
--ChatMondialServeurLangue[3] = "deDE";

-- sauvegarde des couleurs pour chaque canal
-- CMS_t_couleurs

--[[

CMS_t_couleurs = {
	["0012"] = {
		["r"] = 255,
		["g"] = 150,
		["b"] = 0,
		["on"] = 1,
	},
}

]]

--[[

CHAT_MSG_WHISPER 
Fired when a whisper is received from another player.
Arg1 = text sent.
Arg2 = player who sent whisper. 

CHAT_MSG_WHISPER_INFORM 
Fired when a whisper is sent to another player.
Arg1 = text sent.
Arg2 = player whisper sent to.
Arg3 = Language message was sent in (even though the other player, if of the same faction, can read the message regardless, and doesn't even see what language you sent it in).

]]

--local CMStabloCANAUX_chargement = 0;
--local CMScanauxserveurs_finchargement = 0;
--local CMS_surgriffon = 0;

--local CMStabloCANAUX;
----CMStabloCANAUX = { nb = 1 };
----CMStabloCANAUX["0000"]	= { nb = 1, joueur = { "fauvette" } };

--pour masquer les sends : ChatFrame_OnEvent(event)

local CMStablochannel = {};
local nCMStablochannel = 0;
-- CMStablochannel = {};
-- CMStablochannel = { nb = 2 }; faux
-- CMStablochannel[snumcanal] = { nbj = 0, time = 0, inum = i, joueur_s = {}, joueur_i = {} }; --

local CMS_joueur_serveur;
local CMS_joueur;
local CMS_joueur_GUID;
--CMS_whisper_dispo = 0;
--/script DEFAULT_CHAT_FRAME:AddMessage("CMS_whisper_dispo = "..CMS_whisper_dispo);
--/script DEFAULT_CHAT_FRAME:AddMessage("DBCS_whisper_dispo = "..DBCS_whisper_dispo);

--function AddonName_SendChatMessage(msg, system, language, channel)
--	--Your 'before' code here
--	SavedSendChatMessage(msg, system, language, channel);
--	--Your 'after' code here
--end
--local SavedSendChatMessage = SendChatMessage;
--SendChatMessage = AddonName_SendChatMessage;
--ChatFrame_OnEvent(event)
local Saved_CMS_ChatFrame_OnEvent = ChatFrame_OnEvent;
function CMS_ChatFrame_OnEvent(self,event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20)

local scode;
local snewtexte;
--local numcanal;
local smotclef;
local smessage;
local inumobjet;
local smotdebut;

	if ( event == "" ) then
	elseif ( event == "CHAT_MSG_CHANNEL" ) then
		if ( arg9 ) then
			if ( strlower(arg9) == CMS_NOMCANAL or arg9 == "CM" ) then
			else
					snewtexte = CMS_transformer_liens_en_liens_ds_langue(arg1,arg2);
					if ( arg1 == snewtexte ) then
					else
						arg1 = snewtexte;
					end
				--end
			end
		end
	elseif ( strsub(event,1,16) == "CHAT_MSG_WHISPER" ) then
		scode = strsub(arg1,1,4);
		if ( scode == "@CMS" or scode == "@CMC" ) then
			if ( CMS_debug == 1 ) then
				TraceFrame:AddMessage(event..","..arg1..","..arg2);
			end
			if ( event == "CHAT_MSG_WHISPER" ) then
				if ( scode == "@CMS" ) then
				else
					TraceFrame:AddMessage(arg1);
				end
				return nil;
			else	-- if ( event == "CHAT_MSG_WHISPER_INFORM" ) then
				return nil;
			end
		elseif ( strsub(arg1,1,7) == "@ADBCS@" ) then
			return nil;
		elseif ( strsub(arg1,1,6) == "@DBCS@" ) then
			return nil;
		end
		if ( event == "CHAT_MSG_WHISPER" ) then
			snewtexte = CMS_transformer_liens_en_liens_ds_langue(arg1,arg2);
			if ( arg1 == snewtexte ) then
			else
				arg1 = snewtexte;
			end
		end
	elseif ( event == "CHAT_MSG_GUILD" or event == "CHAT_MSG_OFFICER" or event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER" or event == "CHAT_MSG_SAY" or event == "CHAT_MSG_YELL" ) then
		snewtexte = CMS_transformer_liens_en_liens_ds_langue(arg1,arg2);
		if ( arg1 == snewtexte ) then
		else
			arg1 = snewtexte;
		end
	end
	Saved_CMS_ChatFrame_OnEvent(self,event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16,arg17,arg18,arg19,arg20);
end
ChatFrame_OnEvent = CMS_ChatFrame_OnEvent;

function CMS_ajoutercouleur(snumcanal,ir,ig,ib,sjoueur)

	local ibon = 1;

	if ( snumcanal ) then
	else
		if ( ir ) then
			if ( ig ) then
				if ( ib ) then
				else
					ibon =0;
				end
			else
				ibon = 0;
			end
		else
			ibon = 0;
		end
	end
	if ( ibon == 0 ) then
		TraceFrame:AddMessage("ChatMondialServeur : erreur : syntaxe pour ajouter ou modifier la couleur d'un canal :");
		TraceFrame:AddMessage("ChatMondialServeur : /cms COUL numcanal valeur_r valeur_g valeur_b");
		TraceFrame:AddMessage("ChatMondialServeur : /cms COUL 0012 255 210 150");
		return nil;
	end

	--if ( sjoueur ) then
	--else
	--	sjoueur = "0000";
	--end
	if ( CMS_t_couleurs ) then
	else
		CMS_t_couleurs = {};
	end
	--if ( CMS_t_couleurs[sjoueur] ) then
	--else
	--	CMS_t_couleurs[sjoueur] = {};
	--end
	--if ( CMS_t_couleurs[sjoueur][snumcanal] ) then
	--else
	--	CMS_t_couleurs[sjoueur][snumcanal] = { r = 1, g = 1, b = 1 };
	--end
	--CMS_t_couleurs[sjoueur][snumcanal].r = ir;
	--CMS_t_couleurs[sjoueur][snumcanal].g = ig;
	--CMS_t_couleurs[sjoueur][snumcanal].b = ib;
	if ( CMS_t_couleurs[snumcanal] ) then
	else
		CMS_t_couleurs[snumcanal] = { r = 1, g = 1, b = 1, on = 1 };
	end
	CMS_t_couleurs[snumcanal].r = ir;
	CMS_t_couleurs[snumcanal].g = ig;
	CMS_t_couleurs[snumcanal].b = ib;

end

function CMS_initialisation()

--	local i,j,k;
--	local snum;
--	local n;
--
--	CMStabloCANAUX = { nb = 0 };
--
--	for i = 0, ChatMondialServeurRegionData.nb do
--		for j = 1, ChatMondialServeurRegionData[i].nb do
--			for k = 1, ChatMondialServeurZoneData.nb do
--				snum = "";
----				snum = snum..i;
--				snum = snum..ChatMondialServeurRegionData[i].index;
----				n = j;
--				n = ChatMondialServeurRegionData[i][j].index;
--				if ( n < 10 ) then
--					snum = snum.."0"..n;
--				else
--					snum = snum..n;
--				end
----				snum = snum..k;
--				snum = snum..ChatMondialServeurZoneData[k].index;
--				CMStabloCANAUX.nb = CMStabloCANAUX.nb +1;
--				CMStabloCANAUX[snum] = { nb = 0, joueur = {} };
--			end
--		end
--	end
--
--	CMStabloCANAUX_chargement = 1;

	CMS_numcanalCMS = GetChannelName(CMS_NOMCANAL); -- , nchat
	if ( CMS_numcanalCMS and CMS_numcanalCMS > 0 ) then
		CMS_changerregion()
	end


local i,j,k;
local scanal;

	--if ( CMS_config.langue ) then
	--else
	--	CMS_config.langue = 1;
	--end
	--if ( CMS_config.stop ) then
	--else
	--	CMS_config.stop = 0;
	--	--CMS_canalvisible("SPE","CM");
	--	CMS_canalvisible("SPE","MOND");
	--end
	if ( CMS_config.stop2 ) then
	else
		CMS_config.stop2 = 0;
		--CMS_canalvisible("SPE","CM");
		CMS_canalvisible("ALL",1);
	end

--	"0001" "0002" "0004" "0012" "0014" "1041" "1121" "1191" "2171" "2121" "2221"
	scanal = "0001";
	SLASH_CMS_0001_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0001",msg);
	end
	scanal = "0002";
	SLASH_CMS_0002_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0002",msg);
	end
	scanal = "0003";
	SLASH_CMS_0003_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0003",msg);
	end
	scanal = "0004";
	SLASH_CMS_0004_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0004",msg);
	end
	scanal = "0005";
	SLASH_CMS_0005_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0005",msg);
	end
	scanal = "0011";
	SLASH_CMS_0011_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0011",msg);
	end
	scanal = "0012";
	SLASH_CMS_0012_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0012",msg);
	end
	SLASH_CMS_0013_1 = "/0013";
	scanal = "0014";
	SLASH_CMS_0014_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0014",msg);
	end
	scanal = "0015";
	SLASH_CMS_0015_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("0015",msg);
	end
	SLASH_CMS_0021_1 = "/0021";
	SLASH_CMS_0022_1 = "/0022";
	SLASH_CMS_0023_1 = "/0023";
	SLASH_CMS_0024_1 = "/0024";
	SLASH_CMS_0025_1 = "/0025";
	SLASH_CMS_0031_1 = "/0031";
	SLASH_CMS_0032_1 = "/0032";
	SLASH_CMS_0033_1 = "/0033";
	SLASH_CMS_0034_1 = "/0034";
	SLASH_CMS_0035_1 = "/0035";
	SLASH_CMS_0041_1 = "/0041";
	SLASH_CMS_0042_1 = "/0042";
	SLASH_CMS_0043_1 = "/0043";
	SLASH_CMS_0044_1 = "/0044";
	SLASH_CMS_0045_1 = "/0045";
	SLASH_CMS_0051_1 = "/0051";
	SLASH_CMS_0052_1 = "/0052";
	SLASH_CMS_0053_1 = "/0053";
	SLASH_CMS_0054_1 = "/0054";
	SLASH_CMS_0055_1 = "/0055";
	SLASH_CMS_0061_1 = "/0061";
	SLASH_CMS_0062_1 = "/0062";
	SLASH_CMS_0063_1 = "/0063";
	SLASH_CMS_0064_1 = "/0064";
	SLASH_CMS_0065_1 = "/0065";
	SLASH_CMS_0071_1 = "/0071";
	SLASH_CMS_0072_1 = "/0072";
	SLASH_CMS_0073_1 = "/0073";
	SLASH_CMS_0074_1 = "/0074";
	SLASH_CMS_0075_1 = "/0075";
	SLASH_CMS_0081_1 = "/0081";
	SLASH_CMS_0082_1 = "/0082";
	SLASH_CMS_0083_1 = "/0083";
	SLASH_CMS_0084_1 = "/0084";
	SLASH_CMS_0085_1 = "/0085";
	SLASH_CMS_0091_1 = "/0091";
	SLASH_CMS_0092_1 = "/0092";
	SLASH_CMS_0093_1 = "/0093";
	SLASH_CMS_0094_1 = "/0094";
	SLASH_CMS_0095_1 = "/0095";
	SLASH_CMS_0101_1 = "/0101";
	SLASH_CMS_0102_1 = "/0102";
	SLASH_CMS_0103_1 = "/0103";
	SLASH_CMS_0104_1 = "/0104";
	SLASH_CMS_0105_1 = "/0105";
	SLASH_CMS_0111_1 = "/0111";
	SLASH_CMS_0112_1 = "/0112";
	SLASH_CMS_0113_1 = "/0113";
	SLASH_CMS_0114_1 = "/0114";
	SLASH_CMS_0115_1 = "/0115";
	SLASH_CMS_0121_1 = "/0121";
	SLASH_CMS_0122_1 = "/0122";
	SLASH_CMS_0123_1 = "/0123";
	SLASH_CMS_0124_1 = "/0124";
	SLASH_CMS_0125_1 = "/0125";
	SLASH_CMS_0131_1 = "/0131";
	SLASH_CMS_0132_1 = "/0132";
	SLASH_CMS_0133_1 = "/0133";
	SLASH_CMS_0134_1 = "/0134";
	SLASH_CMS_0135_1 = "/0135";
	SLASH_CMS_0141_1 = "/0141";
	SLASH_CMS_0142_1 = "/0142";
	SLASH_CMS_0143_1 = "/0143";
	SLASH_CMS_0144_1 = "/0144";
	SLASH_CMS_0145_1 = "/0145";
	SLASH_CMS_0151_1 = "/0151";
	SLASH_CMS_0152_1 = "/0152";
	SLASH_CMS_0153_1 = "/0153";
	SLASH_CMS_0154_1 = "/0154";
	SLASH_CMS_0155_1 = "/0155";
	SLASH_CMS_0161_1 = "/0161";
	SLASH_CMS_0162_1 = "/0162";
	SLASH_CMS_0163_1 = "/0163";
	SLASH_CMS_0164_1 = "/0164";
	SLASH_CMS_0165_1 = "/0165";
	SLASH_CMS_0171_1 = "/0171";
	SLASH_CMS_0172_1 = "/0172";
	SLASH_CMS_0173_1 = "/0173";
	SLASH_CMS_0174_1 = "/0174";
	SLASH_CMS_0175_1 = "/0175";
	SLASH_CMS_0181_1 = "/0181";
	SLASH_CMS_0182_1 = "/0182";
	SLASH_CMS_0183_1 = "/0183";
	SLASH_CMS_0184_1 = "/0184";
	SLASH_CMS_0185_1 = "/0185";
	SLASH_CMS_0191_1 = "/0191";
	SLASH_CMS_0192_1 = "/0192";
	SLASH_CMS_0193_1 = "/0193";
	SLASH_CMS_0194_1 = "/0194";
	SLASH_CMS_0195_1 = "/0195";
	SLASH_CMS_0201_1 = "/0201";
	SLASH_CMS_0202_1 = "/0202";
	SLASH_CMS_0203_1 = "/0203";
	SLASH_CMS_0204_1 = "/0204";
	SLASH_CMS_0205_1 = "/0205";
	SLASH_CMS_0211_1 = "/0211";
	SLASH_CMS_0212_1 = "/0212";
	SLASH_CMS_0213_1 = "/0213";
	SLASH_CMS_0214_1 = "/0214";
	SLASH_CMS_0215_1 = "/0215";
	SLASH_CMS_0221_1 = "/0221";
	SLASH_CMS_0222_1 = "/0222";
	SLASH_CMS_0223_1 = "/0223";
	SLASH_CMS_0224_1 = "/0224";
	SLASH_CMS_0225_1 = "/0225";
	SLASH_CMS_0231_1 = "/0231";
	SLASH_CMS_0232_1 = "/0232";
	SLASH_CMS_0233_1 = "/0233";
	SLASH_CMS_0234_1 = "/0234";
	SLASH_CMS_0235_1 = "/0235";
	SLASH_CMS_0241_1 = "/0241";
	SLASH_CMS_0242_1 = "/0242";
	SLASH_CMS_0243_1 = "/0243";
	SLASH_CMS_0244_1 = "/0244";
	SLASH_CMS_0245_1 = "/0245";
	SLASH_CMS_0251_1 = "/0251";
	SLASH_CMS_0252_1 = "/0252";
	SLASH_CMS_0253_1 = "/0253";
	SLASH_CMS_0254_1 = "/0254";
	SLASH_CMS_0255_1 = "/0255";
	SLASH_CMS_0261_1 = "/0261";
	SLASH_CMS_0262_1 = "/0262";
	SLASH_CMS_0263_1 = "/0263";
	SLASH_CMS_0264_1 = "/0264";
	SLASH_CMS_0265_1 = "/0265";
	SLASH_CMS_0271_1 = "/0271";
	SLASH_CMS_0272_1 = "/0272";
	SLASH_CMS_0273_1 = "/0273";
	SLASH_CMS_0274_1 = "/0274";
	SLASH_CMS_0275_1 = "/0275";
	SLASH_CMS_0281_1 = "/0281";
	SLASH_CMS_0282_1 = "/0282";
	SLASH_CMS_0283_1 = "/0283";
	SLASH_CMS_0284_1 = "/0284";
	SLASH_CMS_0285_1 = "/0285";
	SLASH_CMS_0291_1 = "/0291";
	SLASH_CMS_0292_1 = "/0292";
	SLASH_CMS_0293_1 = "/0293";
	SLASH_CMS_0294_1 = "/0294";
	SLASH_CMS_0295_1 = "/0295";

	SLASH_CMS_1001_1 = "/1001";
	SLASH_CMS_1002_1 = "/1002";
	SLASH_CMS_1003_1 = "/1003";
	SLASH_CMS_1004_1 = "/1004";
	SLASH_CMS_1005_1 = "/1005";
	SLASH_CMS_1011_1 = "/1011";
	SLASH_CMS_1012_1 = "/1012";
	SLASH_CMS_1013_1 = "/1013";
	SLASH_CMS_1014_1 = "/1014";
	SLASH_CMS_1015_1 = "/1015";
	SLASH_CMS_1021_1 = "/1021";
	SLASH_CMS_1022_1 = "/1022";
	SLASH_CMS_1023_1 = "/1023";
	SLASH_CMS_1024_1 = "/1024";
	SLASH_CMS_1025_1 = "/1025";
	SLASH_CMS_1031_1 = "/1031";
	SLASH_CMS_1032_1 = "/1032";
	SLASH_CMS_1033_1 = "/1033";
	SLASH_CMS_1034_1 = "/1034";
	SLASH_CMS_1035_1 = "/1035";
	scanal = "1041";
	SLASH_CMS_1041_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("1041",msg);
	end
	SLASH_CMS_1042_1 = "/1042";
	SLASH_CMS_1043_1 = "/1043";
	SLASH_CMS_1044_1 = "/1044";
	SLASH_CMS_1045_1 = "/1045";
	SLASH_CMS_1051_1 = "/1051";
	SLASH_CMS_1052_1 = "/1052";
	SLASH_CMS_1053_1 = "/1053";
	SLASH_CMS_1054_1 = "/1054";
	SLASH_CMS_1055_1 = "/1055";
	SLASH_CMS_1061_1 = "/1061";
	SLASH_CMS_1062_1 = "/1062";
	SLASH_CMS_1063_1 = "/1063";
	SLASH_CMS_1064_1 = "/1064";
	SLASH_CMS_1065_1 = "/1065";
	SLASH_CMS_1071_1 = "/1071";
	SLASH_CMS_1072_1 = "/1072";
	SLASH_CMS_1073_1 = "/1073";
	SLASH_CMS_1074_1 = "/1074";
	SLASH_CMS_1075_1 = "/1075";
	SLASH_CMS_1081_1 = "/1081";
	SLASH_CMS_1082_1 = "/1082";
	SLASH_CMS_1083_1 = "/1083";
	SLASH_CMS_1084_1 = "/1084";
	SLASH_CMS_1085_1 = "/1085";
	SLASH_CMS_1091_1 = "/1091";
	SLASH_CMS_1092_1 = "/1092";
	SLASH_CMS_1093_1 = "/1093";
	SLASH_CMS_1094_1 = "/1094";
	SLASH_CMS_1095_1 = "/1095";
	SLASH_CMS_1101_1 = "/1101";
	SLASH_CMS_1102_1 = "/1102";
	SLASH_CMS_1103_1 = "/1103";
	SLASH_CMS_1104_1 = "/1104";
	SLASH_CMS_1105_1 = "/1105";
	SLASH_CMS_1111_1 = "/1111";
	SLASH_CMS_1112_1 = "/1112";
	SLASH_CMS_1113_1 = "/1113";
	SLASH_CMS_1114_1 = "/1114";
	SLASH_CMS_1115_1 = "/1115";
	scanal = "1121";
	SLASH_CMS_1121_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("1121",msg);
	end
	SLASH_CMS_1122_1 = "/1122";
	SLASH_CMS_1123_1 = "/1123";
	SLASH_CMS_1124_1 = "/1124";
	SLASH_CMS_1125_1 = "/1125";
	SLASH_CMS_1131_1 = "/1131";
	SLASH_CMS_1132_1 = "/1132";
	SLASH_CMS_1133_1 = "/1133";
	SLASH_CMS_1134_1 = "/1134";
	SLASH_CMS_1135_1 = "/1135";
	SLASH_CMS_1141_1 = "/1141";
	SLASH_CMS_1142_1 = "/1142";
	SLASH_CMS_1143_1 = "/1143";
	SLASH_CMS_1144_1 = "/1144";
	SLASH_CMS_1145_1 = "/1145";
	SLASH_CMS_1151_1 = "/1151";
	SLASH_CMS_1152_1 = "/1152";
	SLASH_CMS_1153_1 = "/1153";
	SLASH_CMS_1154_1 = "/1154";
	SLASH_CMS_1155_1 = "/1155";
	SLASH_CMS_1161_1 = "/1161";
	SLASH_CMS_1162_1 = "/1162";
	SLASH_CMS_1163_1 = "/1163";
	SLASH_CMS_1164_1 = "/1164";
	SLASH_CMS_1165_1 = "/1165";
	SLASH_CMS_1171_1 = "/1171";
	SLASH_CMS_1172_1 = "/1172";
	SLASH_CMS_1173_1 = "/1173";
	SLASH_CMS_1174_1 = "/1174";
	SLASH_CMS_1175_1 = "/1175";
	SLASH_CMS_1181_1 = "/1181";
	SLASH_CMS_1182_1 = "/1182";
	SLASH_CMS_1183_1 = "/1183";
	SLASH_CMS_1184_1 = "/1184";
	SLASH_CMS_1185_1 = "/1185";
	scanal = "1191";
	SLASH_CMS_1191_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("1191",msg);
	end
	SLASH_CMS_1192_1 = "/1192";
	SLASH_CMS_1193_1 = "/1193";
	SLASH_CMS_1194_1 = "/1194";
	SLASH_CMS_1195_1 = "/1195";
	SLASH_CMS_1201_1 = "/1201";
	SLASH_CMS_1202_1 = "/1202";
	SLASH_CMS_1203_1 = "/1203";
	SLASH_CMS_1204_1 = "/1204";
	SLASH_CMS_1205_1 = "/1205";
	SLASH_CMS_1211_1 = "/1211";
	SLASH_CMS_1212_1 = "/1212";
	SLASH_CMS_1213_1 = "/1213";
	SLASH_CMS_1214_1 = "/1214";
	SLASH_CMS_1215_1 = "/1215";

	SLASH_CMS_2001_1 = "/2001";
	SLASH_CMS_2002_1 = "/2002";
	SLASH_CMS_2003_1 = "/2003";
	SLASH_CMS_2004_1 = "/2004";
	SLASH_CMS_2005_1 = "/2005";
	SLASH_CMS_2011_1 = "/2011";
	SLASH_CMS_2012_1 = "/2012";
	SLASH_CMS_2013_1 = "/2013";
	SLASH_CMS_2014_1 = "/2014";
	SLASH_CMS_2015_1 = "/2015";
	SLASH_CMS_2021_1 = "/2021";
	SLASH_CMS_2022_1 = "/2022";
	SLASH_CMS_2023_1 = "/2023";
	SLASH_CMS_2024_1 = "/2024";
	SLASH_CMS_2025_1 = "/2025";
	SLASH_CMS_2031_1 = "/2031";
	SLASH_CMS_2032_1 = "/2032";
	SLASH_CMS_2033_1 = "/2033";
	SLASH_CMS_2034_1 = "/2034";
	SLASH_CMS_2035_1 = "/2035";
	SLASH_CMS_2041_1 = "/2041";
	SLASH_CMS_2042_1 = "/2042";
	SLASH_CMS_2043_1 = "/2043";
	SLASH_CMS_2044_1 = "/2044";
	SLASH_CMS_2045_1 = "/2045";
	SLASH_CMS_2051_1 = "/2051";
	SLASH_CMS_2052_1 = "/2052";
	SLASH_CMS_2053_1 = "/2053";
	SLASH_CMS_2054_1 = "/2054";
	SLASH_CMS_2055_1 = "/2055";
	SLASH_CMS_2061_1 = "/2061";
	SLASH_CMS_2062_1 = "/2062";
	SLASH_CMS_2063_1 = "/2063";
	SLASH_CMS_2064_1 = "/2064";
	SLASH_CMS_2065_1 = "/2065";
	SLASH_CMS_2071_1 = "/2071";
	SLASH_CMS_2072_1 = "/2072";
	SLASH_CMS_2073_1 = "/2073";
	SLASH_CMS_2074_1 = "/2074";
	SLASH_CMS_2075_1 = "/2075";
	SLASH_CMS_2081_1 = "/2081";
	SLASH_CMS_2082_1 = "/2082";
	SLASH_CMS_2083_1 = "/2083";
	SLASH_CMS_2084_1 = "/2084";
	SLASH_CMS_2085_1 = "/2085";
	SLASH_CMS_2091_1 = "/2091";
	SLASH_CMS_2092_1 = "/2092";
	SLASH_CMS_2093_1 = "/2093";
	SLASH_CMS_2094_1 = "/2094";
	SLASH_CMS_2095_1 = "/2095";
	SLASH_CMS_2101_1 = "/2101";
	SLASH_CMS_2102_1 = "/2102";
	SLASH_CMS_2103_1 = "/2103";
	SLASH_CMS_2104_1 = "/2104";
	SLASH_CMS_2105_1 = "/2105";
	SLASH_CMS_2111_1 = "/2111";
	SLASH_CMS_2112_1 = "/2112";
	SLASH_CMS_2113_1 = "/2113";
	SLASH_CMS_2114_1 = "/2114";
	SLASH_CMS_2115_1 = "/2115";
	scanal = "2121";
	SLASH_CMS_2121_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("2121",msg);
	end
	SLASH_CMS_2122_1 = "/2122";
	SLASH_CMS_2123_1 = "/2123";
	SLASH_CMS_2124_1 = "/2124";
	SLASH_CMS_2125_1 = "/2125";
	SLASH_CMS_2131_1 = "/2131";
	SLASH_CMS_2132_1 = "/2132";
	SLASH_CMS_2133_1 = "/2133";
	SLASH_CMS_2134_1 = "/2134";
	SLASH_CMS_2135_1 = "/2135";
	SLASH_CMS_2141_1 = "/2141";
	SLASH_CMS_2142_1 = "/2142";
	SLASH_CMS_2143_1 = "/2143";
	SLASH_CMS_2144_1 = "/2144";
	SLASH_CMS_2145_1 = "/2145";
	SLASH_CMS_2151_1 = "/2151";
	SLASH_CMS_2152_1 = "/2152";
	SLASH_CMS_2153_1 = "/2153";
	SLASH_CMS_2154_1 = "/2154";
	SLASH_CMS_2155_1 = "/2155";
	SLASH_CMS_2161_1 = "/2161";
	SLASH_CMS_2162_1 = "/2162";
	SLASH_CMS_2163_1 = "/2163";
	SLASH_CMS_2164_1 = "/2164";
	SLASH_CMS_2165_1 = "/2165";
	scanal = "2171";
	SLASH_CMS_2171_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("2171",msg);
	end
	SLASH_CMS_2172_1 = "/2172";
	SLASH_CMS_2173_1 = "/2173";
	SLASH_CMS_2174_1 = "/2174";
	SLASH_CMS_2175_1 = "/2175";
	SLASH_CMS_2181_1 = "/2181";
	SLASH_CMS_2182_1 = "/2182";
	SLASH_CMS_2183_1 = "/2183";
	SLASH_CMS_2184_1 = "/2184";
	SLASH_CMS_2185_1 = "/2185";
	SLASH_CMS_2191_1 = "/2191";
	SLASH_CMS_2192_1 = "/2192";
	SLASH_CMS_2193_1 = "/2193";
	SLASH_CMS_2194_1 = "/2194";
	SLASH_CMS_2195_1 = "/2195";
	SLASH_CMS_2201_1 = "/2201";
	SLASH_CMS_2202_1 = "/2202";
	SLASH_CMS_2203_1 = "/2203";
	SLASH_CMS_2204_1 = "/2204";
	SLASH_CMS_2205_1 = "/2205";
	SLASH_CMS_2211_1 = "/2211";
	SLASH_CMS_2212_1 = "/2212";
	SLASH_CMS_2213_1 = "/2213";
	SLASH_CMS_2214_1 = "/2214";
	SLASH_CMS_2215_1 = "/2215";
	SLASH_CMS_2221_1 = "/2221";
	scanal = "2221";
	SLASH_CMS_2221_1 = "/"..scanal;
	SlashCmdList["CMS_"..scanal.."_"] = function(msg)
		ChatMondialServeur_SlashCommandHandler("2221",msg);
	end
	SLASH_CMS_2222_1 = "/2222";
	SLASH_CMS_2223_1 = "/2223";
	SLASH_CMS_2224_1 = "/2224";
	SLASH_CMS_2225_1 = "/2225";
	SLASH_CMS_2231_1 = "/2231";
	SLASH_CMS_2232_1 = "/2232";
	SLASH_CMS_2233_1 = "/2233";
	SLASH_CMS_2234_1 = "/2234";
	SLASH_CMS_2235_1 = "/2235";
	SLASH_CMS_2241_1 = "/2241";
	SLASH_CMS_2242_1 = "/2242";
	SLASH_CMS_2243_1 = "/2243";
	SLASH_CMS_2244_1 = "/2244";
	SLASH_CMS_2245_1 = "/2245";
	SLASH_CMS_2251_1 = "/2251";
	SLASH_CMS_2252_1 = "/2252";
	SLASH_CMS_2253_1 = "/2253";
	SLASH_CMS_2254_1 = "/2254";
	SLASH_CMS_2255_1 = "/2255";

--	for i = 0, ChatMondialServeurRegionData.nb do
--		for j = 0, ChatMondialServeurRegionData[i].nb do
--			for k = 1, ChatMondialServeurZoneData.nb do
--				scanal = ""..i;
--				if ( j < 10 ) then
--					scanal = scanal.."0";
--				end
--				scanal = scanal..j;
--				scanal = scanal..k;
--				SlashCmdList["CMS_"..scanal.."_"] = function(msg)
--					ChatMondialServeur_SlashCommandHandler(scanal,msg);
--				end
--			end
--		end
--	end

--	SLASH_CHATMONDIALSERVEUR1 = "/chatmondialserveur";
--	SLASH_CHATMONDIALSERVEUR2 = "/cms";
--	SlashCmdList["CHATMONDIALSERVEUR"] = function(msg)
--		ChatMondialServeur_SlashCommandHandler(-1,msg);
--	end
	
end

function CMS_canalvisible(numcanal,visible)

	local i,j,k;
	local snumcanal;
	local scontinent;
	local sregion;
	local szone;

--TraceFrame:AddMessage("numcanal : -"..numcanal.."-");

	if ( numcanal == "ALL" ) then
		--DBCS_Region_liste
		for i = 0, table.getn(DBCS_Region_liste) do
			for j = 1, table.getn(DBCS_Region_liste[i]) do
				for k = 1, ChatMondialServeurZoneData.nb do
					szone = ""..k;
					snumcanal = (DBCS_Region_liste[i][j].sval)..szone;
					if ( CMS_t_couleurs[snumcanal] ) then
					else
						CMS_t_couleurs[snumcanal] = {};
					end
					CMS_t_couleurs[snumcanal].on = visible;
				end
			end
		end
--[[
		for i = 0, ChatMondialServeurRegionData.nb do
			scontinent = ""..i;
			for j = 0, ChatMondialServeurRegionData[i].nb do
				if ( ChatMondialServeurRegionData[i][j].index < 10 ) then
					sregion = "0";
				else
					sregion = "";
				end
				sregion = sregion..ChatMondialServeurRegionData[i][j].index
				for k = 1, ChatMondialServeurZoneData.nb do
					szone = ""..k;
					snumcanal = scontinent..sregion..szone;
					if ( CMS_t_couleurs[snumcanal] ) then
					else
						CMS_t_couleurs[snumcanal] = {};
					end
--					if ( snumcanal == "0012" or snumcanal == "0014" or snumcanal == "2121" ) then
--						CMS_t_couleurs[snumcanal].on = 1;
--					else
						CMS_t_couleurs[snumcanal].on = visible;
--					end
				end
			end
		end
--]]
	elseif ( numcanal == "SPE" ) then
--		TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI SPE CAPI ( voir que les canaux des capitales : general commerce et recherchegroupe 0012 0014 1041 1121 1191 2171 2121 2221 )");
--		TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI SPE MOND ( voir que les canaux mondiaux : general0001 commerce0002 et recherchegroupe0004 )");
--		TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI SPE CM ( voir que les canaux des capitales et mondiaux : general commerce et recherchegroupe )");
--TraceFrame:AddMessage("-"..visible.."-");
		for i = 0, ChatMondialServeurRegionData.nb do
			scontinent = ""..i;
			for j = 0, ChatMondialServeurRegionData[i].nb do
				if ( ChatMondialServeurRegionData[i][j].index < 10 ) then
					sregion = "0";
				else
					sregion = "";
				end
				sregion = sregion..ChatMondialServeurRegionData[i][j].index
				for k = 1, ChatMondialServeurZoneData.nb do
					szone = ""..k;
					snumcanal = scontinent..sregion..szone;
					if ( CMS_t_couleurs[snumcanal] ) then
					else
						CMS_t_couleurs[snumcanal] = {};
					end
					CMS_t_couleurs[snumcanal].on = 0;
					if ( visible == "CAPI" ) then
						if ( snumcanal == "0012" or snumcanal == "0014" or snumcanal == "1041" or snumcanal == "1121" or snumcanal == "1191" or snumcanal == "2171" or snumcanal == "2121" or snumcanal == "2221" or snumcanal == "1251" or snumcanal == "2301" or snumcanal == "3071" ) then
							CMS_t_couleurs[snumcanal].on = 1;
						end
					elseif ( visible == "MOND" ) then
						if ( snumcanal == "0001" or snumcanal == "0002" or snumcanal == "0004" ) then
							CMS_t_couleurs[snumcanal].on = 1;
						end
					elseif ( visible == "CM" ) then
						if ( snumcanal == "0001" or snumcanal == "0002" or snumcanal == "0004" or snumcanal == "0012" or snumcanal == "0014" or snumcanal == "1041" or snumcanal == "1121" or snumcanal == "1191" or snumcanal == "2171" or snumcanal == "2121" or snumcanal == "2221" or snumcanal == "1251" or snumcanal == "2301" or snumcanal == "3071" ) then
							CMS_t_couleurs[snumcanal].on = 1;
						end
					end
				end
			end
		end
	else
--TraceFrame:AddMessage("modif 1 seul canal");
		if ( CMS_nomcanalbynum(numcanal) ) then
--TraceFrame:AddMessage("le canal existe ds la sauvegarde");
			if ( visible ) then
				CMS_t_couleurs[numcanal].on = visible;
			else
				if ( CMS_t_couleurs[numcanal] ) then
					if ( CMS_t_couleurs[numcanal].on ) then
					else
--						if ( numcanal == "0012" or numcanal == "0014" or numcanal == "2121" ) then
--							CMS_t_couleurs[numcanal].on = 1;
--						else
							CMS_t_couleurs[numcanal].on = 0;
--						end
					end
				else
					CMS_t_couleurs[numcanal] = { on = 0 };
				end
				CMS_t_couleurs[numcanal].on = 1 - CMS_t_couleurs[numcanal].on;
			end
		end
	end

end

function ChatMondialServeur_SlashCommandHandler(typenumcanal,msg)

	local snumcanal;
	local snomcanal;
	local icontinent, iregion, izone;
	local scontinent, sregion, szone;
	local ibadcanal;
	local smessage;
	local sarg1;
	local sarg2;
	local scoul;
	local scouls;
	local scoulr, scoulg, scoulb;
	local i;
	local j;
	local k;
	local sON;
	local numcanal;
	local sflags;
	local imax;
	local snumregion;

--TraceFrame:AddMessage(msg);

	ibadcanal = 0;
	if ( msg ) then
		if ( CMS_numcanalCMS == 0 ) then
			JoinChannelByName(CMS_NOMCANAL);
			CMS_numcanalCMS = GetChannelName(CMS_NOMCANAL); -- , nchat 
--			RemoveChatWindowChannel(DEFAULT_CHAT_FRAME, CMS_NOMCANAL);
		end
		if ( strlen(msg) > 5 or not ( typenumcanal == -1 ) ) then
			if ( typenumcanal == -1 ) then
				sarg1 = strsub(msg,1,4);
				sarg2 = strsub(msg,5,5);
			else
				sarg1 = typenumcanal;
				sarg2 = " ";
			end
--TraceFrame:AddMessage("sarg2 : -"..sarg2.."-");
			if ( sarg2 == nil or sarg2 == "" ) then
			elseif ( strsub(msg,5,5) == " " or not ( typenumcanal == -1 ) ) then
				if ( sarg1 == "COUL" ) then
					scouls = strsub(msg,6);
--TraceFrame:AddMessage("scouls : "..scouls);
					snumcanal = "";
					scoulr = "";
					scoulg = "";
					scoulb = "";
					j = 1;
					scoul = ""
					for i = 1, strlen(scouls) do
						if ( strsub(scouls, i, i) == " " ) then
							if ( strlen(scoul) > 0 ) then
								if ( j ==1 ) then
									snumcanal = scoul;
								elseif ( j ==2 ) then
									scoulr = scoul;
								elseif ( j ==3 ) then
									scoulg = scoul;
								elseif ( j ==4 ) then
									scoulb = scoul;
								else
								end
								scoul = "";
								j = j + 1;
							else
							end
						else
							scoul = scoul..strsub(scouls,i,i);
						end
					end
					if ( j ==1 ) then
						snumcanal = scoul;
					elseif ( j ==2 ) then
						scoulr = scoul;
					elseif ( j ==3 ) then
						scoulg = scoul;
					elseif ( j ==4 ) then
						scoulb = scoul;
					else
					end
--TraceFrame:AddMessage("snumcanal : "..snumcanal.." scoulr : "..scoulr.." scoulg : "..scoulg.." scoulb : "..scoulb);
					if ( snumcanal == "" or scoulr == ""  or scoulg == "" or scoulb == "") then
						CMS_ajoutercouleur();
					else
						CMS_ajoutercouleur(snumcanal,tonumber(scoulr),tonumber(scoulg),tonumber(scoulb),CMS_joueur);
					end
				elseif ( sarg1 == "VISI" ) then
					numcanal = strsub(msg,6,9);
					if ( strsub(numcanal,1,3) == "ALL" ) then
--TraceFrame:AddMessage("msg = -"..msg.."-");
						sON = strsub(msg,10,11);
--TraceFrame:AddMessage("sON = -"..sON.."-");
						if ( sON == "ON" ) then
							-- tout mettre à ON = 1;
--TraceFrame:AddMessage("appel canal visible all ON");
							CMS_canalvisible("ALL",1);
						else
--TraceFrame:AddMessage("appel canal visible all OFF");
							-- tout mettre à OFF = 0;
							CMS_canalvisible("ALL",0);
						end
					elseif ( strsub(numcanal,1,3) == "SPE" ) then
						CMS_canalvisible("SPE",strsub(msg,10));
					else
						if ( CMS_nomcanalbynum(numcanal) ) then
							CMS_canalvisible(numcanal);
						end
					end
				--elseif ( sarg1 == "LANG" ) then
				--	sON = strsub(msg,6,7);
				--	if ( sON == "ON" ) then
				--		CMS_config.langue = 1;
				--	else
				--		CMS_config.langue = 0;
				--	end
				elseif ( sarg1 == "MODE" ) then
					sON = strsub(msg,6,7);
					if ( sON == "ON" ) then
						CMS_config.stop = 0;
--						if ( CMS_numcanalCMS == 0 ) then
							TraceFrame:AddMessage("Vous vous connectez au canal de chatmondialserveur.");
							JoinChannelByName(CMS_NOMCANAL);
							CMS_numcanalCMS = GetChannelName(CMS_NOMCANAL); -- , nchat 
--							RemoveChatWindowChannel(DEFAULT_CHAT_FRAME, CMS_NOMCANAL);
--/script RemoveChatWindowChannel(DEFAULT_CHAT_FRAME, "cms");
--/script RemoveChatWindowChannel(0, "cms");
--/script RemoveChatWindowChannel(1, "cms");
--						end
					elseif ( sON == "OF" ) then
						CMS_config.stop = 1;
						LeaveChannelByName(CMS_NOMCANAL);
						TraceFrame:AddMessage("Vous quittez le canal de chatmondialserveur.");
						CMS_numcanalCMS = 0;
					else
					end
				elseif ( sarg1 == "LIST" ) then
					if ( strsub(msg,6) == "QUI" ) then
						CMS_SendChatMessage("@LQ","CHANNEL",CMS_language,CMS_numcanalCMS);
					else
						--DBCS_Region_liste;
						--for i = 0, ChatMondialServeurRegionData.nb do
						for i = 0, table.getn(DBCS_Region_liste) do
							--scontinent = ""..i;
							--for j = 0, ChatMondialServeurRegionData[i].nb do
							for j = 1, table.getn(DBCS_Region_liste[i]) do
								--if ( ChatMondialServeurRegionData[i][j].index < 10 ) then
								--	sregion = "0";
								--else
								--	sregion = "";
								--end
								--sregion = sregion..ChatMondialServeurRegionData[i][j].index
								sregion = DBCS_Region_liste[i][j].sval;
								for k = 1, ChatMondialServeurZoneData.nb do
									szone = ""..k;
									--snumcanal = scontinent..sregion..szone;
									snumcanal = sregion..szone;
									sflags = ""
									if ( CMS_t_couleurs[snumcanal] ) then
										if ( CMS_t_couleurs[snumcanal].on ) then
											if ( CMS_t_couleurs[snumcanal].on == 1 ) then
												sflags = sflags.."ON ";
											else
												sflags = sflags.."OFF";
											end
										else
											if ( snumcanal == "0012" or snumcanal == "0014" or snumcanal == "2121" ) then
												sflags = sflags.."ON ";
											else
												sflags = sflags.."OFF";
											end
										end
										sflags = sflags.." ";
										if ( CMS_t_couleurs[snumcanal].r and CMS_t_couleurs[snumcanal].g and CMS_t_couleurs[snumcanal].b ) then
											sflags = sflags..CMS_t_couleurs[snumcanal].r.." ";
											sflags = sflags..CMS_t_couleurs[snumcanal].g.." ";
											sflags = sflags..CMS_t_couleurs[snumcanal].b.." ";
										else
											sflags = sflags.."255 192 192 ";
										end
									else
										if ( snumcanal == "0012" or snumcanal == "0014" or snumcanal == "2121" ) then
											sflags = sflags.."ON ";
										else
											sflags = sflags.."OFF";
										end
										sflags = sflags.." 255 192 192";
									end
									--snomcanal = ChatMondialServeurZoneData[k].name.." - "..ChatMondialServeurRegionData[i][j].name;
									snomcanal = ChatMondialServeurZoneData[k].name.." - "..DBCS_Region_nom_region(sregion);
									TraceFrame:AddMessage(snumcanal.." : "..sflags.." -"..snomcanal.."-");
								end
							end
						end
					end
				elseif ( sarg1 == "TABL" ) then
				elseif ( sarg1 == "TEST" ) then
					if ( CMS_cliquer == 0 ) then
--local r,g,b,hex = GetItemQualityColor(6);
--if ( r ) then
--DEFAULT_CHAT_FRAME:AddMessage(r*255);
--DEFAULT_CHAT_FRAME:AddMessage(g*255);
--DEFAULT_CHAT_FRAME:AddMessage(b*255);
--DEFAULT_CHAT_FRAME:AddMessage(hex);
----/script DEFAULT_CHAT_FRAME:AddMessage(
--end
						CMS_cliquer = 1;
--						TraceFrame:AddMessage("060 : \195\060");
--						TraceFrame:AddMessage("070 : \195\070");
--						TraceFrame:AddMessage("080 : \195\080");
--						TraceFrame:AddMessage("090 : \195\090");
--						TraceFrame:AddMessage("100 : \195\100");
--						TraceFrame:AddMessage("110 : \195\110");
--						TraceFrame:AddMessage("120 : \195\120");
--						TraceFrame:AddMessage("130 : \195\130");
--						TraceFrame:AddMessage("140 : \195\140");
--						TraceFrame:AddMessage("150 : \195\150");
--						TraceFrame:AddMessage("190 : \195\190");
--						TraceFrame:AddMessage("200 : \195\200");
--						TraceFrame:AddMessage("210 : \195\210");
--						TraceFrame:AddMessage("220 : \195\220");
--						TraceFrame:AddMessage("230 : \195\230");
--						TraceFrame:AddMessage("240 : \195\240");
--						TraceFrame:AddMessage("250 : \195\250");
--						TraceFrame:AddMessage("255 : \195\255");
						--for i = 150, 190 do
						--	TraceFrame:AddMessage(i.." : \195\"..i);
						--end
					else
						CMS_cliquer = 0;
					end
				else
					ibadcanal = 1;
					snumcanal = strsub(sarg1,1,4);
					snumregion = strsub(sarg1,1,3);
					if ( snumregion == DBCS_Region_nom_region(snumregion) ) then
					else
						ibadcanal = 0;
						if ( typenumcanal == -1 ) then
							smessage = strsub(msg,6);
						else
							smessage = msg;
						end
						if ( CMStablochannel[snumcanal] ) then
							SendChatMessage(smessage,"CHANNEL",CMS_language,CMStablochannel[snumcanal].inum);
						else
							smessage = CMS_transformerliensenobjets(smessage,false);
							if ( strlen(smessage) > CMS_v_phrase_nb_max_carac ) then
								imax = CMS_numcharvalidmax(smessage,CMS_v_phrase_nb_max_carac);
								CMS_SendChatMessage("@T"..snumcanal..CMS_versionclientwow.."@"..CMS_joueur_GUID.."@"..strsub(smessage,1,imax),"CHANNEL",CMS_language,CMS_numcanalCMS);
								CMS_SendChatMessage("@T"..snumcanal..CMS_versionclientwow.."@"..CMS_joueur_GUID.."@"..strsub(smessage,imax+1),"CHANNEL",CMS_language,CMS_numcanalCMS);
							else
								CMS_SendChatMessage("@T"..snumcanal..CMS_versionclientwow.."@"..CMS_joueur_GUID.."@"..smessage,"CHANNEL",CMS_language,CMS_numcanalCMS);
							end
						end
						return nil;
					end
--[[
					icontinent = tonumber(strsub(sarg1,1,1));
					if ( icontinent ) then
						if ( icontinent > -1 and icontinent <= ChatMondialServeurRegionData.nb ) then
							iregion = tonumber(strsub(sarg1,2,3));
							if ( iregion ) then
								if ( iregion > -1 and iregion <= ChatMondialServeurRegionData[icontinent].nb ) then
									izone = tonumber(strsub(sarg1,4,4));
									if ( izone ) then
										if ( izone > 0 and izone <= ChatMondialServeurZoneData.nb ) then
											ibadcanal = 0;
											-- envoyer ce message
											--if ( CMScanauxserveurs_finchargement == 0 ) then
											--	JoinChannelByName(CMS_NOMCANAL);
											--	CMS_changerregion();
											--end
											if ( typenumcanal == -1 ) then
												smessage = strsub(msg,6);
											else
												smessage = msg;
											end
											if ( CMStablochannel[snumcanal] ) then
												--TraceFrame:AddMessage(smessage);
												SendChatMessage(smessage,"CHANNEL",CMS_language,CMStablochannel[snumcanal].inum);
											else
			--CMS_affichermessage(snumcanal,nomcanal,CMS_lienjoueurbynom(CMS_joueur),smessage);
												smessage = CMS_transformerliensenobjets(smessage,false);
												if ( strlen(smessage) > CMS_v_phrase_nb_max_carac ) then
													imax = CMS_numcharvalidmax(smessage,CMS_v_phrase_nb_max_carac);
													CMS_SendChatMessage("@T"..snumcanal..CMS_versionclientwow.."@"..CMS_joueur_GUID.."@"..strsub(smessage,1,imax),"CHANNEL",CMS_language,CMS_numcanalCMS);
													CMS_SendChatMessage("@T"..snumcanal..CMS_versionclientwow.."@"..CMS_joueur_GUID.."@"..strsub(smessage,imax+1),"CHANNEL",CMS_language,CMS_numcanalCMS);
												else
													CMS_SendChatMessage("@T"..snumcanal..CMS_versionclientwow.."@"..CMS_joueur_GUID.."@"..smessage,"CHANNEL",CMS_language,CMS_numcanalCMS);
												end
											end
											return nil;
										else
										end
									else
									end
								else
								end
							else
							end
						else
						end
					else
					end
--]]
					if ( ibadcanal == 1 ) then
						TraceFrame:AddMessage("ChatMondialServeur : num\195\169ro de canal inexistant : "..snumcanal);
					else
						TraceFrame:AddMessage("ChatMondialServeur : usage : /cms numcanal message");
					end
				end

			else
			end
		else
			TraceFrame:AddMessage("ChatMondialServeur : version : "..CMS_VERSION1.."."..CMS_VERSION2.."."..CMS_VERSION3);
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms numcanal message");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms 0012 blabla");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms COUL numcanal valeur_rouge valeur_vert valeur_bleu");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms COUL 0012 255 210 150");
			TraceFrame:AddMessage("ChatMondialServeur : usage : rendre visible ou non , un ou tous les canaux");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI ALL ON");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI ALL OFF");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI 0012");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI SPE CAPI ( voir que les canaux des capitales : general commerce et recherchegroupe 0012 0014 1041 1121 1191 2171 2121 2221 )");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI SPE MOND ( voir que les canaux mondiaux : general0001 commerce0002 et recherchegroupe0004 )");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms VISI SPE CM ( voir que les canaux des capitales et mondiaux : general commerce et recherchegroupe )");
			--TraceFrame:AddMessage("ChatMondialServeur : usage : /cms LANG ON ( gestion du multilangue ) ");
			--TraceFrame:AddMessage("ChatMondialServeur : usage : /cms LANG OFF ( sans gestion du multilangue ) choisir cette option post 1.10 ");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms LIST all ( liste tous les canaux existants )");
			--TraceFrame:AddMessage("ChatMondialServeur : usage : attention, avec la commande LIST , ajouter 2 espaces apr\195\168s LIST");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms LIST QUI ( liste tous les canaux que l'on ecoute grace aux connectes )");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms MODE ON ( idem que /cmson )");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms MODE OFF ( idem que /cmsoff )");
--			TraceFrame:AddMessage("ChatMondialServeur : usage : /cms MODE OFF ALL ( idem que /cmsoffall )");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cmson ( enclenche cms )");
			TraceFrame:AddMessage("ChatMondialServeur : usage : /cmsoff ( stop cms )");
--			TraceFrame:AddMessage("ChatMondialServeur : usage : /cmsoffall ( stop cms avec suppression du canal )");
--			TraceFrame:AddMessage("ChatMondialServeur : usage : /cmsoff ALL ( idem que /cmsoffall )");
--			"0001" "0002" "0004" "0012" "0014" "1041" "1121" "1191" "2171" "2121" "2221"
			TraceFrame:AddMessage("Vous pouvez aussi utiliser la commande /numerodecanal blabla");
			TraceFrame:AddMessage("seulement pour les canaux : 0012 0014 1041 1121 1191 2171 2121 2221 ");
			TraceFrame:AddMessage("exemple /0012 je vends pleins de trucs ( pour vendre ce que vous voulez sur le canal commerce - capitales");
			TraceFrame:AddMessage("il existe aussi des canaux que pour cms , 0001 0002 0004");
			TraceFrame:AddMessage("pour parler sur les canaux : general - mondial ou commerce - mondial ou recherchegroupe - mondial");
			TraceFrame:AddMessage("avec les commandes : /cms 0001 blabla ou /cms 0002 je vends ou /cms 0004 je cherche 1 groupe");
		end
	else
	end

--	if ( ibadcanal == 1 ) then
--		TraceFrame:AddMessage("ChatMondialServeur : num\195\169ro de canal inexistant : "..snumcanal);
--	else
--		TraceFrame:AddMessage("ChatMondialServeur : usage : /cms numcanal message");
--	end

--	local command;

--	if ( not msg or msg == "" ) then
--	else
----		command = string.lower(msg);
--		command = msg;
--		if ( command == "" ) then
--		elseif ( command == "" ) then
--		elseif ( command == "" or command == "" ) then
--		else
--		end
--	end
	
end

function ChatMondialServeur_OnLoad(self)

	--if ( CMS_wow_build > CMS_wow_build_live ) then
		RegisterAddonMessagePrefix("CMS");
	--end

--	self:RegisterEvent("CHAT_MSG");
	self:RegisterEvent("CHAT_MSG_ADDON");
	self:RegisterEvent("CHAT_MSG_CHANNEL");
	self:RegisterEvent("CHAT_MSG_CHANNEL_JOIN");
	self:RegisterEvent("CHAT_MSG_CHANNEL_LEAVE");
--	self:RegisterEvent("CHAT_MSG_CHANNEL_LIST");
	self:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE");
--	self:RegisterEvent("CHAT_MSG_CHANNEL_NOTICE_USER");
--if ( CMS_debug > 0 ) then
--CHAT_MSG_GUILD
--CHAT_MSG_PARTY
--CHAT_MSG_RAID
--CHAT_MSG_RAID_LEADER
	self:RegisterEvent("CHAT_MSG_GUILD");
	self:RegisterEvent("CHAT_MSG_OFFICER");
	self:RegisterEvent("CHAT_MSG_PARTY");
	self:RegisterEvent("CHAT_MSG_RAID");
	self:RegisterEvent("CHAT_MSG_RAID_LEADER");
	self:RegisterEvent("CHAT_MSG_SAY");
	self:RegisterEvent("CHAT_MSG_YELL");
--end
--	self:RegisterEvent("CHAT_MSG_COMBAT_HOSTILE_DEATH");
--	self:RegisterEvent("CHAT_MSG_LOOT");
--	self:RegisterEvent("CHAT_MSG_SYSTEM");
	self:RegisterEvent("CHAT_MSG_WHISPER"); 		-- recu
--	self:RegisterEvent("CHAT_MSG_WHISPER_INFORM");	-- envoyé
--	self:RegisterEvent("CVAR_UPDATE");
--	self:RegisterEvent("EXECUTE_CHAT_LINE");
--	self:RegisterEvent("INSTANCE_BOOT_START");
--	self:RegisterEvent("INSTANCE_BOOT_STOP");
--	self:RegisterEvent("ITEM_PUSH");
--	self:RegisterEvent("LOOT_SLOT_CLEARED");
--	self:RegisterEvent("PLAYTIME_CHANGED");
	self:RegisterEvent("PLAYER_ENTERING_WORLD");
	self:RegisterEvent("PLAYER_LEAVING_WORLD");
--	self:RegisterEvent("PLAYER_LOGIN");
--	self:RegisterEvent("PLAYER_LOGOUT");
--	self:RegisterEvent("SYSMSG");
--	self:RegisterEvent("TAXIMAP_CLOSED");
--	self:RegisterEvent("UI_ERROR_MESSAGE");
--	self:RegisterEvent("UI_INFO_MESSAGE");
--	self:RegisterEvent("UNIT_PORTRAIT_UPDATE");
--	self:RegisterEvent("UNIT_NAME_UPDATE");
--	self:RegisterEvent("UPDATE_CHAT_WINDOWS");
--	self:RegisterEvent("UPDATE_MOUSEOVER_UNIT");
	self:RegisterEvent("VARIABLES_LOADED");
--	self:RegisterEvent("ZONE_CHANGED");
--	self:RegisterEvent("ZONE_CHANGED_INDOORS");
--	self:RegisterEvent("ZONE_CHANGED_NEW_AREA");

-- Register our slash command
	SLASH_CHATMONDIALSERVEUR1 = "/chatmondialserveur";
	SLASH_CHATMONDIALSERVEUR2 = "/cms";
	SlashCmdList["CHATMONDIALSERVEUR"] = function(msg)
		ChatMondialServeur_SlashCommandHandler(-1,msg);
	end
	SLASH_CMSON1 = "/cmson";
	SlashCmdList["CMSON"] = function(msg)
		CMS_baffichermessagescanaux = 1;
		ChatMondialServeur_SlashCommandHandler(-1,"MODE ON "..msg);
	end
	SLASH_CMSOFF1 = "/cmsoff";
	SlashCmdList["CMSOFF"] = function(msg)
		CMS_baffichermessagescanaux = 0;
		--ChatMondialServeur_SlashCommandHandler(-1,"MODE OFF "..msg);
	end
--	SLASH_CMSOFFALL1 = "/cmsoffall";
--	SlashCmdList["CMSOFFALL"] = function(msg)
--		ChatMondialServeur_SlashCommandHandler(-1,"MODE OFF ALL"..msg);
--	end

	CMS_t_couleurs = {};
	CMS_config = {};
	
	CMS_language = GetDefaultLanguage();

end

function CMS_liresend(message,semetteur)
-- message = @CMSxxyyzznnnn@joueur1@joueur2@.....@joueurn@

	local ideb,ifin;
	local snum;
	local snom;
	local sversion;

--CMS_VERSION1 = "00";
--CMS_VERSION2 = "00";
--CMS_VERSION3 = "02";

	--if ( strlen(message) < 
	ideb = 5;
	sversion = strsub(message,ideb,ideb+5);
	if ( tonumber(CMS_VERSION1..CMS_VERSION2..CMS_VERSION3) < tonumber(sversion) ) then
--		--TraceFrame:AddMessage("il existe une version + r\195\169cente de ChatMondialServeur.");
		if ( CMS_newversion == 0 ) then
			TraceFrame:AddMessage("il existe une nouvelle version de ChatMondialServeur. la "..sversion);
			CMS_newversion = 1;
		end
	end
	ideb = ideb + 6; -- 11;
--TraceFrame:AddMessage("ideb = 11");
	ifin = ideb + 3;
--TraceFrame:AddMessage("ifin = ideb + 3");
	snum = strsub(message,ideb,ifin);
--TraceFrame:AddMessage("snum");
	ideb = ifin + 2;
--TraceFrame:AddMessage("ideb = ifin + 1");
	-- ce canal existe
	if ( CMS_nomcanalbynum(snum) ) then
--TraceFrame:AddMessage("le canal existe");
		if ( CMStablochannel[snum] ) then
--TraceFrame:AddMessage("j ai ce canal");
			CMStablochannel[snum].time = 0;
			while ( ifin ) do
				ifin = strfind(message,"@",ideb);
				if ( ifin ) then
--TraceFrame:AddMessage("@ trouvé");
					snom = strsub(message,ideb,ifin-1);
--TraceFrame:AddMessage("snom = "..snom);
					if ( CMStablochannel[snum].joueur_i[snom] ) then
--TraceFrame:AddMessage("j ai déjà ce joueur sur ce canal");
					else
--TraceFrame:AddMessage("j'ajoute ce joueur");
						CMStablochannel[snum].nbj = CMStablochannel[snum].nbj +1;
						CMStablochannel[snum].joueur_i[snom] = CMStablochannel[snum].nbj;
						table.insert(CMStablochannel[snum].joueur_s,snom);
					end
--TraceFrame:AddMessage("ideb = ifin + 1");
					ideb = ifin + 1;
				end
			end
			CMS_trier_joueur(snum);
		end
	end

end

function ChatMondialServeur_OnUpdate()

	if ( CMS_config_premierefois_time > 0 ) then
		--if ( (GetTime() - CMS_config_premierefois_time) > 60 ) then	--	*1000	/1000
		if ( (GetTime() - CMS_config_premierefois_time) > 5 ) then	--	*1000	/1000
			if ( CMS_numcanalCMS == 0 ) then
				ChatMondialServeur_SlashCommandHandler(-1,"MODE ON ");
			end
			CMS_config_premierefois_time = 0;
			--CMS_config.premierefois[CMS_serveur][UnitName("player")] = 0;
			CMS_config.premierefois[CMS_serveur][CMS_joueur] = 0;
		end
	end

end

function ChatMondialServeur_OnEvent(self,event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12)

local semetteur;

--TraceFrame:AddMessage(event);
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
	if ( event == "CHAT_MSG_ADDON" ) then
		if ( arg1 == "CMS" ) then
			CMS_liresend(arg2,arg4);
		end
	elseif ( event == "CHAT_MSG_CHANNEL" ) then
--if ( CMS_debug > 0 ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15);
--end
		if ( CMS_numcanalCMS > 0 ) then
			--if ( CMScanauxserveurs_finchargement == 0 ) then
			--	JoinChannelByName(CMS_NOMCANAL);
			--	CMS_changerregion();
			--	CMScanauxserveurs_finchargement = 1;
			--else
			--	--if ( CMS_surgriffon == 1 ) then
			--	--	if ( UnitOnTaxi("player") ) then
			--	--	else
			--	--		CMS_surgriffon = 0;
			--	--		CMS_changerregion();
			--	--	end
			--	--else
			--	--end
			--end
			if ( arg9 ) then
				if ( strlower(arg9) == CMS_NOMCANAL or arg9 == "CM" ) then
					if ( strlower(arg9) == CMS_NOMCANAL ) then
--	wow 2.4
						--ChatFrame_RemoveChannel(ChatFrame1, "cms");
--	wow 2.4
						--RemoveChatWindowChannel(DEFAULT_CHAT_FRAME, CMS_NOMCANAL);
						--RemoveChatWindowChannel(DEFAULT_CHAT_FRAME:GetID(), CMS_NOMCANAL);
--/script RemoveChatWindowChannel(DEFAULT_CHAT_FRAME:GetID(), CMS_NOMCANAL);
--/script RemoveChatWindowChannel(DEFAULT_CHAT_FRAME:GetID(), "cms");
						semetteur, _ = strsplit("-",arg2);
						CMS_traitertypedumessage(arg1,semetteur);
					else
					end
				else
					CMS_envoyermessagesurcanalglobal(arg1,arg12,arg9);
				end
			else
				--TraceFrame:AddMessage("arg9 vide");
			end
		else
		end
	elseif ( event == "CHAT_MSG_GUILD" or event == "CHAT_MSG_OFFICER" or event == "CHAT_MSG_PARTY" or event == "CHAT_MSG_RAID" or event == "CHAT_MSG_RAID_LEADER" or event == "CHAT_MSG_SAY" or event == "CHAT_MSG_YELL" ) then
if ( CMS_debug > 0 ) then
		CMS_transformerliensenobjets(arg1,true);
end
--CHAT_MSG_GUILD
--CHAT_MSG_PARTY
--CHAT_MSG_RAID
--CHAT_MSG_RAID_LEADER
	elseif ( event == "CHAT_MSG_WHISPER" ) then
--wow 2.4
--DBCS_ecrirecodedutexte(arg1);
--wow 2.4
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
		if ( strsub(arg1,1,4) == "@CMS" ) then
--TraceFrame:AddMessage("j'appel liresend");
			CMS_liresend(arg1,arg2);
		end
if ( CMS_debug > 0 ) then
		CMS_transformerliensenobjets(arg1,true);
end
	elseif ( event == "CHAT_MSG_CHANNEL_JOIN" ) then
	
--		-- arg2 = joueur
--		-- arg4 = num. et nom du canal
--		-- arg7 = ?? 0 ?
--		-- arg8 = numcanal
--		-- arg9 = nomcanal
		if ( CMS_cliquer == 1 ) then
CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
		end
	elseif ( event == "CHAT_MSG_CHANNEL_LEAVE" ) then
		-- arg2 = joueur
		-- arg4 = num. et nom du canal
		-- arg7 = ?? 0 ?
		-- arg8 = numcanal
		-- arg9 = nomcanal
		if ( arg8 == CMS_numcanalCMS ) then
			CMS_initjoueur({},arg2)
		end
if ( CMS_debug > 0 ) then
CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
else
		if ( CMS_cliquer == 1 ) then
CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
		end
end
--	elseif ( event == "CHAT_MSG_SYSTEM" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
	elseif ( event == "PLAYER_LEAVING_WORLD" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
		--if ( CMS_numcanalCMS > 0 ) then
--TraceFrame:AddMessage("je quitte le monde, canal CMS : "..CMS_numcanalCMS);
		--	CMS_initjoueur({},CMS_joueur);
--TraceFrame:AddMessage("je quitte le monde, fin init joueur");
		--	SendChatMessage("@CL@","CHANNEL",self.language,CMS_numcanalCMS);
--TraceFrame:AddMessage("je quitte le monde, init joueur envoye sur CMS");
		--end
--	elseif ( event == "PLAYER_LOGIN" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "PLAYER_LOGOUT" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "INSTANCE_BOOT_START" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "INSTANCE_BOOT_STOP" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "UPDATE_CHAT_WINDOWS" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "UPDATE_MOUSEOVER_UNIT" ) then
---- mouse
--		if ( CMS_cliquer == 1 ) then
--			TargetUnit("mouseover");
--		end
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
-- mouse
--	elseif ( event == "SYSMSG" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "UI_ERROR_MESSAGE" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "UI_INFO_MESSAGE" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "PLAYTIME_CHANGED" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "CHAT_MSG" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "CHAT_MSG_CHANNEL_LIST" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
	elseif ( event == "CHAT_MSG_CHANNEL_NOTICE" ) then
		-- arg1 = type de notice
--if ( CMS_debug > 0 ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--end
		if ( arg1 == "YOU_LEFT" ) then
			-- si canal pas wow
			-- arg4 = num. nom du canal
			-- arg7 = 0 ??
			-- arg8 = num canal
			-- arg9 = nom canal
			-- si canal wow
			-- arg4 = nom du canal
			-- arg7 = 0 ??
			-- arg8 = 0 ??
			-- si ce canal est 1 canal wow
			-- si je lis ce canal
			-- supprimer ce canal
			-- et
			-- envoyer sur CMS @C-@nnnn
			if ( CMS_numcanalCMS > 0 ) then
				if ( arg8 == CMS_numcanalCMS ) then
					CMS_config.stop = 1;
					CMS_numcanalCMS = 0;
					CMS_initjoueur({},CMS_joueur);
					--CMS_numcanalCMS = GetChannelName(CMS_NOMCANAL); -- , nchat 
					--RemoveChatWindowChannel(DEFAULT_CHAT_FRAME, CMS_NOMCANAL)
				else
					snumcanal = CMS_numcanalbyname(arg9);
					-- si cest 1 canal wow
					if ( snumcanal ) then
						--CMStablochannel[snumcanal] = nil;
						--SendChatMessage("@C-@"..snumcanal,"CHANNEL",self.language,CMS_numcanalCMS);
						CMS_changerregion();
					else
					end
				end
			end
		elseif ( arg1 == "YOU_JOINED" ) then
			-- si canal pas wow
			-- arg4 = num.nom du canal
			-- arg7 = 0 ??
			-- arg8 = num canal
			-- arg9 = nom canal
			-- si canal wow
			-- arg4 = num.nom du canal
			-- arg7 = 2 ??
			-- arg8 = num canal
			-- arg9 = nom canal
			-- si ce canal est 1 canal wow
			-- si je ne lis pas
			-- créer ce canal
			-- et
			-- envoyer sur CMS @C+@nnnn
			if ( strlower(arg9) == CMS_NOMCANAL ) then
				CMS_config.stop = 0;
				CMS_numcanalCMS = tonumber(arg8);
				CMS_changerregion()
			else
				if ( CMS_numcanalCMS > 0 ) then
					snumcanal = CMS_numcanalbyname(arg9);
					if ( snumcanal ) then
						CMS_changerregion();
					end
				end
			end
		elseif ( arg1 == "YOU_CHANGED" ) then
			-- si canal wow
			-- arg4 = num.nom du canal
			-- arg7 = 1 ??	22 ??
			-- arg8 = num canal
			-- arg9 = nom canal
			if ( strlower(arg9) == CMS_NOMCANAL ) then
				CMS_config.stop = 0;
				CMS_numcanalCMS = tonumber(arg8);
				CMS_changerregion()
			else
				if ( CMS_numcanalCMS > 0 ) then
					snumcanal = CMS_numcanalbyname(arg9);
					if ( snumcanal ) then
						CMS_changerregion();
					end
				end
			end
		elseif ( arg1 == "SUSPENDED" ) then
			-- si canal wow
			-- arg4 = num.nom du canal
			-- arg7 = 2 ??
			-- arg8 = num canal
			-- arg9 = nom canal
			if ( CMS_numcanalCMS > 0 ) then
				snumcanal = CMS_numcanalbyname(arg9);
				-- si cest 1 canal wow
				if ( snumcanal ) then
					--CMStablochannel[snumcanal] = nil;
					--SendChatMessage("@C-@"..snumcanal,"CHANNEL",self.language,CMS_numcanalCMS);
					CMS_changerregion();
				else
				end
			end
		end
		if ( CMS_numcanalCMS == 0 ) then
			CMS_config_premierefois_time = GetTime(); --	*1000;
		end
	--elseif ( event == "CHAT_MSG_CHANNEL_NOTICE_USER" ) then
	--	if ( arg9 == CMS_NOMCANAL ) then
	--		if ( arg1 == "OWNER_CHANGED" ) then
	--			ChannelToggleAnnouncements(CMS_NOMCANAL);
	--		elseif ( arg1 == "ANNOUNCEMENTS_OFF" ) then
	--			ChannelToggleAnnouncements(CMS_NOMCANAL);
	--		elseif ( arg1 == "ANNOUNCEMENTS_ON" ) then
	--		end
	--	end
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "CHAT_MSG_LOOT" ) then
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "CHAT_MSG_COMBAT_HOSTILE_DEATH" ) then
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "CVAR_UPDATE" ) then
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "ITEM_PUSH" ) then
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "LOOT_SLOT_CLEARED" ) then
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "UNIT_NAME_UPDATE" ) then
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "UNIT_PORTRAIT_UPDATE" ) then
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--	elseif ( event == "ZONE_CHANGED" ) then
--		if ( UnitOnTaxi("player") ) then
--			TraceFrame:AddMessage("je suis sur la monture volante");
--		else
--			TraceFrame:AddMessage("je ne suis pas sur la monture volante");
--		end
--	elseif ( event == "TAXIMAP_CLOSED" ) then
--		CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
--		if ( UnitOnTaxi("player") ) then
--			TraceFrame:AddMessage("je suis sur la monture volante");
--		else
--			TraceFrame:AddMessage("je ne suis pas sur la monture volante");
--		end
--	elseif ( event == "ZONE_CHANGED_INDOORS" ) then
--		--if ( UnitOnTaxi("player") ) then
--		--	TraceFrame:AddMessage("je suis sur la monture volante");
--		--else
--		--	TraceFrame:AddMessage("je ne suis pas sur la monture volante");
--		--end
	elseif ( event == "PLAYER_ENTERING_WORLD" ) then
--CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
		CMS_joueur_serveur = UnitName("player");
		CMS_joueur, _ = strsplit("-",CMS_joueur_serveur);
		--CMS_joueur = GetUnitName("player",false);
		if ( CMS_wow_build > CMS_wow_build_live ) then
			_, CMS_joueur_GUID = strsplit("-",UnitGUID("player"),2);
		else
			CMS_joueur_GUID = UnitGUID("player");
		end
		CMS_language = GetDefaultLanguage();
		CMS_initialisation();
		--CMScanauxserveurs_finchargement = 0;
--		--if ( UnitOnTaxi("player") ) then
--		--	if ( CMS_surgriffon == 0 ) then
--		--		CMS_surgriffon = 1;
--		--		CMS_initjoueur({},CMS_joueur)
--		--		--SendChatMessage("@CL","CHANNEL",self.language,CMS_numcanalCMS);
--		--		SendChatMessage("@CL@","CHANNEL",self.language,CMS_numcanalCMS);
--		--	else
--		--	end
--		--	TraceFrame:AddMessage("je suis sur la monture volante");
--		--else
--		--	TraceFrame:AddMessage("je ne suis pas sur la monture volante");
--		--	CMS_changerregion();
--		--end
--		CMS_changerregion();
	elseif ( event == "VARIABLES_LOADED" ) then
		--CMS_initialisation();
		if ( CMS_config.premierefois == nil ) then
			CMS_config.premierefois = {};
		end
		if ( CMS_config.premierefois[CMS_serveur] == nil ) then
			CMS_config.premierefois[CMS_serveur] = {};
		end
		if ( CMS_config.debug ) then
			CMS_debug = CMS_config.debug;
		else
			CMS_config.debug = CMS_debug;
		end
--if ( CMS_cliquer == 1 ) then
--/script ChatFrame1:SetMaxLines(100000)
--/script ChatFrame3:SetMaxLines(100000)
		ChatFrame1:SetMaxLines(100000);
		if ( CMS_debug == 1 ) then
			ChatFrame2:SetMaxLines(100000);
			ChatFrame3:SetMaxLines(100000);
			ChatFrame4:SetMaxLines(100000);
		end
		TraceFrame:AddMessage("ChatMondialServeur fonctionne. /cms pour les instructions.",255/255,255/255,192/255);
		--if ( CMS_config.wow2_4 == nil ) then
		--	CMS_canalvisible("ALL",1);
		--	CMS_config.wow2_4 = 1;
		--end
		--if ( ( CMS_config.build == nil ) or ( CMS_config.build <= 13623 ) ) then
		--	CMS_canalvisible("ALL",1);
		--	CMS_config.build = 13623;
		--end
		--CMS_wow_build
		if ( ( CMS_config.build == nil ) or ( CMS_config.build <= CMS_wow_build ) ) then
			CMS_canalvisible("ALL",1);
			CMS_config.build = CMS_wow_build;
		end
		--if ( nouveau build ) then
		--	CMS_canalvisible("ALL",1);
		--	CMS_config.build = 13623;
		--end
--end
		--if ( CMS_config.premierefois[CMS_serveur][UnitName("player")] == nil ) then
			--CMS_config_premierefois_time = GetTime(); --	*1000;
		--end
		--CMS_serveur
	--elseif ( event == "ZONE_CHANGED_NEW_AREA" ) then
		--if ( CMS_numcanalCMS > 0 ) then
		--	CMS_initjoueur({},CMS_joueur)
		--	SendChatMessage("@CL@","CHANNEL",self.language,CMS_numcanalCMS);
		--end
		--CMS_testwhisperaddon();
--	elseif ( event == "ZONE_CHANGED_NEW_AREA" ) then
--		--if ( UnitOnTaxi("player") ) then
--		--	if ( CMS_surgriffon == 0 ) then
--		--		CMS_surgriffon = 1;
--		--		CMS_initjoueur({},CMS_joueur)
--		--		SendChatMessage("@CL","CHANNEL",self.language,CMS_numcanalCMS);
--		--	else
--		--	end
--		--	TraceFrame:AddMessage("je suis sur la monture volante");
--		--else
--		--	TraceFrame:AddMessage("je ne suis pas sur la monture volante");
--		--	CMS_changerregion();
--		--end
	else
	end

end

--/script CMS_changerregion()
function CMS_changerregion()

	--id1, name1, id2, name2, ... = GetChannelList();
	--id, name = GetChannelName(id);

	local i;
	local iid, sname;
	local slistecanaux;
	local snumcanal;
	--local inumcms;
	local itime;

	local stablec;
	--local inum;

	--JoinChannelByName(CMS_NOMCANAL);

	slistecanaux = "";
	--inumcms = nil;
	CMStablochannel = {};
	nCMStablochannel = 0;
	itime = GetTime()*1000;

	--inum = 0;
	stablec = {};

	for i = 1,10 do
		iid, sname = GetChannelName(i);
		if ( iid ) then
			--if ( sname == CMS_NOMCANAL ) then
			--	inumcms = iid;
			--	CMS_numcanalCMS = iid;
			--end
			snumcanal = CMS_numcanalbyname(sname);
			if ( snumcanal ) then
				--CMScanauxserveurs_finchargement = 1;
				nCMStablochannel = nCMStablochannel +1;
				CMStablochannel[snumcanal] = { nbj = 1, time = itime, inum = i, joueur_i = { [CMS_joueur] = 1 }, joueur_s = { [1] = CMS_joueur } };
				-- pourquoi initialiser le tablo joueur puisqu on appelle la fonction initjoueur à vide après ?
				-- le créer à vide permettait de ne pas se déclarer lead du canal aussitot arrivé, pour permetre a des sends d'arriver provenant du vrai lead, inutil now
				--CMStablochannel[snumcanal].joueur_i[CMS_joueur] = 1;
				--CMStablochannel[snumcanal].joueur_s[1] = CMS_joueur;
				slistecanaux = slistecanaux..snumcanal;
				--inum = inum +1;
				stablec[snumcanal] = 0;
			end
		end
	end
	if ( CMS_numcanalCMS > 0 ) then
		-- C pour message de type canal
		-- L pour message de type liste canaux
		CMS_initjoueur(stablec,CMS_joueur);
--		RemoveChatWindowChannel(DEFAULT_CHAT_FRAME:GetID(), CMS_NOMCANAL);
		if ( CMS_listecanaux_old == slistecanaux ) then
		else
			CMS_SendChatMessage("@CL@"..slistecanaux,"CHANNEL",CMS_language,CMS_numcanalCMS);
			CMS_listecanaux_old = slistecanaux;
		end
		--SendChatMessage("@CLFauvette@"..slistecanaux,"CHANNEL",this.language,CMS_numcanalCMS);
	end

end

function CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage, sGUID)

-- local DefaultChannels = { GetChatWindowChannels(TraceFrame:GetID()) };

-- CMS_t_couleurs

	if ( newmessage == nil or strlen(newmessage) == 0 ) then
		return nil;
	end

	local r,g,b;
	local on;
	local isexe;

	r = 255;
	g = 192;
	b = 192;
	-- par défaut, les canaux général d'ironforge et commerce et recherchegroupe des capitales sont visibles, pas les autres
	if ( numcanal == "0012" or numcanal == "0014" or numcanal == "2121" ) then
		on = 1;
	else
		on = 0;
	end

	if ( CMS_t_couleurs[numcanal] ) then
		if ( CMS_t_couleurs[numcanal].r ) then
			r = CMS_t_couleurs[numcanal].r;
		end
		if ( CMS_t_couleurs[numcanal].g ) then
			g = CMS_t_couleurs[numcanal].g;
		end
		if ( CMS_t_couleurs[numcanal].b ) then
			b = CMS_t_couleurs[numcanal].b;
		end
		if ( CMS_t_couleurs[numcanal].on ) then
			on = CMS_t_couleurs[numcanal].on;
		end
	end

	if ( CMStablochannel[numcanal] ) then
		on = 1;
	end

	if ( on == 1 and CMS_config.stop == 0 and CMS_baffichermessagescanaux == 1 ) then
		if ( CMS_antispam_exist ) then
			CMS_antispam_ajoutligne(CMS_inumligne,newmessage);
		end
		if ( CMS_antispam_exist ) then
			if ( CMS_testerligne(newmessage) ) then
				if ( sGUID) then
					if ( CMS_wow_build > CMS_wow_build_live ) then
						_, _, _, _, isexe = GetPlayerInfoByGUID("Player-"..sGUID);
					else
						_, _, _, _, isexe = GetPlayerInfoByGUID(sGUID);
					end
					if ( isexe and isexe == 3 ) then
						TraceFrame:AddMessage("["..numcanal..". "..nomcanal.."]"..CMS_GetItemLink("@@F@-8@"..sGUID.."@@")..nomemetteurlink.." : "..newmessage,r/255,g/255,b/255,255/255,2);
					else
						TraceFrame:AddMessage("["..numcanal..". "..nomcanal.."]"..CMS_GetItemLink("@@M@-8@"..sGUID.."@@")..nomemetteurlink.." : "..newmessage,r/255,g/255,b/255,255/255,2);
					end
				else
					TraceFrame:AddMessage("["..numcanal..". "..nomcanal.."] "..nomemetteurlink.." : "..newmessage,r/255,g/255,b/255,255/255,2);
				end
			end
		else
			if ( sGUID) then
				if ( CMS_wow_build > CMS_wow_build_live ) then
					_, _, _, _, isexe = GetPlayerInfoByGUID("Player-"..sGUID);
				else
					_, _, _, _, isexe = GetPlayerInfoByGUID(sGUID);
				end
				if ( isexe and isexe == 3 ) then
					TraceFrame:AddMessage("["..numcanal..". "..nomcanal.."]"..CMS_GetItemLink("@@F@-8@"..sGUID.."@@")..nomemetteurlink.." : "..newmessage,r/255,g/255,b/255,255/255,2);
				else
					TraceFrame:AddMessage("["..numcanal..". "..nomcanal.."]"..CMS_GetItemLink("@@M@-8@"..sGUID.."@@")..nomemetteurlink.." : "..newmessage,r/255,g/255,b/255,255/255,2);
				end
			else
				TraceFrame:AddMessage("["..numcanal..". "..nomcanal.."] "..nomemetteurlink.." : "..newmessage,r/255,g/255,b/255,255/255,2);
			end
		end
	end

end

function CMS_traitertypedumessage(arg1,arg2)

-- arg1 = message
-- arg2 = emetteur

	local stype;
	local sstype;
	local numcanal;
	local ipos;
	local nomemetteur;
	local nomemetteurlink;
	local semetteur;
	local message;
	local newmessage;
	local sliste;
	local snum;
	local stablec;
	local n;
	local ienvoyer;
	local ideb, ifin;
	local slangue;

	if ( strsub(arg1,1,1) == "@" ) then
		stype = strsub(arg1,2,2);
		if ( stype == "M" ) then
			if ( arg2 == CMS_joueur ) then
			else
				ideb = 3;
				ifin = ideb + 3;
				numcanal = strsub(arg1,ideb,ifin);
--TraceFrame:AddMessage("numcanal : "..numcanal);
				nomcanal = CMS_nomcanalbynum(numcanal);
--TraceFrame:AddMessage("nomcanal : "..nomcanal);
				ideb = ifin + 1;
				ipos = strfind(arg1,"@",ideb);
				slangue = strsub(arg1,ideb,ipos-1);
--TraceFrame:AddMessage("slangue : "..slangue.." mon client : "..CMS_versionclientwow);
				ideb = ipos + 1;
				ipos = strfind(arg1,"@",ideb);
				nomemetteur = strsub(arg1,ideb,ipos-1);
--TraceFrame:AddMessage("nomemetteur : "..nomemetteur);
				CMS_inumligne = CMS_inumligne - 1;
				nomemetteurlink = CMS_lienjoueurbynom(nomemetteur,CMS_inumligne);
				message = strsub(arg1,ipos+1);
				newmessage = CMS_transformerobjetsenliens(message);
				newmessage = CMS_transformer_liens_en_liens_ds_langue(newmessage,"a");
				--CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage);
--TraceFrame:AddMessage("["..numcanal..". "..nomcanal.."] "..nomemetteurlink.." : "..newmessage);
				-- si je suis connecté à ce canal
				if ( CMStablochannel[numcanal] ) then
--if ( CMS_debug == 1 ) then
--CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage,nomemetteur);
--end
					-- si je suis avec 1 client wow autre que celui de l emetteur
					-- je dois afficher le message quand meme
					-- trouver comment faire
					--if ( ( slangue == CMS_versionclientwow ) or ( CMS_config.langue == 0 ) ) then
						-- si quelqun d autre que le lead du canal envoi le message
						-- je l affiche
--						-- créer 1 message type T ou P ou J pour envoyer des messages sur 1 canal de CMS
--TraceFrame:AddMessage(CMStablochannel[numcanal].joueur_s[1].." contre "..arg2);
--						if ( CMStablochannel[numcanal].joueur_s[1] ~= arg2 ) then
--							CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage);
--						end
						--CMStablochannel[numcanal].time = 0;
-- ajouter ici ds mon tablo de ce canal, le joueur qui a envoyé ce message ? je penses que oui
						if ( CMStablochannel[numcanal].joueur_i[arg2] ) then
							-- si j'existe sur le canal que je lis, donc, ya 1 bug qui traine
							if ( CMStablochannel[numcanal].joueur_i[CMS_joueur] ) then
							else
								-- m'ajouter ds le tablo
								CMStablochannel[numcanal].nbj = CMStablochannel[numcanal].nbj + 1;
								CMStablochannel[numcanal].joueur_i[CMS_joueur] = CMStablochannel[numcanal].nbj;
								table.insert(CMStablochannel[numcanal].joueur_s,CMS_joueur);
								CMS_trier_joueur(numcanal);
							end
							if ( CMStablochannel[numcanal].joueur_i[arg2] < CMStablochannel[numcanal].joueur_i[CMS_joueur] ) then
								CMStablochannel[numcanal].time = 0;
							end
						else
							CMStablochannel[numcanal].nbj = CMStablochannel[numcanal].nbj + 1;
							CMStablochannel[numcanal].joueur_i[arg2] = CMStablochannel[numcanal].nbj;
							table.insert(CMStablochannel[numcanal].joueur_s,arg2);
							--CMStablochannel[numcanal].joueur_s[CMStablochannel[numcanal].nbj] = arg2;
							CMStablochannel[numcanal].time = 0;
							-- tri de CMStablochannel[numcanal].joueur;
							CMS_trier_joueur(numcanal);
							--table.sort(CMStablochannel[numcanal].joueur,CMS_sort_joueur);
						end
					--else
					--	CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage);
					--end
				else
					-- si je ne lis pas ce canal, je l affiche
					-- ajouter ici les tests de config si le joueur veut voir ce canal
					-- ajouter aussi la couleur du canal choisi par le joueur
					
					--CMS_wow_build_live
					--if ( strsub(nomemetteur,1,2) == "0x" ) then
					if ( nomemetteur ) then
						--if ( CMS_wow_build > CMS_wow_build_live ) then
						CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage,nomemetteur);
					else
						CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage);
					end
					--TraceFrame:AddMessage("["..numcanal..". "..nomcanal.."] "..nomemetteurlink.." : "..newmessage);
				end
			end
		elseif ( stype == "T" ) then
			ideb = 3;
			ifin = ideb + 3;
			numcanal = strsub(arg1,ideb,ifin);
--TraceFrame:AddMessage("numcanal : "..numcanal);
			nomcanal = CMS_nomcanalbynum(numcanal);
--TraceFrame:AddMessage("nomcanal : "..nomcanal);
			ideb = ifin + 1;
			ipos = strfind(arg1,"@",ideb);
			slangue = strsub(arg1,ideb,ipos-1);
--TraceFrame:AddMessage("slangue : "..slangue.." mon client : "..CMS_versionclientwow);
			ideb = ipos + 1;
			ipos = strfind(arg1,"@",ideb);
			nomemetteur = strsub(arg1,ideb,ipos-1);
--TraceFrame:AddMessage("nomemetteur : "..nomemetteur);
			CMS_inumligne = CMS_inumligne - 1;
			nomemetteurlink = CMS_lienjoueurbynom(nomemetteur,CMS_inumligne);
			message = strsub(arg1,ipos+1);
			newmessage = CMS_transformerobjetsenliens(message);
			newmessage = CMS_transformer_liens_en_liens_ds_langue(newmessage,"a");
			
			--CMS_wow_build_live
			--if ( strsub(nomemetteur,1,2) == "0x" ) then
			if ( nomemetteur ) then
				CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage,nomemetteur);
			else
				CMS_affichermessage(numcanal,nomcanal,nomemetteurlink,newmessage);
			end
		elseif ( stype == "L" ) then
			sstype = strsub(arg1,3,3);
			if ( sstype and sstype == "Q" ) then
				CMS_envoyerlistejoueurbycanal(arg2);
			end
		elseif ( stype == "C" ) then
			sstype = strsub(arg1,3,3);
			if ( sstype == "L" ) then
				semetteur = arg2;
				if ( semetteur ~= CMS_joueur ) then
					sliste = strsub(arg1,5);
					-- supprimer cette partie après les tests
					--ipos = strfind(arg1,"@",4);
					--if ( ipos ) then
					--	semetteur = strsub(arg1,4,ipos-1);
					--	sliste = strsub(arg1,ipos+1);
					--else
					--	semetteur = arg2;
					--	sliste = "";
					--end
					-- fin de la suppression
--TraceFrame:AddMessage(sliste);
					ipos = 1;
					inum = 0;
					stablec = {};
					n = strlen(sliste);
					while ( ipos <= n ) do
						snum = strsub(sliste,ipos,ipos+3);
						inum = inum +1;
						--stablec.nb = inum;
						stablec[snum] = inum;
						ipos = ipos +4;
					end
					CMS_initjoueur(stablec,semetteur);
				end
				--if ( semetteur == CMS_joueur ) then
				--	if ( inum > 0 ) then
				--		-- mieux gérer sa propre initialisation
				--		--if ( arg2 == CMS_joueur ) then
				--		--else
				--		--	CMS_ajouterjoueur(stablec,semetteur);
				--		--end
				--	else
				--		if ( arg2 == CMS_joueur and CMS_surgriffon == 0 ) then
				--			CMS_changerregion();
				--		end
				--	end
				--else
				--end
			elseif ( sstype == "+" ) then
				snum = strsub(arg1,5,8);
				-- si je ne suis pas l emetteur de ce message
				if ( arg2 ~= CMS_joueur ) then
					-- si le canal est 1 canal wow
					if ( CMS_nomcanalbynum(snum) ) then
						-- si je lis ce canal
						if ( CMStablochannel[snum] ) then
							-- si j ai ce joueur sur ce canal
							if ( CMStablochannel[snum].joueur_i[arg2] ) then
							else
								if ( CMStablochannel[snum].joueur_i[CMS_joueur] ) then
								else
									-- je m ajoutes ds le tablo de ce canal
									CMStablochannel[snum].nbj = CMStablochannel[snum].nbj +1;
									CMStablochannel[snum].joueur_i[CMS_joueur] = CMStablochannel[snum].nbj;
									table.insert(CMStablochannel[snum].joueur_s,CMS_joueur);
									CMS_trier_joueur(snum);
								end
								if ( CMStablochannel[snum].joueur_s[1] == CMS_joueur ) then
if ( CMS_debug == 1 ) then
TraceFrame:AddMessage("je suis le lead du canal ".. snum..", je lui envoi la liste des membres");
end
									ienvoyer = 1;
								else
									ienvoyer = 0;
								end
								-- ajout de ce joueur
								CMStablochannel[snum].nbj = CMStablochannel[snum].nbj +1;
								CMStablochannel[snum].joueur_i[arg2] = CMStablochannel[snum].nbj;
								table.insert(CMStablochannel[snum].joueur_s,arg2);
								CMS_trier_joueur(snum);
								if ( ienvoyer == 1 ) then
									CMS_envoyer_en_send_liste(snum,arg2);
								end
							end
						end
					end
				end
			elseif ( sstype == "-" ) then
				snum = strsub(arg1,5,8);
				-- si je ne suis pas l emetteur de ce message
				if ( arg2 ~= CMS_joueur ) then
					-- si le canal est 1 canal wow
					if ( CMS_nomcanalbynum(snum) ) then
						-- si je lis ce canal
						if ( CMStablochannel[snum] ) then
							-- si j ai ce joueur sur ce canal
							if ( CMStablochannel[snum].joueur_i[arg2] ) then
								-- suppression de ce joueur
								n = CMStablochannel[snum].joueur_i[arg2];
								CMStablochannel[snum].joueur_i[arg2] = nil;
								table.remove(CMStablochannel[snum].joueur_s,n);
								CMStablochannel[snum].nbj = CMStablochannel[snum].nbj -1;
								CMS_trier_joueur(snum);
--if ( CMS_debug == 1 ) then
--	if ( snum == "0012" and CMStablochannel[snum].nbj == 0 ) then
--		TraceFrame:AddMessage("il n'y a plus personne sur le canal commerce");
--	end
--end
							else
							end
						end
					end
				end
			else
			end
		else
		end
	else
	end

end

function CMS_envoyer_en_send_liste(snum,semetteur,scode)

	local lmax = 240;
	local snom;
	local lnom;
	local i;
	local n;
	local envoi = {};
	local sliste;
	local lliste;

	local tcanal1;

	if ( scode == nil ) then
		scode = "@CMS";
	end
	
	sliste = "";
	lliste = 0;
	n = 0;
--TraceFrame:AddMessage("envoyer en send : "..snum..","..semetteur);
--TraceFrame:AddMessage(tcanal1);
--TraceFrame:AddMessage(lliste..":"..lnom..":"..lmax);
	for i = 1, CMStablochannel[snum].nbj do
		snom = CMStablochannel[snum].joueur_s[i];
		if ( snom ) then
			lnom = strlen(snom);
		else
			lnom = 0;
		end
		if ( (lliste + lnom +1) > lmax ) then
			n = n + 1;
			envoi[n] = sliste;
			sliste = "";
			lliste = 0;
		end
		if ( snom ) then
			sliste = sliste..snom.."@";
		else
			sliste = sliste.."@";
		end
		lliste = lliste + lnom + 1;
	end
	if lliste > 0 then
		n = n +1;
		envoi[n] = sliste;
	end
	for i = 1, n do
--		SendChatMessage("@"..snum.."@"..envoi[i],"WHISPER",this.language,semetteur);
--		SendChatMessage("@CMS"..CMS_VERSION1..CMS_VERSION2..CMS_VERSION3..snum.."@"..envoi[i],"WHISPER",this.language,CMS_joueur);
		--if ( CMS_whisper_dispo == 0 ) then
		--	SendChatMessage(scode..CMS_VERSION1..CMS_VERSION2..CMS_VERSION3..snum.."@"..envoi[i],"WHISPER",this.language,semetteur);
		--else
		SendAddonMessage("CMS",scode..CMS_VERSION1..CMS_VERSION2..CMS_VERSION3..snum.."@"..envoi[i],"WHISPER",semetteur);
		--end
	end

end

function CMS_envoyerlistejoueurbycanal(semetteur)

	local tcanal1;

	for tcanal1, _ in pairs(CMStablochannel) do
		if ( CMStablochannel[tcanal1].joueur_s[1] == CMS_joueur ) then
			CMS_envoyer_en_send_liste(tcanal1,semetteur,"@CMC");
		else
		end
	end

end

function CMS_initjoueur(stablec,semetteur)

	local i,j,k;
	local n;
	local snum;
	local ienvoyer;

	local tcanal1;

--TraceFrame:AddMessage(CMStablochannel[tcanal1].nbj);
--TraceFrame:AddMessage(CMStablochannel[tcanal1].nbj);
--TraceFrame:AddMessage("la suppression du joueur a raté");

	-- suppression de l emetteur de tous les canaux que je li
	-- si l emetteur nes pas moi ou qu on force l init
--TraceFrame:AddMessage("emetteur : "..semetteur);
--TraceFrame:AddMessage("canal : "..tcanal1.." : "..CMStablochannel[tcanal1].nbj.." joueurs");
--TraceFrame:AddMessage("je suis le lead du canal ".. tcanal1..", je lui envoi la liste des membres");
--TraceFrame:AddMessage("supp joueur "..semetteur.." du canal : "..tcanal1.." : "..CMStablochannel[tcanal1].nbj.." joueurs");
--TraceFrame:AddMessage("sort en initjoueur");
--TraceFrame:AddMessage("autre sort en initjoueur");

	for tcanal1, _ in pairs(CMStablochannel) do
--TraceFrame:AddMessage("canal : "..tcanal1.." : "..CMStablochannel[tcanal1].nbj.." joueurs");
		if ( stablec[tcanal1] ) then
--TraceFrame:AddMessage("l'emetteur peut lire ce canal");
			if ( CMStablochannel[tcanal1].joueur_s[1] == CMS_joueur and semetteur ~= CMS_joueur ) then
--TraceFrame:AddMessage("je suis le lead du canal ".. tcanal1..", je lui envoi la liste des membres");
				ienvoyer = 1;
			else
				ienvoyer = 0;
			end
			if ( CMStablochannel[tcanal1].joueur_i[semetteur] ) then
--TraceFrame:AddMessage("l'emetteur lisait deja ce canal");
			else
--TraceFrame:AddMessage("ajout de l'emetteur sur ce canal");
				CMStablochannel[tcanal1].nbj = CMStablochannel[tcanal1].nbj +1;
				CMStablochannel[tcanal1].joueur_i[semetteur] = CMStablochannel[tcanal1].nbj;
				table.insert(CMStablochannel[tcanal1].joueur_s,semetteur);
				--CMStablochannel[tcanal1].joueur_s[CMStablochannel[tcanal1].nbj] = semetteur;
				CMS_trier_joueur(tcanal1);
			end
			if ( ienvoyer == 1 ) then
				CMS_envoyer_en_send_liste(tcanal1,semetteur);
			end
		else
--TraceFrame:AddMessage("l'emetteur ne peut pas lire ce canal");
			if ( CMStablochannel[tcanal1].joueur_i[semetteur] ) then
--TraceFrame:AddMessage("suppression de l'emetteur de ce canal");
				n = CMStablochannel[tcanal1].joueur_i[semetteur];
				CMStablochannel[tcanal1].joueur_i[semetteur] = nil;
				table.remove(CMStablochannel[tcanal1].joueur_s,n);
				CMStablochannel[tcanal1].nbj = CMStablochannel[tcanal1].nbj -1;
				CMS_trier_joueur(tcanal1);
			else
			end
		end
	end

end

--/script CMS_numcharvalidmax("blablabla",40);
function CMS_numcharvalidmax(stexte,imax)

local i;
local bbon = false;
local ichar;
local blink;

	blink = false;
	i = strlen(stexte);
	while ( ( i > imax or blink == true ) and ( i > 1 ) ) do
		ichar = strbyte(stexte,i);
		if ( blink == false and ichar > 127 ) then
			i = i - 1;
--		sreturn = "|cffffd000|Henchant:"..snumitemlong.."|h["..snomitem.."]|h|r";
		elseif ( blink == false and strsub(stexte,i,i+2) == "@@#" ) then
			blink = true;
		elseif ( blink == true and strsub(stexte,i,i+1) == "@@" ) then
			blink = false;
		else
		end
		i = i - 1;
	end
--TraceFrame:AddMessage(i);
	return i;

end

function CMS_envoyermessagesurcanalglobal(arg1,arg2,arg9)

-- arg1 = texte du message
-- arg2 = emetteur
-- arg9 = nom du canal

	local ichat , nchat;
	local numcanal;
	local messageavecnumobjet;
	local itime;
	local tab;
	local imax;

	local arg21;
	local arg22;
	local arg23;
	
	if ( ( not arg2 ) or ( strlen(arg2) == 0 ) ) then
		return nil;
	end

--TraceFrame:AddMessage(CMStablochannel[numcanal].joueur[CMS_joueur]);
--TraceFrame:AddMessage(CMStablochannel[numcanal].joueur[1]);
--TraceFrame:AddMessage("le lead de ce canal est : "..CMStablochannel[numcanal].joueur[1]);
--TraceFrame:AddMessage("le canal "..numcanal.." est mal construit");
--TraceFrame:AddMessage("canal : "..numcanal.." joueur : "..i.." = "..CMStablochannel[numcanal].joueur[i]);
--TraceFrame:AddMessage("message envoye par timeout");

	if ( CMS_wow_build > CMS_wow_build_live ) then
		arg21, arg22, arg23 = strsplit("-",arg2);
		arg2 = arg22.."-"..arg23;
	end

-- sortir la recherche du canal CMS d ici
	ichat , nchat = GetChannelName(CMS_NOMCANAL);
-- fin du sortir
	numcanal = CMS_numcanalbyname(arg9);
	-- surtout pour moi
if ( CMS_debug > 0 ) then
	CMS_transformerliensenobjets(arg1,true);
end
	-- si le canal est 1 canal wow de région
	if ( numcanal ) then
-- ajouter test d'afficher le message que si on est le premier responsable de ce canal
		-- si le tablo de ce canal existe : sinon ce serais étonnant ou je suis sur 1 griffon et changé de zone
		if ( CMStablochannel[numcanal] ) then
			--tab = |CMStablochannel[numcanal];
			-- si le tablo de joueur de ce canal est renseigné
			if ( CMStablochannel[numcanal].nbj > 0 ) then
				-- si je suis le lead de ce canal
				if ( CMStablochannel[numcanal].joueur_s[1] == CMS_joueur ) then
					messageavecnumobjet = CMS_transformerliensenobjets(arg1,false);
					CMS_SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@","CHANNEL",CMS_language,ichat);
					if ( strlen(messageavecnumobjet) > CMS_v_phrase_nb_max_carac ) then
						imax = CMS_numcharvalidmax(messageavecnumobjet,CMS_v_phrase_nb_max_carac);
						CMS_SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@"..strsub(messageavecnumobjet,1,imax),"CHANNEL",CMS_language,ichat);
						CMS_SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@"..strsub(messageavecnumobjet,imax+1),"CHANNEL",CMS_language,ichat);
					else
						CMS_SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@"..messageavecnumobjet,"CHANNEL",CMS_language,ichat);
					end
				else
					if ( CMStablochannel[numcanal].time == 0 ) then
						CMStablochannel[numcanal].time = GetTime() * 1000;
--TraceFrame:AddMessage(CMStablochannel[numcanal].time);
					else
						itime = GetTime() * 1000;
--TraceFrame:AddMessage(itime);
						-- si j existe pour ce canal
						--if ( CMStablochannel[numcanal].joueur_i[CMS_joueur] ) then
							-- si il y a + de n secondes que j aurais du recevoir 1 message de ce canal sur le canal global ( CMS_TIMEOUT + ma place ds le tablo du canal en secondes )
							-- gestion du timeout si premier bloqué enlevée
							--if ( ((itime-CMStablochannel[numcanal].time)/1000) >= ( CMStablochannel[numcanal].joueur_i[CMS_joueur] + CMS_TIMEOUT ) ) then
--TraceFrame:AddMessage("j'aurais du recevoir 1 message sur "..numcanal.." depuis 1 certain temps");
							--	messageavecnumobjet = CMS_transformerliensenobjets(arg1,false);
							--	SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@"..messageavecnumobjet,"CHANNEL",this.language,ichat);
							--else
							--end
-- étudier le cas ou on arrive souvent ds cette boucle pour ce canal, cest que le lead du canal a 1 problème
						--else
						--end
					end
				end
			else
				if ( CMStablochannel[numcanal].time == 0 ) then
					CMStablochannel[numcanal].time = GetTime() * 1000;
--TraceFrame:AddMessage(CMStablochannel[numcanal].time);
				else
					itime = GetTime() * 1000;
--TraceFrame:AddMessage(itime);
					-- on attend CMS_TIMEOUT secondes avant d envoyer 1 message du canal original, le temp que le lead envoye le send
					if ( ((itime-CMStablochannel[numcanal].time)/1000) >= CMS_TIMEOUT ) then
--TraceFrame:AddMessage("message envoye par timeout de tablo joueur vide");
						CMStablochannel[numcanal].nbj = 1;
						CMStablochannel[numcanal].joueur_i[CMS_joueur] = 1; -- {}
						CMStablochannel[numcanal].joueur_s[1] = CMS_joueur; -- {}
						CMStablochannel[numcanal].time = 0;
						messageavecnumobjet = CMS_transformerliensenobjets(arg1,false);
						CMS_SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@","CHANNEL",CMS_language,ichat);
						if ( strlen(messageavecnumobjet) > CMS_v_phrase_nb_max_carac ) then
							imax = CMS_numcharvalidmax(messageavecnumobjet,CMS_v_phrase_nb_max_carac);
							CMS_SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@"..strsub(messageavecnumobjet,1,imax),"CHANNEL",CMS_language,ichat);
							CMS_SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@"..strsub(messageavecnumobjet,imax+1),"CHANNEL",CMS_language,ichat);
						else
							CMS_SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@"..messageavecnumobjet,"CHANNEL",CMS_language,ichat);
						end
					end
				end
			end
		else
		end
	else
	end

end

function CMS_transformerobjetsenliens(texte)

	local newtexte;
	local iposdebitem;
	local iposfinitem;
	local snomitem, snumitemcourt, snumitemlong, shexcouleuritem, inumcouleuritem;
	local sitem;
	local sitemenlink;
	local i2_3;

	newtexte = "";
	iposdebitem = 1;
	iposfinitem = -1;
	i2_3 = 2;
	while ( iposdebitem > 0 ) do
		iposdebitem = strfind(texte,"@@",iposdebitem);
		if ( iposdebitem ) then
			newtexte = newtexte..strsub(texte,iposfinitem+i2_3,iposdebitem-1);
			iposfinitem = strfind(texte,"@@#",iposdebitem+2);
			i2_3 = 3;
			if ( iposfinitem == nil ) then
				iposfinitem = strfind(texte,"@@",iposdebitem+2);
				i2_3 = 2;
			end
			if ( iposfinitem ) then
				sitem = strsub(texte,iposdebitem,iposfinitem+i2_3-1);
				sitemenlink = CMS_GetItemLink(sitem);
				if ( sitemenlink ) then
					newtexte = newtexte..sitemenlink;
				else
				end
				iposdebitem = iposfinitem +2;
			else
				--iposdebitem = strlen(texte)+1;
				--iposfinitem = 
				newtexte = newtexte..strsub(texte,iposdebitem);
				iposdebitem = -1;
			end
		else
			newtexte = newtexte..strsub(texte,iposfinitem+i2_3);
			iposdebitem = -1;
		end
	end

	return newtexte;

end

function CMS_transformerliensenobjets(texte,bvalide)

-- ajouter une variable en retour de cette fonction pour gérer le cas ou le message origine est trop long
-- et donc, l envoyer en 2 message

-- ajouter la gestion si le message intègre une couleur qui n est pas pour 1 objet

	local newtexte;
	local iposdebitem;
	local iposfinitem;
	local snomitem, snumitemcourt, snumitemlong, shexcouleuritem, inumcouleuritem;
	local tablo;
	local itemName;

	newtexte = "";
	iposdebitem = 1;
	iposfinitem = -1;
	while ( iposdebitem > 0 ) do
		iposdebitem = strfind(texte,"|cf",iposdebitem);
		if ( iposdebitem ) then
			newtexte = newtexte..strsub(texte,iposfinitem+2,iposdebitem-1);
			iposfinitem = strfind(texte,"|r",iposdebitem+2);
			if ( iposfinitem ) then
				sitem = strsub(texte,iposdebitem,iposfinitem+1);
				snomitem, snumitemcourt, snumitemlong, shexcouleuritem, inumcouleuritem = CMS_GetMotItem(sitem);
--TraceFrame:AddMessage(strsub(sitem,13,13));
if ( CMS_debug > 0 and DBOS and bvalide == true and strsub(sitem,13,14) == "it" ) then
	tablo = DBOS_detail(tonumber(snumitemcourt),"0:0:0:0:0:0:0:0:0:0");
	if ( tablo and tablo.nomobjet and tablo.type ) then
		itemName, _, _, _, _, _, _, _, _, _ = GetItemInfo("item:"..snumitemlong);
		if ( itemName ) then
		else
--			TraceFrame:AddMessage(sitem.."@");
		end
	else
		if ( DBOS[tonumber(snumitemcourt)] == nil ) then
			DBOS[tonumber(snumitemcourt)] = {};
		end
		if ( DBOS[tonumber(snumitemcourt)][1] == nil ) then
			DBOS[tonumber(snumitemcourt)][1] = snomitem;
			DBOS[tonumber(snumitemcourt)][2] = inumcouleuritem;
		end
		TraceFrame:AddMessage(sitem.."#");
	end
end
				newtexte = newtexte.."@@"..snomitem.."@"..inumcouleuritem.."@"..snumitemlong.."@@#";
				iposdebitem = iposfinitem +2;
			else
				iposdebitem = strlen(texte)+1;
			end
		else
			newtexte = newtexte..strsub(texte,iposfinitem+2);
			iposdebitem = -1;
		end
	end

	return newtexte;

end

function CMS_transformer_liens_en_liens_ds_langue(texte,arg2)

-- ajouter une variable en retour de cette fonction pour gérer le cas ou le message origine est trop long
-- et donc, l envoyer en 2 message

-- ajouter la gestion si le message intègre une couleur qui n'est pas pour 1 objet

local newtexte;
local iposdebitem;
local iposfinitem;
local snomitem, snumitemcourt, snumitemlong, shexcouleuritem, inumcouleuritem;
local tablo;
local itemName;
local snomobjetdslangue;
local sitem;
local snewitemName;
local ipos;
local b_saut_de_ligne;
local i;
local snuminstance;
local snumregion;

	if ( ( not arg2 ) or ( strlen(arg2) == 0 ) ) then
		return texte;
	end

--if ( DBCS_debug and DBCS_debug > 1 ) then
--TraceFrame:AddMessage("texte = "..texte);
--end
	newtexte = "";
	iposdebitem = 1;
	iposfinitem = -1;
	while ( iposdebitem > 0 ) do
		iposdebitem = strfind(texte,"|cf",iposdebitem);
		if ( iposdebitem ) then
			newtexte = newtexte..strsub(texte,iposfinitem+2,iposdebitem-1);
			iposfinitem = strfind(texte,"|r",iposdebitem+2);
			if ( iposfinitem ) then
				sitem = strsub(texte,iposdebitem,iposfinitem+1);

--if ( CMS_debug == 1 ) then
--DBCS_ecrirecodedutexte(sitem);
--end

--TraceFrame:AddMessage("sitem = "..sitem);
				snomitem, snumitemcourt, snumitemlong, shexcouleuritem, inumcouleuritem = CMS_GetMotItem(sitem);
--if ( DBCS_debug and DBCS_debug > 1 ) then
--TraceFrame:AddMessage("sitem = "..sitem..", couleur = "..shexcouleuritem);
--end
--	"|cffffffff|Hitem:10000:0:0:0|h[blabla]|h|r")
				--if ( inumcouleuritem == -6 ) then
				--	newtexte = newtexte.."|c"..shexcouleuritem.."|Htrade:"..snumitemlong.."|h["..snomitem.."]|h|r";
				if ( inumcouleuritem < 0 ) then
					snewitemName = nil;
--TraceFrame:AddMessage("inumcouleuritem = "..inumcouleuritem);
--TraceFrame:AddMessage("snumitemlong = "..snumitemlong);
					ChatMondialServeur_TooltipTextLeft1:SetText(nil);
					ChatMondialServeur_Tooltip:SetOwner(WorldFrame,"ANCHOR_NONE");
					if ( inumcouleuritem == -1 ) then
						ChatMondialServeur_Tooltip:SetHyperlink("enchant:"..snumitemlong);
					elseif ( inumcouleuritem == -2 ) then
						ChatMondialServeur_Tooltip:SetHyperlink("quest:"..snumitemlong);
					elseif ( inumcouleuritem == -3 ) then
						ChatMondialServeur_Tooltip:SetHyperlink("spell:"..snumitemlong);
					elseif ( inumcouleuritem == -4 ) then
						ChatMondialServeur_Tooltip:SetHyperlink("talent:"..snumitemlong);
					elseif ( inumcouleuritem == -5 ) then
						ChatMondialServeur_Tooltip:SetHyperlink("achievement:"..snumitemlong);
					elseif ( inumcouleuritem == -6 ) then
						--ChatMondialServeur_Tooltip:SetHyperlink("trade:"..snumitemlong);
						ChatMondialServeur_Tooltip:SetHyperlink("spell:"..snumitemcourt);
					elseif ( inumcouleuritem == -9 ) then
						_, snuminstance, _, _ = strsplit(":",snumitemlong);
						if ( snuminstance ) then
							snumregion = DBCS_Region_NumRegion_By_InstanceLock(tonumber(snuminstance));
							if ( snumregion ) then
								snewitemName = DBCS_Region_nom_region(snumregion);
								if ( snewitemName == snumregion ) then
									snewitemName = nil;
								end
							end
						end
						if ( snewitemName == nil ) then
							ChatMondialServeur_Tooltip:SetHyperlink("instancelock:"..snumitemlong);
						end
					elseif ( inumcouleuritem == -10 ) then
						ChatMondialServeur_Tooltip:SetHyperlink("currency:"..snumitemlong);
					elseif ( inumcouleuritem == -11 ) then
						--ChatMondialServeur_Tooltip:SetHyperlink("journal:"..snumitemlong);	--journal:0:317:1
					elseif ( inumcouleuritem == -12 ) then
						--ChatMondialServeur_Tooltip:SetHyperlink("battlepet:"..snumitemlong);
					elseif ( inumcouleuritem == -13 ) then
						--ChatMondialServeur_Tooltip:SetHyperlink("battlePetAbil:"..snumitemlong);
					--else	:	battlePetAbil:id:0:0:0	ou id:1644:276:260
					elseif ( inumcouleuritem == -14 ) then
						--ChatMondialServeur_Tooltip:SetHyperlink("garrfollower:"..snumitemlong);
					elseif ( inumcouleuritem == -15 ) then
						--ChatMondialServeur_Tooltip:SetHyperlink("garrmission:"..snumitemlong);
					elseif ( inumcouleuritem == -16 ) then
						--ChatMondialServeur_Tooltip:SetHyperlink("garrfollowerability:"..snumitemlong);
					else
						ChatMondialServeur_Tooltip:SetHyperlink("item:"..snumitemlong);
					end
					if ( inumcouleuritem == -9 ) then
					elseif ( inumcouleuritem == -11 ) then
					elseif ( inumcouleuritem == -12 ) then
					elseif ( inumcouleuritem == -13 ) then
					elseif ( inumcouleuritem == -14 ) then
					elseif ( inumcouleuritem == -15 ) then
					elseif ( inumcouleuritem == -16 ) then
					elseif ( snewitemName == nil ) then
						snewitemName = ChatMondialServeur_TooltipTextLeft1:GetText();
					end
					if ( snewitemName ) then
--TraceFrame:AddMessage("snewitemName = "..snewitemName);
						if ( inumcouleuritem == -1 or inumcouleuritem == -3 ) then
							b_saut_de_ligne = false;
--if ( DBCS_debug and DBCS_debug > 1 ) then
--DBCS_ecrirecodedutexte(snewitemName);
--end
							for i = 1 , strlen(snewitemName) do
								--if ( strsub(snewitemName,i,i) == "\n" ) then
								--if ( strsub(snewitemName,i,i+1) == "\124\110" ) then
								if ( strbyte(snewitemName,i,i) == 124 and strbyte(snewitemName,i+1,i+1) == 110 ) then
									b_saut_de_ligne = true;
								end
							end
							--ipos = strfind(snewitemName,"\n",1);
							--	strsub(schamp,1,1) == "\n"
							--if ( ipos ) then
							--if ( strlower(strsub(snewitemName,1,10)) == "composants" ) then
							if ( b_saut_de_ligne == true ) then
								newtexte = newtexte..sitem;
							else
								ipos = strfind(snewitemName,":",1);
								if ( ipos ) then
									snewitemName = strsub(snewitemName,ipos+2);
								end
								if ( inumcouleuritem == -1 ) then
									newtexte = newtexte.."|c"..shexcouleuritem.."|Henchant:"..snumitemlong.."|h["..snewitemName.."]|h|r";
								else
									newtexte = newtexte.."|c"..shexcouleuritem.."|Hspell:"..snumitemlong.."|h["..snewitemName.."]|h|r";
								end
							end
						elseif ( inumcouleuritem == -2 ) then
							newtexte = newtexte.."|c"..shexcouleuritem.."|Hquest:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						--elseif ( inumcouleuritem == -3 ) then
						--	newtexte = newtexte.."|c"..shexcouleuritem.."|Hspell:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						elseif ( inumcouleuritem == -4 ) then
							newtexte = newtexte.."|c"..shexcouleuritem.."|Htalent:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						elseif ( inumcouleuritem == -5 ) then
							newtexte = newtexte.."|c"..shexcouleuritem.."|Hachievement:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						elseif ( inumcouleuritem == -6 ) then
							newtexte = newtexte.."|c"..shexcouleuritem.."|Htrade:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						elseif ( inumcouleuritem == -9 ) then
							newtexte = newtexte.."|c"..shexcouleuritem.."|Hinstancelock:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						elseif ( inumcouleuritem == -10 ) then
							newtexte = newtexte.."|c"..shexcouleuritem.."|Hcurrency:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						--elseif ( inumcouleuritem == -11 ) then
						--	newtexte = newtexte.."|c"..shexcouleuritem.."|Hjournal:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						elseif ( inumcouleuritem == -12 ) then
							newtexte = newtexte.."|c"..shexcouleuritem.."|Hbattlepet:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						elseif ( inumcouleuritem == -13 ) then
							newtexte = newtexte.."|c"..shexcouleuritem.."|HbattlePetAbil:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						--garrfollower:154:4:100:630:171:172:0:0:77:39:8:0	violet	suivant de fief
						--garrfollower:155:2:94:600:6:0:0:0:0:0:0:0			vert	suivant du fief
						--meme couleur que des objets
						--vert = ff1eff00
						--elseif ( inumcouleuritem == -14 ) then
						--	newtexte = newtexte.."|c"..shexcouleuritem.."|Hgarrfollower:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						--garrmission:2		jaune
						--jaune = ffffff00
						--elseif ( inumcouleuritem == -15 ) then
						--	newtexte = newtexte.."|c"..shexcouleuritem.."|Hgarrmission:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						--garrfollowerability:100	bleu genre pnj
						--bleu foncé = ff4e96f7
						--elseif ( inumcouleuritem == -16 ) then
						--	newtexte = newtexte.."|c"..shexcouleuritem.."|Hgarrfollowerability:"..snumitemlong.."|h["..snewitemName.."]|h|r";
						else
							newtexte = newtexte..sitem;
						end
					else
						newtexte = newtexte..sitem;
					end
				else
					--newtexte = newtexte.."@@"..snomitem.."@"..inumcouleuritem.."@"..snumitemlong.."@@";
					snomobjetdslangue = snomitem;
--TraceFrame:AddMessage("snomobjetdslangue avant = "..snomobjetdslangue);
					itemName, _, _, _, _, _, _, _, _, _ = GetItemInfo("item:"..snumitemlong);
					if ( itemName ) then
						snomobjetdslangue = itemName;
					else
						ChatMondialServeur_Tooltip:SetHyperlink("item:"..snumitemlong);
						--ChatMondialServeur_Tooltip:Hide();
						itemName, _, _, _, _, _, _, _, _, _ = GetItemInfo("item:"..snumitemlong);
						if ( itemName ) then
							snomobjetdslangue = itemName;
						end
					end
--TraceFrame:AddMessage("snomobjetdslangue apres = "..snomobjetdslangue);
					newtexte = newtexte.."|c"..shexcouleuritem.."|Hitem:"..snumitemlong.."|h["..snomobjetdslangue.."]|h|r";
				end
				iposdebitem = iposfinitem +2;
			else
				iposdebitem = strlen(texte)+1;
			end
		else
			newtexte = newtexte..strsub(texte,iposfinitem+2);
			iposdebitem = -1;
		end
	end

	return newtexte;

end

--	CMS_GetItemLink
function CMS_GetItemLink(sitem)

	local ideb;
	local ipos;
	local snomitem, snumitemlong, shexcouleuritem, inumcouleuritem;
	local r, g, b, hex;
	local sreturn;
	local stype = "i";
	local itemName;
	local tablo;
	
local smot_milieu;
local ilen;
local smot_tout;

local iquality;
local squality;

--	"@@blabla@-7@10000@@
--	"@@blabla@1@10000:0:0:0@@
--	ou
--CMS_GetItemLink
--	"@@blabla@1@10000@@
--	en
--	"|cffffffff|Hitem:10000:0:0:0|h[blabla]|h|r")
--	ou
--	"|cffffffff|Henchant:10000|h[blabla]|h|r")

--	CMS_GetItemLink("@@blabla@-3@25000@@")
--CMS_GetItemLink("@@blabla@-7@10000@@");
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@blabla@-7@10000@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Vermine kobold@-7@6@@"));
--/script SendChatMessage(CMS_GetItemLink("@@blabla@-7@6@@"),"CHANNEL",this.language,ichat);
--/script SendChatMessage(CMS_GetItemLink("@@Vermine kobold@-7@10000@@"),"WHISPER",this.language,"Goeland");
--/script i=i+1;DEFAULT_CHAT_FRAME:AddMessage(i);SetItemRef("spell:"..i);
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Cerf-volant rohart@-3@68767@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Petit étalon blanc@-3@68768@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Petit raptor ivoire@-3@68769@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Bébé tigre spectral@-3@68810@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Invocation d'un elfe de la nuit punk@-3@68887@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Jeune dragonnet onyxien@-3@69002@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Drake onyxien@-3@69395@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Chiot du magma@-3@69452@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Jeune griffon@-3@69535@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Jeune coursier du vent@-3@69536@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Tigre zipao@-3@69539@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Moine pandaren@-3@69541@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Mini K.T.@-3@69677@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Invincible@-3@72286@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Invincible@-3@11923@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Reines d'Invincible@-5@4625:0180000000328C9D:1:1:29:10:4294967295:4294967295:4294967295:4294967295@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Reines d'Invincible@-5@4625:01800000006C73ED:1:99:99:99:4294967295:4294967295:4294967295:4294967295@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Grande fusée d'amour@-5@4627:01800000006C73ED:1:99:99:99:4294967295:4294967295:4294967295:4294967295@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Gladiateur courroucé@-5@4599:01800000006C73ED:1:99:99:99:4294967295:4294967295:4294967295:4294967295@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Deuillelombre@-5@4623:01800000006C73ED:1:99:99:99:4294967295:4294967295:4294967295:4294967295@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Et je forme la tête !@-5@4626:01800000006C73ED:1:99:99:99:4294967295:4294967295:4294967295:4294967295@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Retour de Mekkanivelle@-5@4786:01800000006C73ED:1:24:3:10:4294967295:4294967295:4294967295:4294967295@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@La chute de Zalazane@-5@4790:01800000006C73ED:1:24:3:10:4294967295:4294967295:4294967295:4294967295@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Reines d'Invincible@-5@5365:0180000000328C9D:1:1:29:10:4294967295:4294967295:4294967295:4294967295@@"));

--533	=	naxxramas
--631	=	Citadelle de la Couronne de glace
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Citadelle de la Couronne de glace@-9@0180000000328C9D:631:0:0@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Citadelle de la Couronne de glace@-9@0180000003251C4C:631:0:0@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@Citadelle de la Couronne de glace@-9@0180000003251C4C:631:2:2047@@"));
--instancelock:0180000000328C9D:631:0:63
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@blabla@-9@0180000000000000:631:0:0@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@blabla@-9@0180000000328C9D:1:0:0@@"));	--kalimdor
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@blabla@-9@0180000000328C9D:4:0:0@@"));	--kalimdor
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@blabla@-9@0180000000328C9D:631:0:0@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@blabla@-9@0180000000328C9D:631:0:63@@"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_GetItemLink("@@blabla@-9@0180000000328C9D:631:1:63@@"));

--/script i=i+1;DEFAULT_CHAT_FRAME:AddMessage(i);SetItemRef("achievement:"..i);

--/script DEFAULT_CHAT_FRAME:AddMessage("\|cffffffff\|Henchant:10000\|h\[blabla\]\|h\|r");

	ideb = 3;
	ipos = strfind(sitem,"@",ideb);
	snomitem = strsub(sitem,ideb,ipos-1);

	ideb = ipos + 1;
	ipos = strfind(sitem,"@",ideb);
	inumcouleuritem = tonumber(strsub(sitem,ideb,ipos-1));

	ideb = ipos +1;

	--if ( inumcouleuritem == -3 ) then
	--	stype = "s";
	--elseif ( inumcouleuritem == -2 ) then
	--	stype = "q";
	--elseif ( inumcouleuritem == -1 ) then
	--	stype = "e";
	--else
	--	stype = "i";
	--end
	--ipos = strfind(sitem,":",ideb);
	--if ( ipos ) then
	--else
	--	stype = "e";
	--end

	ipos = strfind(sitem,"@@#",ideb);
	if ( ipos == nil ) then
		ipos = strfind(sitem,"@@",ideb);
	end
	if ( ipos ) then
		snumitemlong = strsub(sitem,ideb,ipos-1);
	else
if ( CMS_debug == 1 ) then
TraceFrame:AddMessage("erreur CMS_GetItemLink : "..sitem);
end
	end

	shexcouleuritem = "|cffffffff";
	if ( inumcouleuritem ) then
		r, g, b, hex = GetItemQualityColor(inumcouleuritem);
		if ( hex ) then
			shexcouleuritem = "|c"..hex;
		end
	end

	if ( inumcouleuritem == -16 ) then																			-- 
			sreturn = "|cff4e96f7|Hgarrfollowerability:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -15 ) then																		-- 
			sreturn = "|cffffff00|Hgarrmission:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -14 ) then																		-- 
			sreturn = "|cff1eff00|Hgarrfollower:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -13 ) then																		-- validé pour wow 6.0
		if ( CMS_wow_build > CMS_wow_build_live ) then
			sreturn = "|cff4e96f7|HbattlePetAbil:"..snumitemlong.."|h["..snomitem.."]|h|r";
		else
			sreturn = "|cff00aa00|HbattlePetAbil:"..snumitemlong.."|h["..snomitem.."]|h|r";
		end
		--battlePetAbil:493:151:10:10
	elseif ( inumcouleuritem == -12 ) then																		-- validé pour wow 6.0, à modifier pour les couleur gris/blanc/épique ?
		if ( CMS_wow_build > CMS_wow_build_live ) then
		--battlepet:209:1:2:151:10:10:BattlePet-0-000002082866	-- vert
		--battlepet:92:1:3:155:11:11:BattlePet-0-000002082845	-- bleu
			_, _, squality, _ = strsplit(":",snumitemlong);
			iquality = tonumber(squality);
			if ( iquality == 3 ) then
				sreturn = "|cff0070dd|Hbattlepet:"..snumitemlong.."|h["..snomitem.."]|h|r";	--	bleu
			else
				sreturn = "|cff1eff00|Hbattlepet:"..snumitemlong.."|h["..snomitem.."]|h|r";	--	vert
			end
		else
			sreturn = "|cff00aa00|Hbattlepet:"..snumitemlong.."|h["..snomitem.."]|h|r";
		end
	elseif ( inumcouleuritem == -11 ) then																		-- validé pour wow 6.0
		sreturn = "|cff66bbff|Hjournal:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -10 ) then																		-- validé pour wow 6.0
		if ( CMS_wow_build > CMS_wow_build_live ) then
			sreturn = "|cffffffff|Hcurrency:"..snumitemlong.."|h["..snomitem.."]|h|r";
		else
			sreturn = "|cff00aa00|Hcurrency:"..snumitemlong.."|h["..snomitem.."]|h|r";
		end
	elseif ( inumcouleuritem == -9 ) then																		-- 
		sreturn = "|cffff8000|Hinstancelock:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -8 ) then																		-- 
		if ( CMS_wow_build > CMS_wow_build_live ) then
			sreturn = "|cff4e96f7|Hunit:Player-"..snumitemlong.."|h["..snomitem.."]|h|r";
		else
			sreturn = "|cff4e96f7|Hunit:"..snumitemlong.."|h["..snomitem.."]|h|r";
		end
	elseif ( inumcouleuritem == -7 ) then																		-- 
		if ( CMS_wow_build > CMS_wow_build_live ) then
			smot_tout = "unit:Creature-0-0-0-0-"..tonumber(snumitemlong).."-0000000000:"..snomitem;
		else
			smot_milieu = format("%X",tonumber(snumitemlong));
			ilen = strlen(smot_milieu);
			smot_tout = "unit:0xF53"..strrep("0",5-ilen)..smot_milieu.."00000000:"..snomitem;
		end
		sreturn = "|cff4e96f7|H"..smot_tout.."|h["..snomitem.."]|h|r";
		--sreturn = "|H"..smot_tout.."|h["..snomitem.."]|h";
		--sreturn = "|H"..smot_tout.."|h|h|r";
		--sreturn = "|cff4e96f7|Hunit:0xF53"..snumitemlong.."000000:"..snomitem.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -6 ) then																		-- validé pour wow 6.0
		sreturn = "|cffffd000|Htrade:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -5 ) then																		-- validé pour wow 6.0
		sreturn = "|cffffff00|Hachievement:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -4 ) then																		-- validé pour wow 6.0
		sreturn = "|cff71d5ff|Htalent:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -3 ) then																		-- validé pour wow 6.0
		sreturn = "|cff71d5ff|Hspell:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -2 ) then																		-- validé pour wow 6.0
		sreturn = "|cffffff00|Hquest:"..snumitemlong.."|h["..snomitem.."]|h|r";
	elseif ( inumcouleuritem == -1 ) then																		-- validé pour wow 6.0
		sreturn = "|cffffd000|Henchant:"..snumitemlong.."|h["..snomitem.."]|h|r";
	else																										-- validé pour wow 6.0
		itemName, _, _, _, _, _, _, _, _, _ = GetItemInfo("item:"..snumitemlong);
		if ( itemName ) then
			sreturn = shexcouleuritem.."|Hitem:"..snumitemlong.."|h["..itemName.."]|h|r";
		else
			sreturn = shexcouleuritem.."|Hitem:"..snumitemlong.."|h["..snomitem.."]|h|r";
--if ( CMS_debug == 1 ) then
			if ( DBOS ) then
				ipos = strfind(snumitemlong,":",1);
				if ( ipos ) then
					tablo = DBOS_detail(tonumber(strsub(snumitemlong,1,ipos-1)),"0:0:0:0:0:0:0:0:0:0");
					if ( tablo and tablo.type ) then
						sreturn = sreturn.."@";
					else
						sreturn = sreturn.."#";
					end
				else
					sreturn = sreturn.."@";
				end
			end
--end
		end
	end
	return sreturn;

end

--/script r,g,b,hex = GetItemQualityColor(5);DEFAULT_CHAT_FRAME:AddMessage(strsub(hex,3));

--			SendChatMessage("@M"..numcanal..CMS_versionclientwow.."@"..arg2.."@"..messageavecnumobjet,"CHANNEL",this.language,ichat);

--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_afficher_mot_en_couleur("phrase","couleur"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_afficher_mot_en_couleur("blabla","ffff8000"));
--/script DEFAULT_CHAT_FRAME:AddMessage(CMS_afficher_mot_en_couleur("[blabla]","ffff8000"));
--/script DEFAULT_CHAT_FRAME:AddMessage("coucou"..CMS_afficher_mot_en_couleur("[blabla]","ffff8000").."coucou");

--/script SendChatMessage("blabla","WHISPER",this.language,"goeland");
--/script SendChatMessage("coucou"..CMS_afficher_mot_en_couleur("[blabla]","ffff8000").."coucou","WHISPER",this.language,"goeland");
--/script SendChatMessage("coucou"..CMS_afficher_mot_en_couleur("blabla","ffff8000").."coucou","WHISPER",this.language,"goeland");
function CMS_afficher_mot_en_couleur(sphrase,scouleur)

local sreturn;

--	sreturn = "|c"..scouleur..sphrase.."|h|r";
	sreturn = "|c"..scouleur..sphrase.."|r";
	
	return sreturn;

end

function CMS_GetMotItem(sitem)

	local ideb;
	local ipos;
	local snomitem, snumitemcourt, snumitemlong, shexcouleuritem, inumcouleuritem;
	local i;
	local r, g, b, hex;
	local stype;
	local a1,a2,a3,a4,a5;
	local itemName;
	local itemRarity;
	
--	"|cffffffff|Hitem:10000:0:0:0|h[blabla]|h|r")
--	ou
--	"|cffffffff|Henchant:10000|h[blabla]|h|r")
--	en
--	"@@blabla@1@10000:0:0:0@@
--	ou
--	"@@blabla@1@10000@@

--	"|cffffffff|Hitem:10000:0:0:0|h[blabla]|h|r");
--	"@@blabla@1@10000:0:0:0@@

	--DBCS_ecrirecodedutexte(sitem);
	--TraceFrame:AddMessage(sitem);

	shexcouleuritem = strlower(strsub(sitem,3,10));

--	TraceFrame:AddMessage(strsub(sitem,13));

	inumcouleuritem = -1;

	stype = strsub(sitem,13,14);
	--stype2 = strsub(sitem,13,22);
	stype2, _ = strsplit(":",strsub(sitem,13));
	--TraceFrame:AddMessage(stype);
	-- item
	if ( stype == "it" ) then

		ideb = 18;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);

		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);

		ipos = strfind(snumitemlong,":");
		snumitemcourt = strsub(snumitemlong,1,ipos-1);

		itemName, _, itemRarity, _, _, _, _, _, _, _, _ = GetItemInfo("item:"..snumitemcourt..":0:0:0:0:0:0:0:0:0:0");
		if ( itemName ) then
			inumcouleuritem = itemRarity;
		else
			for i = 0, 7 do
				if ( inumcouleuritem == -1 ) then
					r, g, b, hex = GetItemQualityColor(i);
					if ( hex ) then
--TraceFrame:AddMessage(hex);
						--if ( hex == "|c"..shexcouleuritem ) then
						if ( strlower(hex) == shexcouleuritem ) then
							inumcouleuritem = i;
						end
					end
				end
			end
		end
	-- spell
	elseif ( stype == "sp" ) then
		ideb = 19;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -3;
--	-- journal			journal
	elseif ( stype == "jo" ) then
--TraceFrame:AddMessage(shexcouleuritem);
		ideb = 21;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -11;
--	-- currency			monnaies
	elseif ( stype == "cu" ) then
--TraceFrame:AddMessage(shexcouleuritem);
		ideb = 22;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -10;
--	-- instancelock
	elseif ( stype == "in" ) then
		ideb = 26;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -9;
	-- achievement
	elseif ( stype == "ac" ) then
		ideb = 25;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -5;
	-- quest
	elseif ( stype == "qu" ) then
		ideb = 19;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -2;
	-- talent
	elseif ( stype == "ta" ) then
		ideb = 20;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -4;
	-- trade
	elseif ( stype == "tr" ) then
		ideb = 19;
		ipos = strfind(sitem,"|h%[",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-1);
--TraceFrame:AddMessage("snumitemlong avant = "..snumitemlong);
		if ( CMS_wow_build > CMS_wow_build_live ) then
			a1, a2, a3,  _ = strsplit(":",snumitemlong);
			snumitemlong = a1..":"..a2..":"..a3;
		else
			a1, a2, a3, a4, a5, _ = strsplit(":",snumitemlong);
		--for a1,a2,a3,a4,a5 in string.gmatch(snumitemlong,"(%d+):(%p?%d+):(%p?%d+):(.+):(.+)") do
			--snumitemlong = a1..":"..a2..":"..a3..":"..a4..":0";
			snumitemlong = a1..":"..a2..":"..a3..":"..a4..":"..a5;
		--end
		end
--TraceFrame:AddMessage("snumitemlong apres = "..snumitemlong);
		ideb = ipos + 3;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -6;
--	--	battlePetAbil
	elseif ( stype2 == "battlePetAbil" ) then
--TraceFrame:AddMessage(shexcouleuritem);
		ideb = 27;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -13;
--	-- battlepet			mascotte
	elseif ( stype == "ba" ) then
--TraceFrame:AddMessage(shexcouleuritem);
		ideb = 23;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -12;
--	--	garrfollower
	elseif ( stype2 == "garrfollower" ) then
--TraceFrame:AddMessage(shexcouleuritem);
		ideb = 26;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -14;
--	--	garrmission
	elseif ( stype2 == "garrmission" ) then
--TraceFrame:AddMessage(shexcouleuritem);
		ideb = 25;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -15;
--	--	garrfollowerability
	elseif ( stype2 == "garrfollowerability" ) then
--TraceFrame:AddMessage(shexcouleuritem);
		ideb = 33;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
		inumcouleuritem = -16;
	-- enchant
	else
		ideb = 21;
		ipos = strfind(sitem,"h",ideb);
		snumitemlong = strsub(sitem,ideb,ipos-2);
		ideb = ipos + 2;
		ipos = strfind(sitem,"]",ideb);
		snomitem = strsub(sitem,ideb,ipos-1);
		snumitemcourt = snumitemlong;
	end

	return snomitem, snumitemcourt, snumitemlong, shexcouleuritem, inumcouleuritem;

end

function CMS_nomcanalbynum(numcanal)
-- numcanal doit etre du genre : 0012 pour Commerce - Capitales
-- numcanal doit etre du genre : 0014 pour RechercheGroupe - Capitales
-- numcanal doit etre du genre : 2161 pour Général - Maleterres de l'est (Eastern Plaguelands)

	local icontinent;
	local iregion;
	local izone;
	local snomzone;
	local snomregion;
	local i;
	local j;

	if ( numcanal ) then
	else
		return nil;
	end

	if ( strlen(numcanal) == 4 ) then
		snomregion = DBCS_Region_nom_region(strsub(numcanal,1,3));
		if ( snomregion == "" ) then
			icontinent = tonumber(strsub(numcanal,1,1));
			if ( icontinent ) then
				if ( icontinent > -1 and icontinent <= ChatMondialServeurRegionData.nb ) then
				else
					return nil;
				end
			else
				return nil;
			end
			iregion = tonumber(strsub(numcanal,2,3));
			if ( iregion ) then
				if ( iregion > -1 and iregion <= ChatMondialServeurRegionData[icontinent].nb ) then
				else
					return nil;
				end
			else
				return nil;
			end
			snomcontinent = "";
			for i = 0, ChatMondialServeurRegionData.nb do
				if ( ChatMondialServeurRegionData[i].index == icontinent ) then
					for j = 0, ChatMondialServeurRegionData[i].nb do
						if ( ChatMondialServeurRegionData[i][j].index == iregion ) then
							snomregion = ChatMondialServeurRegionData[i][j].name;
						end
					end
				end
			end
		end
		izone = tonumber(strsub(numcanal,4,4));
		if ( izone ) then
			if ( izone > 0 and izone <= ChatMondialServeurZoneData.nb ) then
			else
				return nil;
			end
		else
			return nil;
		end
		snomzone = "";
		for i = 1, ChatMondialServeurZoneData.nb do
			if ( ChatMondialServeurZoneData[i].index == izone ) then
				snomzone = ChatMondialServeurZoneData[i].name;
			end
		end
		if ( strsub(numcanal,1,3) == "001" ) then
			return snomzone;
		else
			return snomzone.." - "..(snomregion or "");
		end
	else
		return nil;
	end

end

function CMS_lienjoueurbynom(nom,inumligne)
--	"|Hplayer:"..PlayerName.."|h["..PlayerName.."]|h"

local nom2 = strlower(nom);
local nomfin = nom;
local sclasse;
local classColorTable;
local i;
local bfin;
local sGUID;

	if ( nom ) then
--local CMS_serveur = GetRealmName();
--TraceFrame:AddMessage("CMS_serveur = "..(CMS_serveur or ""));
--		if ( Prat3DB ) then
--TraceFrame:AddMessage("Prat3DB");
--			if ( Prat3DB["namespaces"] ) then
--TraceFrame:AddMessage("Prat3DB[namespaces]");
--				if ( Prat3DB["namespaces"]["Prat_PlayerNames"] ) then
--TraceFrame:AddMessage("Prat3DB[namespaces][Prat_PlayerNames]");
--					if ( Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"] ) then
--TraceFrame:AddMessage("Prat3DB[namespaces][Prat_PlayerNames][realm]");
--						if ( Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur] ) then
--TraceFrame:AddMessage("Prat3DB[namespaces][Prat_PlayerNames][realm][CMS_serveur]");
--							if ( Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur]["classes"] ) then
--TraceFrame:AddMessage("Prat3DB[namespaces][Prat_PlayerNames][realm][CMS_serveur][classes]");
--								if ( Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur]["classes"][nom2] ) then
--TraceFrame:AddMessage("Prat3DB[namespaces][Prat_PlayerNames][realm][CMS_serveur][classes][nom2]");
--								end
--							end
--						end
--					end
--				end
--			end
--		end
		if ( ( CMS_wow_build > CMS_wow_build_live ) or ( strsub(nom,1,2) == "0x" ) ) then
			sGUID = nom;
--/script SetItemRef("achievement:691:0180000000000007:0:0:0:-1:0:0:0:0");
--/script SetItemRef("achievement:691:0xF130005C8B070EF4:0:0:0:-1:0:0:0:0");
--/script SetItemRef("achievement:691:0xF130005C8B000000:0:0:0:-1:0:0:0:0");
--/script SetItemRef("unit:0xF130005C8B000000:bla");
--/script SetItemRef("achievement:691:F130000006000000:0:0:0:-1:0:0:0:0");
--/script SetItemRef("unit:0xF130000001000000:bla");
			--SetItemRef("achievement:690:"..strsub(sGUID,3)..":0:0:0:-1:0:0:0:0");
			--SetItemRef("achievement:691:"..strsub(sGUID,3)..":0:0:0:-1:0:0:0:0");
			ChatMondialServeur_TooltipTextLeft1:SetText(nil);
			ChatMondialServeur_Tooltip:SetOwner(WorldFrame,"ANCHOR_NONE");
			if ( CMS_wow_build > CMS_wow_build_live ) then
				ChatMondialServeur_Tooltip:SetHyperlink("achievement:691:Player-"..sGUID..":0:0:0:-1:0:0:0:0");
			else
				ChatMondialServeur_Tooltip:SetHyperlink("achievement:691:"..strsub(sGUID,3)..":0:0:0:-1:0:0:0:0");
			end
			--ChatMondialServeur_Tooltip:Show();
			ChatMondialServeur_TooltipTextLeft1:SetText(nil);
			if ( CMS_wow_build > CMS_wow_build_live ) then
				ChatMondialServeur_Tooltip:SetHyperlink("unit:Player-"..sGUID..":bla");
			else
				ChatMondialServeur_Tooltip:SetHyperlink("unit:"..sGUID..":bla");
			end
			--ChatMondialServeur_Tooltip:Show();
			nom = ChatMondialServeur_TooltipTextLeft1:GetText();
			if ( nom == nil ) then
				nom = sGUID;
			else
				nom2 = strlower(nom);
			end
--TraceFrame:AddMessage("nom = "..nom);
			if ( CMS_wow_build > CMS_wow_build_live ) then
				_, sclasse, _, _, _ = GetPlayerInfoByGUID("Player-"..sGUID);
			else
				_, sclasse, _, _, _ = GetPlayerInfoByGUID(sGUID);
			end
			if ( sclasse ) then
--TraceFrame:AddMessage("sclasse = "..sclasse);
				classColorTable = RAID_CLASS_COLORS[sclasse];
				if ( classColorTable ) then
					if ( CMS_wow_build > CMS_wow_build_live ) then
--if ( DBCS_debug and DBCS_debug > 1 ) then
--						nomfin = string.format("\124cff%.2x%.2x%.2x", classColorTable.r*255, classColorTable.g*255, classColorTable.b*255)..nom.."\124r"..":"..sGUID;
--else
						nomfin = string.format("\124cff%.2x%.2x%.2x", classColorTable.r*255, classColorTable.g*255, classColorTable.b*255)..nom.."\124r";
--end
					else
						if ( strsub(sGUID,1,5) == "0x018" ) then
							i = 6;
							bfin = false;
							while ( bfin == false ) do
								if ( strsub(sGUID,i,i) == "0" ) then
									i = i + 1;
								else
									bfin = true;
								end
							end
							nomfin = string.format("\124cff%.2x%.2x%.2x", classColorTable.r*255, classColorTable.g*255, classColorTable.b*255)..nom.."\124r"..":"..strsub(sGUID,i);
						else
							nomfin = string.format("\124cff%.2x%.2x%.2x", classColorTable.r*255, classColorTable.g*255, classColorTable.b*255)..nom.."\124r"..":"..sGUID;
						end
					end
				end
			end
		else
			if ( Prat3DB and Prat3DB["namespaces"] and Prat3DB["namespaces"]["Prat_PlayerNames"] and Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"] and Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur] and Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur]["classes"] and Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur]["classes"][nom2] ) then
				sclasse = Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur]["classes"][nom2];
--TraceFrame:AddMessage("sclasse = "..sclasse);
				classColorTable = RAID_CLASS_COLORS[sclasse];
				if ( classColorTable ) then
					nomfin = string.format("\124cff%.2x%.2x%.2x", classColorTable.r*255, classColorTable.g*255, classColorTable.b*255)..nom.."\124r";
--TraceFrame:AddMessage("nomfin = "..nomfin);
				end
			end
		end
		if ( Prat3DB and Prat3DB["namespaces"] and Prat3DB["namespaces"]["Prat_PlayerNames"] and Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"] and Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur] and Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur]["levels"] and Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur]["levels"][nom2] ) then
			nomfin = Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"][CMS_serveur]["levels"][nom2]..":"..nomfin;
--TraceFrame:AddMessage("nomfin = "..nomfin);
		end
--Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"]["Kirin Tor"]["classes"]["cygne"] = "PALADIN"
--Prat3DB["namespaces"]["Prat_PlayerNames"]["realm"]["Kirin Tor"]["levels"]["cygne"] = 80
		if ( inumligne ) then
			return "|Hplayer:"..nom..":"..inumligne.."|h["..nomfin.."]|h";
		else
			return "|Hplayer:"..nom.."|h["..nomfin.."]|h";
		end
	else
		return nil;
	end

end

function CMS_numcanalbyname(nomcanal)

	local numplacedumoins;
	local nomzone, inomzone;
	local nomregion, inomregion;
	local inomcontinent;
	local i;
	local j;
	local numcanal;
	local snumregion;

	if ( nomcanal ) then
		numplacedumoins = strfind(nomcanal," - ");
		if ( numplacedumoins ) then
--TraceFrame:AddMessage(numplacedumoins);
			if ( numplacedumoins > 0 ) then
				nomzone = strsub(nomcanal,1,numplacedumoins-1);
				if ( nomzone ) then
--TraceFrame:AddMessage(nomzone);
					inomzone = 0;
					for i = 1, ChatMondialServeurZoneData.nb do
						if ( ChatMondialServeurZoneData[i].name == nomzone ) then
							inomzone = ChatMondialServeurZoneData[i].index;
--TraceFrame:AddMessage(inomzone);
						end
					end
				else
					return nil;
				end
				nomregion = strsub(nomcanal,numplacedumoins+3);
--TraceFrame:AddMessage("["..nomzone.."]["..nomregion.."]");
				if ( nomregion ) then
					snumregion = DBCS_Region_numregion_depuis_nomregion(nomregion);
--TraceFrame:AddMessage(snumregion);
					if ( snumregion == "000" ) then
--TraceFrame:AddMessage(nomregion);
						inomcontinent = -1;
						inomregion = -1;
-- à optimiser en mettant 1 while
						for i = 0, ChatMondialServeurRegionData.nb do
							for j = 0, ChatMondialServeurRegionData[i].nb do
--TraceFrame:AddMessage(ChatMondialServeurRegionData[i][j].name);
--TraceFrame:AddMessage(" i = "..i.." , j = "..j);
								if ( ChatMondialServeurRegionData[i][j].name == nomregion ) then
									inomcontinent = ChatMondialServeurRegionData[i].index;
--TraceFrame:AddMessage(inomcontinent);
									inomregion = ChatMondialServeurRegionData[i][j].index;
--TraceFrame:AddMessage(inomregion);
								end
							end
						end	
						if ( inomcontinent == -1 ) then
							return nil;
						end
					else
						inomcontinent = strsub(snumregion,1,1);
						inomregion = strsub(snumregion,2);
						--inomcontinent = tonumber(strsub(snumregion,1,1));
						--inomregion = tonumber(strsub(snumregion,2));
						--if ( inomregion == nil ) then
						--	inomregion = strsub(snumregion,2);
						--end
					end
-- fin à optimiser
				else
					return nil;
				end
			else
				return nil;
			end
		else
			inomcontinent = 0;
			inomregion = 1;
			inomzone = 0;
			for i = 1, ChatMondialServeurZoneData.nb do
				if ( ChatMondialServeurZoneData[i].name == nomcanal ) then
					inomzone = ChatMondialServeurZoneData[i].index;
--TraceFrame:AddMessage(inomzone);
				end
			end
			if ( inomzone == 0 ) then
				return nil;
			end
		end
	else
		return nil;
	end

	if ( ( type(inomregion) == "number" ) and ( inomregion < 10 ) ) then
		numcanal = tostring(inomcontinent).."0"..tostring(inomregion)..""..tostring(inomzone);
	else
		numcanal = tostring(inomcontinent)..""..tostring(inomregion)..""..tostring(inomzone);
	end
	return numcanal;

end

function CMS_afficherevent(event,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15)

	local arglong = "";

	if ( event ) then
		arglong = event;
	end
	if ( arg1 ) then
		arglong = arglong.." 1 : "..arg1;
	end
	if ( arg2 ) then
		arglong = arglong.." 2 : "..arg2;
	end
	if ( arg3 ) then
		arglong = arglong.." 3 : "..arg3;
	end
	if ( arg4 ) then
		arglong = arglong.." 4 : "..arg4;
	end
	if ( arg5 ) then
		arglong = arglong.." 5 : "..arg5;
	end
	if ( arg6 ) then
		arglong = arglong.." 6 : "..arg6;
	end
	if ( arg7 ) then
		arglong = arglong.." 7 : "..arg7;
	end
	if ( arg8 ) then
		arglong = arglong.." 8 : "..arg8;
	end
	if ( arg9 ) then
		arglong = arglong.." 9 : "..arg9;
	end
	if ( arg10 ) then
		arglong = arglong.." 10 : "..arg10;
	end
	if ( arg11 ) then
		arglong = arglong.." 11 : "..arg11;
	end
	if ( arg12 ) then
		arglong = arglong.." 12 : "..arg12;
	end
	if ( arg13 ) then
		arglong = arglong.." 13 : "..arg13;
	end
	if ( arg14 ) then
		arglong = arglong.." 14 : "..arg14;
	end
	if ( arg15 ) then
		arglong = arglong.." 15 : "..arg15;
	end
	TraceFrame:AddMessage(arglong);

end

function CMS_trier_joueur(numcanal)

	local i;

	table.sort(CMStablochannel[numcanal].joueur_s);
	for i = 1, CMStablochannel[numcanal].nbj do
		if ( CMStablochannel[numcanal] == nil ) then
			TraceFrame:AddMessage("probl\195\168me avec le canal "..numcanal);
		else
			if ( CMStablochannel[numcanal].joueur_s[i] == nil ) then
				TraceFrame:AddMessage("probl\195\168me avec le canal "..numcanal.." et le joueur "..i);
			else
				CMStablochannel[numcanal].joueur_i[CMStablochannel[numcanal].joueur_s[i]] = i;
			end
		end
	end
	if ( CMS_cliquer == 1 ) then
		TraceFrame:AddMessage("liste des lecteurs du canal original : "..numcanal);
		for i = 1, CMStablochannel[numcanal].nbj do
			TraceFrame:AddMessage(CMStablochannel[numcanal].joueur_s[i]);
		end
	end

end

function CMS_sort_joueur(elem1, elem2)

TraceFrame:AddMessage("comparer : "..elem1.." et "..elem2);

	return elem1 < elem2;

end

-- ( pour les intéressés,l addon DBCS est dispo sur le site curse,il permet de calculer les % de drop,calcul le salaire moyen des mobs ( avec les objets ),liste 139 ensembles de sets,etc )

--SendAddonMessage("CMS","@ACMS@"..DBCS_getlocale.."@Z001@","WHISPER",DBCS_player);

--function CMS_error_CMS_testwhisperaddon(smessage)
--
----if ( CMS_debug > 1 ) then
----	TraceFrame:AddMessage(smessage);
----end
--
--	seterrorhandler(_ERRORMESSAGE);
--	CMS_whisper_dispo = 0;
--
--if ( CMS_debug == 1 ) then
--	TraceFrame:AddMessage("CMS : SendAddonMessage ne fonctionne pas avec WHISPER");
--end
--
--end

--/script CMS_testwhisperaddon()
--function CMS_testwhisperaddon()
--
----	SendAddonMessage( "prefix", "message" , "PARTY/RAID/GUILD/BATTLEGROUND" )	prefix+message = 254 octets max
----	event CHAT_MSG_ADDON	arg1 = prefix	arg2 = message	arg3 = "PARTY/RAID/GUILD/BATTLEGROUND"	arg4 = envoyeur
----	SendAddonMessage("prefix", "message" [,"type"] [,"target"]) 
----	WHISPER
--
--	--SendAddonMessage( "DBCS", "@ADBCS@"..DBCS_getlocale.."@SD01@CMS@" , "PARTY" );
--	--SendChatMessage
--	CMS_whisper_dispo = 1;
--	seterrorhandler(CMS_error_CMS_testwhisperaddon);
--	SendAddonMessage("CMS","@ACMS@frFR@Z001@","WHISPER",CMS_joueur);
--	seterrorhandler(_ERRORMESSAGE);
--if ( CMS_debug == 1 ) then
--	TraceFrame:AddMessage("CMS : SendAddonMessage fonctionne avec WHISPER");
--end
--
--end

--/script CMS_debug_on()
function CMS_debug_on()

	CMS_debug = 1;
	CMS_config.debug = CMS_debug;

end

--/script CMS_debug_off()
function CMS_debug_off()

	CMS_debug = 0;
	CMS_config.debug = CMS_debug;

end

function CMS_SendChatMessage(val1,val2,val3,val4)

	SendChatMessageTimer_SendChatMessage_lent(val1,val2,val3,val4);

end
