local Moog_HudClass = {
	[MOOGHUD_CLASS_MAGE] =	"00FFFF",
	[MOOGHUD_CLASS_WARLOCK] =	"8D54FB",
	[MOOGHUD_CLASS_PRIEST] =	"FFFFFF",
	[MOOGHUD_CLASS_DRUID] =	"FF8A00",
	[MOOGHUD_CLASS_SHAMAN] =	"FF71A8",
	[MOOGHUD_CLASS_PALADIN] =	"FF71A8",
	[MOOGHUD_CLASS_ROGUE] =	"FFFF00",
	[MOOGHUD_CLASS_HUNTER] =	"00FF00",
	[MOOGHUD_CLASS_WARRIOR] =	"B39442",
};

local Moog_HudRep = { "FF4444", "DD4444", "DD7744", "BB9944", "44DD44", "55EE44", "66FF44"};

function GetArgs(message, separator)

	local args = {};

	local i = 0;

	for value in string.gfind(message, "[^"..separator.."]+") do
		i = i + 1;
		args[i] = value;
	end 

	return args;
end

function sr_pr(msg)
	DEFAULT_CHAT_FRAME:AddMessage(msg);
end

-- Seal: Added
local function Moog_UpdateCurrentState(unit)
	local stateicon = getglobal("Moog_Hud_"..unit.."_StatusTexture");
	local inCombat = this.inCombat;
	if (not stateicon) then return; end
	if(unit == "target") then
		inCombat = UnitAffectingCombat(unit);
	end
	if(inCombat == 1) then
		stateicon:Show();
		stateicon:SetTexCoord(.5625, .9375, .0625, .4375);
	elseif(unit == "player" and IsResting()) then
		stateicon:Show();
		stateicon:SetTexCoord(.0625, .4375, .0625, .4375);
	else
		stateicon:Hide();
	end
end

local function Moog_UpdatePvP(unit)
	local pvpicon = getglobal("Moog_Hud_"..unit.."_PvPTexture");
	if (not pvpicon) then return; end
	local factionGroup = UnitFactionGroup(unit);
	if ( UnitIsPVPFreeForAll(unit) ) then
		pvpicon:SetTexture("Interface\\TargetingFrame\\UI-PVP-FFA");
		pvpicon:Show();
	elseif ( factionGroup and UnitIsPVP(unit) ) then
		pvpicon:SetTexture("Interface\\TargetingFrame\\UI-PVP-"..factionGroup);
		pvpicon:Show();
	else
		pvpicon:Hide();
	end
end

local function Moog_UpdatePartyLeader()
	if ( IsPartyLeader() and (GetNumPartyMembers() > 0) ) then
		Moog_Hud_player_LeaderTexture:Show();
	else
		Moog_Hud_player_LeaderTexture:Hide();
	end
end

local function Moog_UpdatePartyLoot()
	local lootMethod, lootMaster = GetLootMethod();
	if ((lootMaster == 0)and (GetNumPartyMembers() > 0)) then
		Moog_Hud_player_LootTexture:Show();
	else
		Moog_Hud_player_LootTexture:Hide();
	end
end

-- Seal: End Add

function Moog_Hud_OnLoad()
	SlashCmdList["MOOGHUD"] = Moog_Hud_SlashHandler;
	SLASH_MOOGHUD1 = "/moog";

	-- Shen: Events which are needed globally
	this:RegisterEvent("PLAYER_ENTERING_WORLD");
	this:RegisterEvent("PLAYER_LEAVING_WORLD");
	this:RegisterEvent("VARIABLES_LOADED");

	Moog_UseMobHealth = false;
	
	Moog_SpellBlinkTime = GetTime();

	table.insert(UnitPopupFrames,"Moog_Player_DropDown");
	table.insert(UnitPopupFrames,"Moog_Target_DropDown");

	--RegisterForSave("MoogHUDInfo");

	sr_pr("Moog HUD v"..MOOGHUD_VERSION.." loaded. Type /moog to bring up options");
end

function Moog_Hud_SlashHandler(msg)
	-- if (msg == nil) then
	-- 	msg = ""; end

	local parsedmsg = GetArgs(msg," ");

	if (parsedmsg[1] == nil) then
		Moogmenu:Show();
	else
		parsedmsg[1] = strlower(parsedmsg[1])

		if strfind(parsedmsg[1], "menu") and Moogmenu then
			Moogmenu:Show();
		elseif Moogmenu then
			Moogmenu:Show();
		end
	end
end

function Moog_HudTargetUpdate()
	-- Update Combo Points here just to be sure it catches target deaths, etc
	local points = GetComboPoints();
	if (points > 0) then
		Moog_HudCombo:SetText(points);
	else
		Moog_HudCombo:SetText("");
	end

	if (UnitIsDeadOrGhost("target")) then
		Moog_TargetHudHPText:SetTextColor(0.7, 0.7, 0.7);
	else
		Moog_TargetHudHPText:SetTextColor(1, 0, 0);
	end

	if (MoogHUDInfo.TargetOn and UnitExists("target")) then
		Moog_TargetHud:Show();
		-- Moog_TargetHudHPPerc:SetText(ceil((UnitHealth("target") / UnitHealthMax("target")) * 100).."%");

		if UnitIsDeadOrGhost("target") then
			Moog_TargetHudHPText:SetText("Dead");
		elseif ((UnitInParty("target") or UnitIsUnit("target","pet")) and (MoogHUDInfo.PlayerTargetPC == false)) then
			Moog_TargetHudHPText:SetText(UnitHealth("target").."/"..UnitHealthMax("target"));
		else
			if (Moog_UseMobHealth and (MoogHUDInfo.MobTargetPC == false)) then
				Moog_TargetHudHPText:SetText(Moog_MobHealth_GetTargetCurHP().."/"..Moog_MobHealth_GetTargetMaxHP());
			else
				Moog_TargetHudHPText:SetText(ceil((UnitHealth("target") / UnitHealthMax("target")) * 100).."%");
			end
		end

		if (UnitManaMax("target") > 0) then
			if ((UnitIsPlayer("target") and (MoogHUDInfo.PlayerTargetPC == false)) or ((not UnitIsPlayer("target")) and (MoogHUDInfo.MobTargetPC == false))) then
				Moog_TargetHudMPText:SetText(UnitMana("target").."/"..UnitManaMax("target"));
			else
				Moog_TargetHudMPText:SetText(ceil((UnitMana("target") / UnitManaMax("target")) * 100).."%");
			end
		else
			Moog_TargetHudMPText:SetText(" ");
		end

		if (UnitLevel("target") < 0) then
			if ( UnitClassification("target") == "worldboss" ) then
				Moog_TargetHudLevel:SetText("Boss");
			else
				Moog_TargetHudLevel:SetText("L??");
			end
		else
			if ( string.find(UnitClassification("target"), "elite") == nil ) then
				Moog_TargetHudLevel:SetText("L" .. UnitLevel("target"));
			else
				Moog_TargetHudLevel:SetText("L" .. UnitLevel("target") .. "+");
			end
		end

		local targetfriend = 1;

		if (UnitIsFriend("player","target") == nil) then
			targetfriend = 0; end

		if (targetfriend == 1) then
			Moog_TargetHudLevel:SetTextColor(1, 0.9, 0);
		elseif (UnitIsTrivial("target")) then
			Moog_TargetHudLevel:SetTextColor(0.7, 0.7, 0.7);
		elseif (UnitLevel("target") == -1) then
			Moog_TargetHudLevel:SetTextColor(1, 0, 0);
		elseif (UnitLevel("target") <= (UnitLevel("player")-3)) then
			Moog_TargetHudLevel:SetTextColor(0, 0.9, 0);
		elseif (UnitLevel("target") >= (UnitLevel("player")+5)) then
			Moog_TargetHudLevel:SetTextColor(1, 0, 0);
		elseif (UnitLevel("target") >= (UnitLevel("player")+3)) then
			Moog_TargetHudLevel:SetTextColor(1, 0.5, 0);
		else
			Moog_TargetHudLevel:SetTextColor(1, 0.9, 0);
		end

		local info = {};
		if (UnitPowerType("target") == 0) then
			info = { r = 0.00, g = 0.7, b = 1.00 };
		else
			info = ManaBarColor[UnitPowerType("target")];
		end

		local class = UnitClass("target");
		local color = Moog_HudClass[class];
		if (UnitIsPlayer("target")) then
			if (color) then
				Moog_TargetHudName:SetText("|cff"..color..UnitName("target").."|r");
			else
				Moog_TargetHudName:SetText("|cffb39442"..UnitName("target").."|r");
			end
		else
			local reaction = UnitReaction("target","player");
			local reactioncolour = Moog_HudRep[4];
			if (reaction) then
				reactioncolour = Moog_HudRep[reaction];
			end
			Moog_TargetHudName:SetText("|cff"..reactioncolour..UnitName("target").."|r");
		end

		if ((UnitIsPlayer("target") or (MoogHUDInfo.MobClass == true)) and MoogHUDInfo.ShowIcons) then
			Moog_Target_ClassTexture:SetTexCoord(Moog_ClassPosRight(class), Moog_ClassPosLeft(class), Moog_ClassPosTop(class), Moog_ClassPosBottom(class));
			Moog_Target_Icon:Show();
		else
			Moog_Target_Icon:Hide();
		end

		if (UnitIsTapped("target") and not UnitIsTappedByPlayer("target")) then
			Moog_TargetHudName:SetTextColor(0.5, 0.5, 0.5);
		end

		Moog_TargetHudMPText:SetTextColor(info.r, info.g, info.b);

		Moog_HudTargetAuras();
		--Seal: Added Update status and pvp
		--Moog_UpdatePvP("target");
		--Moog_UpdateCurrentState("target");
		--Seal: End Add
	else
		Moog_TargetHud:Hide();
	end
end

function Moog_HudTargetAuras()
	local i, icon, buff, debuff, debuffborder, debuffcount;
	for i = 1, 16 do
		buff = UnitBuff("target", i);
		button = getglobal("Moog_TargetHudBuff"..i);
		if (buff) then
			icon = getglobal(button:GetName().."Icon");
			icon:SetTexture(buff);
			button:Show();
			button.unit = "target";
		else
			button:Hide();
		end
	end
	
	for i = 1, 16 do
		debuff, debuffApplications = UnitDebuff("target", i);
		button = getglobal("Moog_TargetHudDeBuff"..i);
		if (debuff) then
			icon = getglobal(button:GetName().."Icon");
			debuffborder = getglobal(button:GetName().."Border");
			debuffcount = getglobal(button:GetName().."Count");
			icon:SetTexture(debuff);
			button:Show();
			debuffborder:Show();
			button.isdebuff = 1;
			button.unit = "target";
			if (debuffApplications > 1) then
				debuffcount:SetText(debuffApplications);
				debuffcount:Show();
			else
				debuffcount:Hide();
			end
		else
			button:Hide();
		end
	end
end

function Moog_HudSetAuraTooltip()
	if (not this:IsVisible()) then return; end
	GameTooltip:SetOwner(this, "ANCHOR_BOTTOMRIGHT");
	local unit = this.unit;
	if (this.isdebuff == 1) then
		GameTooltip:SetUnitDebuff(unit, this:GetID());
	else
		GameTooltip:SetUnitBuff(unit, this:GetID());
	end
end

function Moog_HudUpdateOptions()
	if (MoogHUDInfo.SelfOn) then
		Moog_SelfHud:Show();
	else
		Moog_SelfHud:Hide();
	end

	if (MoogHUDInfo.ShowIcons) then
		Moog_Player_Icon:Show();
	else
		Moog_Player_Icon:Hide();
	end

	if (MoogHUDInfo.Seperation == nil) then
		MoogHUDInfo.Seperation = 0; end

	Moog_HudLeft:SetPoint("CENTER","Moog_Hud","CENTER", -MoogHUDInfo.Seperation, 0);
	Moog_HudRight:SetPoint("CENTER","Moog_Hud","CENTER", MoogHUDInfo.Seperation, 0);

	if (MoogHUDInfo.SeperateNumbers == nil) then
		MoogHUDInfo.SeperateNumbers = 0; end

	local TextOffset = 0;

	if (MoogHUDInfo.SeperateNumbers) then
		TextOffset=MoogHUDInfo.Seperation; end

	Moog_HudHealthText:SetPoint("BOTTOMRIGHT","Moog_HudCombo","TOPLEFT", -TextOffset, 0);
	Moog_HudManaText:SetPoint("BOTTOMLEFT","Moog_HudCombo","TOPRIGHT", TextOffset, 0);

	--Moog_TargetHudHPText:SetPoint("TOPLEFT","Moog_TargetHudName","BOTTOMLEFT", -TextOffset, -2);
	--Moog_TargetHudMPText:SetPoint("TOPRIGHT","Moog_TargetHudName","BOTTOMRIGHT", TextOffset, -2);

	if (MoogHUDInfo.VertPos == nil) then
		MoogHUDInfo.VertPos = 50; end

	Moog_Hud:SetPoint("CENTER","UIParent","CENTER", 0, MoogHUDInfo.VertPos);

	Moog_HudTargetUpdate();
end

function Moog_HudOnEvent(event)
	if (event == "VARIABLES_LOADED" ) then
		if ( not MoogHUDInfo ) then
			MoogHUDInfo = {
				["SelfOn"] = true,
				["Seperation"] = 0,
				["VertPos"] = 50,
				["TargetOn"] = true,
				["MobTargetPC"] = false,
				["PlayerTargetPC"] = false,
				["MobClass"] = false,
				["ShowIcons"] = false,
				["BlinkLongCast"] = true,
				["BlinkInstaCast"] = false,
				["SeperateNumbers"] = false
				};
		end
		if MoogHUDInfo.SelfOn == nil then
			MoogHUDInfo.SelfOn = true; end
		if MoogHUDInfo.TargetOn == nil then
			MoogHUDInfo.TargetOn = true; end
		if MoogHUDInfo.MobTargetPC == nil then
			MoogHUDInfo.MobTargetPC = false; end
		if MoogHUDInfo.PlayerTargetPC == nil then
			MoogHUDInfo.PlayerTargetPC = false; end
		if MoogHUDInfo.MobClass == nil then
			MoogHUDInfo.MobClass = false; end
		if MoogHUDInfo.ShowIcons == nil then
			MoogHUDInfo.ShowIcons = false; end
		if MoogHUDInfo.BlinkLongCast == nil then
			MoogHUDInfo.BlinkLongCast = true; end
		if MoogHUDInfo.BlinkInstaCast == nil then
			MoogHUDInfo.BlinkInstaCast = false; end
		if MoogHUDInfo.SeperateNumbers == nil then
			MoogHUDInfo.SeperateNumbers = false; end
		if  MobHealthFrame  then
			sr_pr("Moog HUD detected MobHealth/MobInfo");
			Moog_UseMobHealth = true; end
		Moog_HudUpdateOptions();
	elseif (event == "PLAYER_ENTERING_WORLD") then
		-- Shen: Event hooks moved from OnLoad
		--Seal: Added
		this:RegisterEvent("PLAYER_ENTER_COMBAT");
		this:RegisterEvent("PLAYER_LEAVE_COMBAT");
		this:RegisterEvent("PLAYER_UPDATE_RESTING");
		this:RegisterEvent("PLAYER_REGEN_DISABLED");
		this:RegisterEvent("PLAYER_REGEN_ENABLED");
		this:RegisterEvent("PARTY_LEADER_CHANGED");
		this:RegisterEvent("PARTY_LOOT_METHOD_CHANGED");
		--Seal: End Add
		this:RegisterEvent("PLAYER_COMBO_POINTS");
		this:RegisterEvent("UNIT_AURA");
		this:RegisterEvent("UNIT_HEALTH");
		this:RegisterEvent("UNIT_MAXHEALTH");
		this:RegisterEvent("UNIT_MANA");
		this:RegisterEvent("UNIT_RAGE");
		this:RegisterEvent("UNIT_FOCUS");
		this:RegisterEvent("UNIT_ENERGY");
		this:RegisterEvent("UNIT_MAXMANA");
		this:RegisterEvent("UNIT_MAXRAGE");
		this:RegisterEvent("UNIT_MAXFOCUS");
		this:RegisterEvent("UNIT_MAXENERGY");
		this:RegisterEvent("UNIT_NAME_UPDATE");
		this:RegisterEvent("UNIT_DISPLAYPOWER");
		this:RegisterEvent("PARTY_MEMBERS_CHANGED");
		--Seal: Added
		this:RegisterEvent("UNIT_PVP_UPDATE");
		--Seal: End Add

		Moog_HealthHud:SetVertexColor(0, 1, 0);
		Moog_HealthHud:SetAlpha(0);
		Moog_ManaHud:SetAlpha(0);
		Moog_ManaHudBG:SetAlpha(0);
		Moog_ManaHudBG:SetTexCoord(0, 1, 0, 1);

		Moog_HealthHudBG:SetAlpha(0);
		Moog_HealthHudBG:SetVertexColor(0, 1, 0);
		Moog_HealthHudBG:SetTexCoord(0, 1, 0, 1);

		
		if (UnitPowerType("player") == 0) then
			info = { r = 0.00, g = 0.7, b = 1.00 };
		else
			info = ManaBarColor[UnitPowerType("player")];
		end
		Moog_ManaHud:SetVertexColor(info.r, info.g, info.b);
		Moog_ManaHudBG:SetVertexColor(info.r, info.g, info.b);
		
		local p=UnitMana("player")/UnitManaMax("player");
		local h = 256 * p;
		Moog_ManaHud:SetHeight(h);
		Moog_ManaHud:SetTexCoord(0, 1, 1-p, 1);
		Moog_HudManaText:SetText(UnitMana("player").."/"..UnitManaMax("player"));
		Moog_HudManaText:SetVertexColor(info.r, info.g, info.b);

		if (GetNumPartyMembers() > 0) then
			Moog_Player_ClassTexture:SetAlpha(1);
			Moog_Player_Icon:EnableMouse(true);
		else
			Moog_Player_ClassTexture:SetAlpha(0.5);
			Moog_Player_Icon:EnableMouse(false);
		end

		p=UnitHealth("player")/UnitHealthMax("player");
		h = 256 * p;
		Moog_HealthHud:SetHeight(h);
		Moog_HealthHud:SetTexCoord(0, 1, 1-p, 1);
		Moog_HudHealthText:SetText(UnitHealth("player").."/"..UnitHealthMax("player"));
		Moog_HudHealthText:SetVertexColor(0, 1, 0);

		local PlayerClass = UnitClass("player");
		Moog_Player_ClassTexture:SetTexCoord(Moog_ClassPosRight(PlayerClass), Moog_ClassPosLeft(PlayerClass), Moog_ClassPosTop(PlayerClass), Moog_ClassPosBottom(PlayerClass));
		--Seal: Added
		Moog_UpdateCurrentState("player");
		Moog_UpdatePvP("player");
		Moog_UpdatePartyLeader();
		Moog_UpdatePartyLoot();
		--Seal: End Add
	-- Shen: Hook added for leaving, unregistering hooks
	elseif (event == "PLAYER_LEAVING_WORLD") then
		this:UnregisterEvent("PLAYER_ENTER_COMBAT");
		this:UnregisterEvent("PLAYER_LEAVE_COMBAT");
		this:UnregisterEvent("PLAYER_UPDATE_RESTING");
		this:UnregisterEvent("PLAYER_REGEN_DISABLED");
		this:UnregisterEvent("PLAYER_REGEN_ENABLED");
		this:UnregisterEvent("PARTY_LEADER_CHANGED");
		this:UnregisterEvent("PARTY_LOOT_METHOD_CHANGED");
		this:UnregisterEvent("PLAYER_COMBO_POINTS");
		this:UnregisterEvent("UNIT_AURA");
		this:UnregisterEvent("UNIT_HEALTH");
		this:UnregisterEvent("UNIT_MAXHEALTH");
		this:UnregisterEvent("UNIT_MANA");
		this:UnregisterEvent("UNIT_RAGE");
		this:UnregisterEvent("UNIT_FOCUS");
		this:UnregisterEvent("UNIT_ENERGY");
		this:UnregisterEvent("UNIT_MAXMANA");
		this:UnregisterEvent("UNIT_MAXRAGE");
		this:UnregisterEvent("UNIT_MAXFOCUS");
		this:UnregisterEvent("UNIT_MAXENERGY");
		this:UnregisterEvent("UNIT_NAME_UPDATE");
		this:UnregisterEvent("UNIT_DISPLAYPOWER");
		this:UnregisterEvent("PARTY_MEMBERS_CHANGED");
		this:UnregisterEvent("UNIT_PVP_UPDATE");
	elseif (event == "UNIT_DISPLAYPOWER") then
		local info = {};
		if (arg1 == "player" or arg1 == "target") then
			if (UnitPowerType(arg1) == 0) then
				info = { r = 0.00, g = 0.7, b = 1.00 };
			else
				info = ManaBarColor[UnitPowerType(arg1)];
			end
			if (arg1 == "player") then
				Moog_ManaHud:SetVertexColor(info.r, info.g, info.b);
				Moog_ManaHudBG:SetVertexColor(info.r, info.g, info.b);
			else
				Moog_TargetHudMPText:SetTextColor(info.r, info.g, info.b);
			end
		end
	elseif (event == "PLAYER_COMBO_POINTS") then
		local points = GetComboPoints();
		if (points > 0) then
			Moog_HudCombo:SetText(points);
		else
			Moog_HudCombo:SetText("");
		end
	elseif (event == "UNIT_AURA" and arg1 == "target") then
		Moog_HudTargetAuras();
	elseif (event == "UNIT_HEALTH" or event == "UNIT_MAXHEALTH") then
		if (arg1=="player") then
			if UnitHealthMax("player")==0 then return; end
			local p=UnitHealth("player")/UnitHealthMax("player");
			local h = 256 * p;
			Moog_HealthHud:SetHeight(h);
			Moog_HealthHud:SetTexCoord(0, 1, 1-p, 1);

			if (UnitIsDeadOrGhost("player")) then
				Moog_HudHealthText:SetTextColor(0.7, 0.7, 0.7);
				Moog_HudHealthText:SetText("Dead");
			else
				Moog_HudHealthText:SetTextColor(0, 1, 0);
				Moog_HudHealthText:SetText(UnitHealth("player").."/"..UnitHealthMax("player"));
			end
		elseif (arg1 == "target") then
			if (UnitIsDeadOrGhost("target")) then
				Moog_TargetHudHPText:SetTextColor(0.7, 0.7, 0.7);
			else
				Moog_TargetHudHPText:SetTextColor(1, 0, 0);
			end
			if (UnitIsTapped("target") and not UnitIsTappedByPlayer("target")) then
				Moog_TargetHudName:SetTextColor(0.5, 0.5, 0.5);
			end
			-- Moog_TargetHudHPPerc:SetText(ceil((UnitHealth("target") / UnitHealthMax("target")) * 100).."%");
			if UnitIsDeadOrGhost("target") then
				Moog_TargetHudHPText:SetText("Dead");
			elseif ((UnitInParty("target") or UnitIsUnit("target","pet")) and (MoogHUDInfo.PlayerTargetPC == false)) then
				Moog_TargetHudHPText:SetText(UnitHealth("target").."/"..UnitHealthMax("target"));
			else
				if (Moog_UseMobHealth and (MoogHUDInfo.MobTargetPC == false)) then
					Moog_TargetHudHPText:SetText(Moog_MobHealth_GetTargetCurHP().."/"..Moog_MobHealth_GetTargetMaxHP());
				else
					Moog_TargetHudHPText:SetText(ceil((UnitHealth("target") / UnitHealthMax("target")) * 100).."%");
				end
			end
		end
	elseif (event == "PARTY_MEMBERS_CHANGED") then
		--sr_pr(GetNumPartyMembers());
		if (GetNumPartyMembers() > 0) then
			Moog_Player_ClassTexture:SetAlpha(1);
			Moog_Player_Icon:EnableMouse(true);
		else
			Moog_Player_ClassTexture:SetAlpha(0.5);
			Moog_Player_Icon:EnableMouse(false);
		end
		Moog_UpdatePartyLeader();
		Moog_UpdatePartyLoot();
	elseif (event == "UNIT_NAME_UPDATE") then
		if (arg1=="target") then
			Moog_HudTargetUpdate();
		end
	else
		if (arg1=="player") then
			if UnitManaMax("player")==0 then return; end
			local p=UnitMana("player")/UnitManaMax("player");
			local h = 256 * p;
			Moog_ManaHud:SetHeight(h);
			Moog_ManaHud:SetTexCoord(0, 1, 1-p, 1);
			Moog_HudManaText:SetText(UnitMana("player").."/"..UnitManaMax("player"));
		elseif (arg1 == "target") then
			if ((UnitIsPlayer("target") and (MoogHUDInfo.PlayerTargetPC == false)) or ((not UnitIsPlayer("target")) and (MoogHUDInfo.MobTargetPC == false))) then
				Moog_TargetHudMPText:SetText(UnitMana("target").."/"..UnitManaMax("target"));
			else
				Moog_TargetHudMPText:SetText(ceil((UnitMana("target") / UnitManaMax("target")) * 100).."%");
			end
		end
	end
	--Seal: Added
	if ( event == "PLAYER_ENTER_COMBAT" or event == "PLAYER_REGEN_DISABLED") then
		this.inCombat = 1;
		Moog_UpdateCurrentState("player");
		return;
	end

	if ( event == "PLAYER_UPDATE_RESTING" ) then
		Moog_UpdateCurrentState("player");
		return;
	end

	if ( event == "PLAYER_LEAVE_COMBAT" or event == "PLAYER_REGEN_ENABLED") then
		this.inCombat = 0;
		Moog_UpdateCurrentState("player");
		return;
	end
	
	if (event == "UNIT_PVP_UPDATE") then
		if ((arg1 == "target") or (arg1 == "player")) then
			Moog_UpdatePvP(arg1); end
	end
	
	if (event == "PARTY_LEADER_CHANGED") then
		Moog_UpdatePartyLeader();
		return;
	end
	if (event == "PARTY_LOOT_METHOD_CHANGED") then
		Moog_UpdatePartyLoot();
	end
	--Seal: End Add
end


function Moog_PlayerDropDown_OnLoad()
	UIDropDownMenu_Initialize(this, Moog_PlayerDropDown_Initialize, "MENU");
end
				
function Moog_PlayerDropDown_Initialize()
	UnitPopup_ShowMenu(Moog_Player_DropDown, "SELF", "player");
end

function Moog_Player_MouseUp(button)
	if (button == "RightButton") then
		ToggleDropDownMenu(1, nil, Moog_Player_DropDown, "Moog_Player_ClassTexture", 0, 0); end
end

function Moog_Player_MouseDown(button)
end

function Moog_TargetDropDown_OnLoad()
	UIDropDownMenu_Initialize(this, Moog_TargetDropDown_Initialize, "MENU");
end

function Moog_TargetDropDown_Initialize()
	local menu = nil;
	if (UnitIsEnemy("target", "player")) then
		return;
	end
	if (UnitIsUnit("target", "player")) then
		menu = "SELF";
	elseif (UnitIsUnit("target", "pet")) then
		menu = "PET";
	elseif (UnitIsPlayer("target")) then
		if (UnitInParty("target")) then
			menu = "PARTY";
		else
			menu = "PLAYER";
		end
	end
	if (menu) then
		UnitPopup_ShowMenu(Moog_Target_DropDown, menu, "target");
	end
end

function Moog_Target_MouseUp(button)
	if (button == "RightButton") then
		ToggleDropDownMenu(1, nil, Moog_Target_DropDown, "Moog_Target_ClassTexture", 0, 0); end
end

function Moog_Target_MouseDown(button)
end

---------------------------------
--Class Icon Location Functions--
---------------------------------

function Moog_ClassPosRight (class)

	if(class==MOOGHUD_CLASS_WARRIOR) then return 0; end
	if(class==MOOGHUD_CLASS_MAGE) then return 0.25; end
	if(class==MOOGHUD_CLASS_ROGUE) then return 0.5; end
	if(class==MOOGHUD_CLASS_DRUID) then return 0.75; end
	if(class==MOOGHUD_CLASS_HUNTER) then return 0; end
	if(class==MOOGHUD_CLASS_SHAMAN) then return 0.25; end
	if(class==MOOGHUD_CLASS_PRIEST) then return 0.5; end
	if(class==MOOGHUD_CLASS_WARLOCK) then return 0.75; end
	if(class==MOOGHUD_CLASS_PALADIN) then return 0; end
	return nil;
end
function Moog_ClassPosLeft (class)

	if(class==MOOGHUD_CLASS_WARRIOR) then return 0.25; end
	if(class==MOOGHUD_CLASS_MAGE) then return 0.5; end
	if(class==MOOGHUD_CLASS_ROGUE) then return 0.75; end
	if(class==MOOGHUD_CLASS_DRUID) then return 1; end
	if(class==MOOGHUD_CLASS_HUNTER) then return 0.25; end
	if(class==MOOGHUD_CLASS_SHAMAN) then return 0.5; end
	if(class==MOOGHUD_CLASS_PRIEST) then return 0.75; end
	if(class==MOOGHUD_CLASS_WARLOCK) then return 1; end
	if(class==MOOGHUD_CLASS_PALADIN) then return 0.25; end
	return nil;
end
function Moog_ClassPosTop (class)
	if(class==MOOGHUD_CLASS_WARRIOR) then return 0; end
	if(class==MOOGHUD_CLASS_MAGE) then return 0; end
	if(class==MOOGHUD_CLASS_ROGUE) then return 0; end
	if(class==MOOGHUD_CLASS_DRUID) then return 0; end
	if(class==MOOGHUD_CLASS_HUNTER) then return 0.25; end
	if(class==MOOGHUD_CLASS_SHAMAN) then return 0.25; end
	if(class==MOOGHUD_CLASS_PRIEST) then return 0.25; end
	if(class==MOOGHUD_CLASS_WARLOCK) then return 0.25; end
	if(class==MOOGHUD_CLASS_PALADIN) then return 0.5; end
	return nil;
end
function Moog_ClassPosBottom (class)

	if(class==MOOGHUD_CLASS_WARRIOR) then return 0.25; end
	if(class==MOOGHUD_CLASS_MAGE) then return 0.25; end
	if(class==MOOGHUD_CLASS_ROGUE) then return 0.25; end
	if(class==MOOGHUD_CLASS_DRUID) then return 0.25; end
	if(class==MOOGHUD_CLASS_HUNTER) then return 0.5; end
	if(class==MOOGHUD_CLASS_SHAMAN) then return 0.5; end
	if(class==MOOGHUD_CLASS_PRIEST) then return 0.5; end
	if(class==MOOGHUD_CLASS_WARLOCK) then return 0.5; end
	if(class==MOOGHUD_CLASS_PALADIN) then return 0.75; end
	return nil;
end

