-- Version 0.31
-- 12.05.2005
-- For updates visit http://www.curse-gaming.com/mod.php?addid=1103


TITAN_FRIENDSX_ID = "FriendsX"

NumFriendsOnline = 0;
NumGuildsOnline = 0;
NumFriends = 0;
NumGuilds = 0;


function TitanPanelFriendsXButton_OnLoad()
	this.registry = { 
		id = TITAN_FRIENDSX_ID,
		menuText = FRIENDSX_MENU_TEXT, 
		buttonTextFunction = "TitanPanelFriendsXButton_GetButtonText", 
		tooltipTitle = FRIENDSX_TOOLTIP,
		tooltipTextFunction = "TitanPanelFriendsXButton_GetTooltipText", 
		
		savedVariables = {
			ShowLabelText = 1,
			FriendsCount = 1,
			FriendsShowOnline = 1,
			FriendsMarkArea = 1,
			GuildCount = 1,
			GuildShowOnline = 1,
			GuildMarkArea = 1,
			
		}
	};
		this:RegisterEvent("FRIENDLIST_SHOW");
		this:RegisterEvent("FRIENDLIST_UPDATE");
		this:RegisterEvent("GUILD_ROSTER_SHOW");
		this:RegisterEvent("GUILD_ROSTER_UPDATE");
		--this:RegisterEvent("VARIABLES_LOADED");
		--this:RegisterEvent("PLAYER_GUILD_UPDATE");


end


function TitanPanelFriendsXButton_OnEnter()

	--Sea.IO.print("FriendsXButton_OnEnter Event");
	ShowFriends();

end

function TitanPanelFriendsXButton_OnEvent(event)
	
	--TitanPanelButton_UpdateTooltip();
	--if (event == "VARIABLES_LOADED") then
	--	GuildRoster();
	--	Sea.IO.print("VARIABLES_LOADED Event");
	--	ShowFriends();
	--else
	--	Sea.IO.print(event);
		TitanPanelButton_UpdateButton(TITAN_FRIENDSX_ID);
	--end
end


function TitanPanelFriendsXButton_GetButtonText(id)
	local id = TitanUtils_GetButton(id, true);
	NumFriends = GetNumFriends();
	NumFriendsOnline = 0;
	NumGuilds = GetNumGuildMembers();
	NumGuildsOnline = 0;
	local FriendInSameArea = 0;
	local GuildInSameArea = 0;
	local buttonRichText = "";

	local friend_name, friend_level, friend_class, friend_area, friend_connected
	local guild_name, guild_rank, guild_rankIndex, guild_level, guild_class, guild_zone, guild_group, guild_note, guild_officernote, guild_online
	local friendIndex
	local guildIndex
	local CharName = "";

	CharName = UnitName("player");

		-- get a count of the number of online friends
		for friendIndex=1, NumFriends do
			friend_name, friend_level, friend_class, friend_area, friend_connected = GetFriendInfo(friendIndex);
			if (CharName ~= friend_name) then
				if ( friend_connected ) then
					NumFriendsOnline = NumFriendsOnline + 1;
				end
				if (friend_area == GetZoneText()) then
					FriendInSameArea = FriendInSameArea + 1;
				end
			end 
		end

	-- get a count of the number of online guild members
	for guildIndex=1, NumGuilds do
		guild_name, guild_rank, guild_rankIndex, guild_level, guild_class, guild_zone, guild_group, guild_note, guild_officernote, guild_online = GetGuildRosterInfo(guildIndex);
		if (CharName ~= guild_name) then
			if ( guild_online ) then
				NumGuildsOnline = NumGuildsOnline + 1;
				if (guild_zone == GetZoneText()) then
					GuildInSameArea = GuildInSameArea + 1;
				end
			end
		end
	end


	-- Create Button Text depending on options

	if ((TitanGetVar(TITAN_FRIENDSX_ID, "FriendsCount")) and (TitanGetVar(TITAN_FRIENDSX_ID, "GuildCount"))) then
		--Sea.IO.print("Beide Counts an");
		buttonRichText = format(FRIENDSX_BUTTON_TEXT, TitanUtils_GetGreenText(NumFriendsOnline+NumGuildsOnline), TitanUtils_GetHighlightText(NumFriends+NumGuilds), TitanUtils_GetRedText(GuildInSameArea + FriendInSameArea));
	elseif ((TitanGetVar(TITAN_FRIENDSX_ID, "FriendsCount")) and (TitanGetVar(TITAN_FRIENDSX_ID, "GuildCount") == nil)) then
		buttonRichText = format(FRIENDSX_BUTTON_TEXT, TitanUtils_GetGreenText(NumFriendsOnline), TitanUtils_GetHighlightText(NumFriends), TitanUtils_GetRedText(FriendInSameArea));
		--Sea.IO.print("Nur Friend Count an");
	elseif ((TitanGetVar(TITAN_FRIENDSX_ID, "FriendsCount") == nil) and (TitanGetVar(TITAN_FRIENDSX_ID, "GuildCount"))) then
		--Sea.IO.print("nur gild count an");
		buttonRichText = format(FRIENDSX_BUTTON_TEXT, TitanUtils_GetGreenText(NumGuildsOnline), TitanUtils_GetHighlightText(NumGuilds), TitanUtils_GetRedText(GuildInSameArea));
	else
		buttonRichText = format(FRIENDSX_BUTTON_TEXT, TitanUtils_GetGreenText("-"), TitanUtils_GetHighlightText("-"), TitanUtils_GetRedText("-"));
	end
	return FRIENDSX_BUTTON_LABEL, buttonRichText;

end


function TitanPanelFriendsXButton_GetTooltipText()
	--local NumFriends = GetNumFriends();
	--local NumGuilds = GetNumGuildMembers();
	local tooltipRichText = "";


	local friend_name, friend_level, friend_class, friend_area, friend_connected;
	local friendIndex;
	local guild_name, guild_rank, guild_rankIndex, guild_level, guild_class, guild_zone, guild_group, guild_note, guild_officernote, guild_online;
	local guildIndex;
	local CharName = "";

	CharName = UnitName("player");

	if (TitanGetVar(TITAN_FRIENDSX_ID, "FriendsShowOnline")) then

		if (NumFriendsOnline > 0) then
			tooltipRichText = tooltipRichText.."\n"..TitanUtils_GetGreenText(FRIENDSX_FRIENDS).."\n";
			for friendIndex=1, NumFriends do
				friend_name, friend_level, friend_class, friend_area, friend_connected = GetFriendInfo(friendIndex);
				if (CharName ~= friend_name) then
					if (friend_connected) then
						if ((friend_area == GetZoneText()) and (TitanGetVar(TITAN_FRIENDSX_ID, "FriendsMarkArea"))) then
							tooltipRichText = tooltipRichText..TitanUtils_GetRedText(friend_name)..TitanUtils_GetHighlightText(" - "..friend_area.." ["..friend_level.." "..friend_class.."]").."\n";
						else
							tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(friend_name)..TitanUtils_GetHighlightText(" - "..friend_area.." ["..friend_level.." "..friend_class.."]").."\n";
						end
					end
				end
			end
		end
	end

	if (TitanGetVar(TITAN_FRIENDSX_ID, "GuildShowOnline")) then
	
		if (NumGuildsOnline > 0) then
			tooltipRichText = tooltipRichText.."\n"..TitanUtils_GetGreenText(FRIENDSX_GUILD).."\n";
			for guildIndex=1, NumGuilds do
				guild_name, guild_rank, guild_rankIndex, guild_level, guild_class, guild_zone, guild_group, guild_note, guild_officernote, guild_online = GetGuildRosterInfo(guildIndex);
				if (CharName ~= guild_name) then
					if ( (guild_online)) then
						if ((guild_zone == GetZoneText()) and (TitanGetVar(TITAN_FRIENDSX_ID, "GuildMarkArea"))) then
							tooltipRichText = tooltipRichText..TitanUtils_GetRedText(guild_name)..TitanUtils_GetHighlightText(" - "..guild_zone.." ["..guild_level.." "..guild_class.."]").."\n";				
						else
							tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(guild_name)..TitanUtils_GetHighlightText(" - "..guild_zone.." ["..guild_level.." "..guild_class.."]").."\n";				
						end
					end
				end
			end
		end
	end
	if (tooltipRichtext == TITAN_FRIENDSX_ID) then
		tooltipRichText = tooltipRichText..TitanUtils_GetNormalText(FRIENDSX_NOBODY_ONLINE_TOOLTIP);
	else
		-- remove the last \n
		tooltipRichText = string.sub(tooltipRichText, 1, string.len(tooltipRichText)-1);
	end

	return tooltipRichText;
end


function Whisper()
	-- yes its the same like kragusī one :) nice job!
	if ( not ChatFrameEditBox:IsVisible() ) then
		ChatFrame_OpenChat("/w "..this.value.." ");
	else
		ChatFrameEditBox:SetText("/w "..this.value.." ");
	end
end


function invite()
	InviteByName(this.value);		
end


function TitanPanelRightClickMenu_PrepareFriendsXMenu()


	if (IsShiftKeyDown() ) then
		-- Creater Wisper menu

		local guild_name, guild_rank, guild_rankIndex, guild_level, guild_class, guild_zone, guild_group, guild_note, guild_officernote, guild_online
		local friend_name, friend_level, friend_class, friend_area, friend_connected;
		local Index = 0;
		local CharName = "";

		CharName = UnitName("player");		

		info = {};
		info.text = TitanUtils_GetNormalText("Whisper");
		info.notClickable = 1;
		UIDropDownMenu_AddButton(info);



		info = {};
		info.text = TitanUtils_GetGreenText(FRIENDSX_FRIENDS);
		info.notClickable = 1;
		UIDropDownMenu_AddButton(info);

		-- get online friends
		for Index=1, NumFriends do
			friend_name, friend_level, friend_class, friend_area, friend_connected = GetFriendInfo(Index);
			if ( friend_connected and CharName ~= friend_name) then
				info = {};
				info.text = friend_name;
				info.func = Whisper;
				info.value = friend_name;
				UIDropDownMenu_AddButton(info);
			end
		end

		info = {};
		info.text = TitanUtils_GetGreenText(FRIENDSX_GUILD);
		info.notClickable = 1
		UIDropDownMenu_AddButton(info);

		-- get online guild people
		for Index=1, NumGuilds do
			guild_name, guild_rank, guild_rankIndex, guild_level, guild_class, guild_zone, guild_group, guild_note, guild_officernote, guild_online = GetGuildRosterInfo(Index);
			if ( guild_online and CharName ~= guild_name) then
				info = {};
				info.text = guild_name;
				info.func = Whisper;
				info.value = guild_name;
				UIDropDownMenu_AddButton(info);
			end
		end


	elseif (IsControlKeyDown() ) then

		-- Create invite menu

		local guild_name, guild_rank, guild_rankIndex, guild_level, guild_class, guild_zone, guild_group, guild_note, guild_officernote, guild_online
		local friend_name, friend_level, friend_class, friend_area, friend_connected;
		local Index = 0;
		local CharName = "";

		CharName = UnitName("player");		


		info = {};
		info.text = TitanUtils_GetNormalText("Invite");
		info.notClickable = 1;
		UIDropDownMenu_AddButton(info);


		info = {};
		info.text = TitanUtils_GetGreenText(FRIENDSX_FRIENDS);
		info.notClickable = 1;
		UIDropDownMenu_AddButton(info);

		-- get online friends
		for Index=1, NumFriends do
			friend_name, friend_level, friend_class, friend_area, friend_connected = GetFriendInfo(Index);
			if ( friend_connected and CharName ~= friend_name) then
				info = {};
				info.text = friend_name;
				info.func = invite;
				info.value = friend_name;
				UIDropDownMenu_AddButton(info);
			end
		end

		info = {};
		info.text = TitanUtils_GetGreenText(FRIENDSX_GUILD);
		info.notClickable = 1
		UIDropDownMenu_AddButton(info);

		-- get online guild people
		for Index=1, NumGuilds do
			guild_name, guild_rank, guild_rankIndex, guild_level, guild_class, guild_zone, guild_group, guild_note, guild_officernote, guild_online = GetGuildRosterInfo(Index);
			if ( guild_online and CharName ~= guild_name) then
				info = {};
				info.text = guild_name;
				info.func = invite;
				info.value = guild_name_name;
				UIDropDownMenu_AddButton(info);
			end
		end


	else

		local id = "FriendsX";
		local info;
		TitanPanelRightClickMenu_AddTitle(TitanPlugins[id].menuText);

		-- FRIEND OPTIONS
		info = {};
		info.text = TitanUtils_GetGreenText(FRIENDSX_FRIENDS_OPTIONS);
		info.notClickable = 1
		UIDropDownMenu_AddButton(info);

		info = {};
		info.text = FRIENDSX_FRIENDS_OPTIONS_COUNT;
		info.func = function()
			TitanToggleVar(TITAN_FRIENDSX_ID, "FriendsCount");
			--TitanPanelSettings.FriendsCount = TitanUtils_Toggle(TitanPanelSettings.FriendsCount);
			TitanPanelButton_UpdateButton(TITAN_FRIENDSX_ID);
		end
		info.keepShownOnClick = 1;
		info.checked = 	TitanGetVar(TITAN_FRIENDSX_ID, "FriendsCount");
		UIDropDownMenu_AddButton(info);
	
		info = {};
		info.text = FRIENDSX_FRIENDS_OPTIONS_SHOW_ONLINE_TOOLTIP;
		info.func = function()
			TitanToggleVar(TITAN_FRIENDSX_ID, "FriendsShowOnline");
		end
		info.keepShownOnClick = 1;
		info.checked = 	TitanGetVar(TITAN_FRIENDSX_ID, "FriendsShowOnline");
		UIDropDownMenu_AddButton(info);

		info = {};
		info.text = FRIENDSX_FRIENDS_OPTIONS_MARK_AREA;
		info.func = function()
			TitanToggleVar(TITAN_FRIENDSX_ID, "FriendsMarkArea");
		end
		info.keepShownOnClick = 1;
		info.checked = 	TitanGetVar(TITAN_FRIENDSX_ID, "FriendsMarkArea");
		UIDropDownMenu_AddButton(info);


		-- GUILD OPTIONS
		info = {};
		info.text = TitanUtils_GetGreenText(FRIENDSX_GUILD_OPTIONS);
		info.notClickable = 1;
		UIDropDownMenu_AddButton(info);


		info = {};
		info.text = FRIENDSX_GUILD_OPTIONS_COUNT;
		info.func = function()
			TitanToggleVar(TITAN_FRIENDSX_ID, "GuildCount");
			TitanPanelButton_UpdateButton(TITAN_FRIENDSX_ID);
		end
		info.keepShownOnClick = 1;
		info.checked = 	TitanGetVar(TITAN_FRIENDSX_ID, "GuildCount");
		UIDropDownMenu_AddButton(info);

		info = {};
		info.text = FRIENDSX_GUILD_OPTIONS_SHOW_ONLINE_TOOLTIP;
		info.func = function()
			TitanToggleVar(TITAN_FRIENDSX_ID, "GuildShowOnline");
		end
		info.keepShownOnClick = 1;
		info.checked = 	TitanGetVar(TITAN_FRIENDSX_ID, "GuildShowOnline");
		UIDropDownMenu_AddButton(info);

		info = {};
		info.text = FRIENDSX_GUILD_OPTIONS_MARK_AREA;
		info.func = function()
			TitanToggleVar(TITAN_FRIENDSX_ID, "GuildMarkArea");
		end
		info.keepShownOnClick = 1;
		info.checked = 	TitanGetVar(TITAN_FRIENDSX_ID, "GuildMarkArea");
		UIDropDownMenu_AddButton(info);

		TitanPanelRightClickMenu_AddSpacer();	

		TitanPanelRightClickMenu_AddToggleLabelText(TITAN_FRIENDSX_ID);	
		TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, id, TITAN_PANEL_MENU_FUNC_HIDE);

	end

end