
ZoneFadeInDuration = 0.5;
ZoneHoldDuration = 1.0;
ZoneFadeOutDuration = 2.0;
ZonePVPType = nil;

function SetZoneText(showZone)
	local pvpType, isSubZonePvP, factionName = GetZonePVPInfo();
	PVPArenaTextString:SetText("");
	PVPInfoTextString:SetText("");
	local pvpTextString = PVPInfoTextString;
	if isSubZonePvP then
		pvpTextString = PVPArenaTextString;
	end

	if pvpType == "sanctuary" then
		pvpTextString:SetText(SANCTUARY_TERRITORY);
		pvpTextString:SetTextColor(0.41, 0.8, 0.94);
		ZoneTextString:SetTextColor(0.41, 0.8, 0.94);
		SubZoneTextString:SetTextColor(0.41, 0.8, 0.94);
	elseif pvpType == "arena" then
		pvpTextString:SetText(FREE_FOR_ALL_TERRITORY);
		pvpTextString:SetTextColor(1.0, 0.1, 0.1);
		ZoneTextString:SetTextColor(1.0, 0.1, 0.1);
		SubZoneTextString:SetTextColor(1.0, 0.1, 0.1);
	elseif pvpType == "friendly" then
		pvpTextString:SetFormattedText(FACTION_CONTROLLED_TERRITORY, factionName);
		pvpTextString:SetTextColor(0.1, 1.0, 0.1);
		ZoneTextString:SetTextColor(0.1, 1.0, 0.1);
		SubZoneTextString:SetTextColor(0.1, 1.0, 0.1);
	elseif pvpType == "hostile" then
		pvpTextString:SetFormattedText(FACTION_CONTROLLED_TERRITORY, factionName);
		pvpTextString:SetTextColor(1.0, 0.1, 0.1);
		ZoneTextString:SetTextColor(1.0, 0.1, 0.1);
		SubZoneTextString:SetTextColor(1.0, 0.1, 0.1);
	elseif pvpType == "contested" then
		pvpTextString:SetText(CONTESTED_TERRITORY);
		pvpTextString:SetTextColor(1.0, 0.7, 0);
		ZoneTextString:SetTextColor(1.0, 0.7, 0);
		SubZoneTextString:SetTextColor(1.0, 0.7, 0);
	elseif pvpType == "combat" then
		pvpTextString:SetText(COMBAT_ZONE);
		pvpTextString:SetTextColor(1.0, 0.1, 0.1);
		ZoneTextString:SetTextColor(1.0, 0.1, 0.1);
		SubZoneTextString:SetTextColor(1.0, 0.1, 0.1);
	else
		ZoneTextString:SetTextColor(1.0, 0.9294, 0.7607);
		SubZoneTextString:SetTextColor(1.0, 0.9294, 0.7607);
	end

	if ZonePVPType ~= pvpType then
		ZonePVPType = pvpType;
--				FadingFrame_Show(ZoneTextFrame);
	elseif not showZone then
		PVPInfoTextString:SetText("");
		SubZoneTextString:SetPoint("TOP", "ZoneTextString", "BOTTOM", 0, 0);
	end

	if PVPInfoTextString:GetText() == "" then
		SubZoneTextString:SetPoint("TOP", "ZoneTextString", "BOTTOM", 0, 0);
	else
		SubZoneTextString:SetPoint("TOP", "PVPInfoTextString", "BOTTOM", 0, 0);
	end
end

function ZoneText_OnLoad(self)
	FadingFrame_OnLoad(self);
	FadingFrame_SetFadeInTime(self, ZoneFadeInDuration);
	FadingFrame_SetHoldTime(self, ZoneHoldDuration);
	FadingFrame_SetFadeOutTime(self, ZoneFadeOutDuration);
	self:RegisterEvent("ZONE_CHANGED");
	self:RegisterEvent("ZONE_CHANGED_INDOORS");
	self:RegisterEvent("ZONE_CHANGED_NEW_AREA");
	self.zoneText = "";
	ZonePVPType = nil;
end

function ZoneText_OnEvent(self, event, ...)
	local showZoneText = false;	
	local zoneText = GetZoneText();
	if (zoneText ~= self.zoneText) or (event == "ZONE_CHANGED_NEW_AREA") then
		self.zoneText = zoneText;
		ZoneTextString:SetText( zoneText );
		showZoneText = true;
		SetZoneText( showZoneText );
		FadingFrame_Show( self );
	end
	
	local subzoneText = GetSubZoneText();
	if ( subzoneText == "" and not showZoneText) then
		subzoneText = zoneText;
	end
	SubZoneTextString:SetText( "" );

	if subzoneText == zoneText then
		showZoneText = false;
		if not self:IsShown() then
			SubZoneTextString:SetText( subzoneText );
			SetZoneText( showZoneText );
			FadingFrame_Show( SubZoneTextFrame );
		end
	else
		if self:IsShown() then
			showZoneText = true;
		end
		SubZoneTextString:SetText( subzoneText );
		SetZoneText( showZoneText );
		FadingFrame_Show( SubZoneTextFrame );
	end
end

function SubZoneText_OnLoad(self)
	FadingFrame_OnLoad(self);
	FadingFrame_SetFadeInTime(self, ZoneFadeInDuration);
	FadingFrame_SetHoldTime(self, ZoneHoldDuration);
	FadingFrame_SetFadeOutTime(self, ZoneFadeOutDuration);
	PVPArenaTextString:SetTextColor(1.0, 0.1, 0.1);
	SetZoneText(true);
	SubZoneTextString:SetText(GetSubZoneText());
end

AUTOFOLLOW_STATUS_FADETIME = 4.0;

function AutoFollowStatus_OnLoad(self)
	self:RegisterEvent("AUTOFOLLOW_BEGIN");
	self:RegisterEvent("AUTOFOLLOW_END");
	self:RegisterEvent("PLAYER_ENTERING_WORLD");
end

function AutoFollowStatus_OnEvent(self, event, ...)
	if event == "AUTOFOLLOW_BEGIN" then
		local arg1 = ...;
		self.unit = arg1;
		self.fadeTime = nil;
		self:SetAlpha(1.0);
		AutoFollowStatusText:SetFormattedText(AUTOFOLLOWSTART,self.unit);
		self:Show();
	end
	if event == "AUTOFOLLOW_END" then
		self.fadeTime = AUTOFOLLOW_STATUS_FADETIME;
		AutoFollowStatusText:SetFormattedText(AUTOFOLLOWSTOP,self.unit);
		self:Show();
	end
	if event == "PLAYER_ENTERING_WORLD" then
		self:Hide();
	end
end

function AutoFollowStatus_OnUpdate(self, elapsed)
	if self.fadeTime then
		if elapsed >= self.fadeTime then
			self:Hide();
		else
			self.fadeTime = self.fadeTime - elapsed;
			local alpha = self.fadeTime / AUTOFOLLOW_STATUS_FADETIME;
			self:SetAlpha(alpha);
		end
	end
end
