local valuedText = common.CreateValuedText()
local formatVT = "<html fontname='AllodsSystem' shadow='1'><rs class='color'><r name='addon'/><r name='text'/></rs></html>"
valuedText:SetFormat(userMods.ToWString(formatVT))
local ADDONname = common.GetAddonName()
------------------------------------------------------------------
------ Loging To Chat
------------------------------------------------------------------
---- output in Chat. created by icreator(EDS) 2011/01/23
--- initial ref
--- Chat...Chat
local wtChat = nil
local chatRows = 0 --- for clear buffer after show messages

--- поиск окна системного чата
--- выдает контейнер чата и главное его окно
function GetSysChatContainer()
	--- найдем окно чата
	--- Chat..Chat
	---local w = getNamedChild(stateMainForm, "Chat", false)
	local parents = 2
	local w = stateMainForm:GetChildUnchecked("Chat", false)
	if not w then
		--- главня форма не найдена - найден по ребенку
		w = stateMainForm:GetChildUnchecked("Chat", true)
	else
		w = w:GetChildUnchecked("Chat", true)
	end
	if not w then ---- 2.0.06.13 [26.05.2011] 
		w = stateMainForm:GetChildUnchecked("ChatLog", false)
		---getAllChildrensOfWidget("ChatLog",w, "PushBack")
		w = w:GetChildUnchecked("Container", true)
		if w then parents = 3 end
	end
	
	return w, wtGetNumParents(w, parents)
end

function LogToChatVT(valuedText, name, toWW)
--- вывод в чат ValuedText
	name = name or ADDONname
	--- выведем в WhisperWindow
	if toWW then LogToChatWWVT(valuedText, name) end
	--- и попробуем вывести в системной чат
	if not wtChat then wtChat = GetSysChatContainer() end
	if wtChat and wtChat.PushFrontValuedText then
		--- запомним что 1 строчку в системный час добавили
		chatRows =  chatRows + 1
		valuedText:SetVal( "addon", userMods.ToWString(name..": ") )
		wtChat:PushFrontValuedText( valuedText )
	end
end
function LogToChatWWVT(valuedText, name)

	local sender = name or ADDONname --- object.GetName(avatar.GetId())
	if not common.IsWString(sender) then sender = userMods.ToWString(sender) end
	local senderId = avatar.IsExist() and avatar.GetId()
	local chatType = CHAT_TYPE_NOTICE --- -1 ---CHAT_TYPE_NOTICE ---CHAT_TYPE_WHISPER --- = -1 --- от аддонов
	local recipient = sender
	userMods.SendEvent("EVENT_CHAT_MESSAGE_WITH_OBJECTS", { msg = valuedText, chatType = chatType, sender = sender, isEcho=true, isAlive=true, recipient = recipient, senderId = senderId})

end

--[[ semd message to chat and WishperWindow chat
 message , color,
 toWW = true|false|nil
]]
function LogToChat(message, color, toWW)

	valuedText:ClearValues() --- обязательно очистим
	valuedText:SetClassVal( "color", color or "LogColorYellow" )
	if not common.IsWString( message ) then	message = userMods.ToWString(message) end
	valuedText:SetVal( "text", message )
	LogToChatVT(valuedText, ADDONname, toWW)

end
--- call by "EVENT_SECOND_TIMER" - for clear messages from chat
function ClearChat( size )
--- очистка контейнара от выведенных нами строк - чтобы он не переполнился
-- и не тормозил потом
	if chatRows < 1 then return end
	if wtChat then
		for i=1, size or math.ceil( chatRows / 30 ) + 1 do
			if chatRows < 1 then return end
			chatRows = chatRows - 1
			wtChat:PopBack()
		end
	else
		wtChat = GetSysChatContainer()
	end
end
------------------------------------------------------------------------------------

--- Log error mess to Chat
function ErrToChat(mess)
	LogToChat("ERROR: "..mess, "LogColorRed", 18)
end


function getAllChildrensOfWidget(tab,widget, metod)
	local childrens = widget:GetNamedChildren()
	for _, w in childrens do
		local tab1 = tab .. ":" .. w:GetName()
		if metod and w[metod] then tab1 = tab1 .. " proc.".. metod end
		LogInfo (tab1)
		getAllChildrensOfWidget(tab1,w)
	end
end

function testAllMainForms()
	local childrens = stateMainForm:GetNamedChildren()
	for _, w in childrens do
		if string.lower(w:GetName()) == "mainform" then getAllChildrensOfWidget("+",w) end
	end
end

function getNamedChild( w, name, recursive )
	local ch = w:GetChildUnchecked(name, recursive )
	if ch then
		return ch
	else
		LogInfo(" ERROR: can't find widget \"", name,"\" in parent \"", w:GetName(), "\"" )
		LogInfo( w:GetName(), " childs:" )
		for _, ww in w:GetNamedChildren() do
			LogInfo (ww:GetName())
		end
	end
end

wtGetAllParents = function(w)
	if w.GetParent then
		local pr = w:GetParent()
		if pr then
			return wtGetAllParents(pr)..":"..w:GetName()
		end
	end
	if w.GetName then return w:GetName() end
	return ""

end

--- возвращает ролителя выше на Номер
wtGetNumParents = function(w, parents)
	if parents > 0 and w.GetParent then
		local pr = w:GetParent()
		---LogInfo( pr:GetName() )
		if pr then
			return wtGetNumParents(pr, parents-1)
		end
	end
	return w
end