
function InspectPaperDollFrame_OnLoad(self)
	self:RegisterEvent("UNIT_MODEL_CHANGED");
	self:RegisterEvent("UNIT_LEVEL");
end

function InspectModelFrame_OnUpdate(self, elapsedTime)
	if InspectModelRotateLeftButton:GetButtonState() == "PUSHED" then
		self.rotation = self.rotation + (elapsedTime * 2 * PI * ROTATIONS_PER_SECOND);
		if self.rotation < 0 then
			self.rotation = self.rotation + (2 * PI);
		end
		InspectModelFrame:SetRotation(self.rotation);
	end
	if InspectModelRotateRightButton:GetButtonState() == "PUSHED" then
		self.rotation = self.rotation - (elapsedTime * 2 * PI * ROTATIONS_PER_SECOND);
		if self.rotation > (2 * PI) then
			self.rotation = self.rotation - (2 * PI);
		end
		InspectModelFrame:SetRotation(self.rotation);
	end
end

function InspectModelFrame_OnLoad(self)
	self.rotation = 0.61;
	InspectModelFrame:SetRotation(self.rotation);
end

function InspectModelRotateLeftButton_OnClick()
	InspectModelFrame.rotation = InspectModelFrame.rotation - 0.03;
	InspectModelFrame:SetRotation(InspectModelFrame.rotation);
	PlaySound("igInventoryRotateCharacter");
end

function InspectModelRotateRightButton_OnClick()
	InspectModelFrame.rotation = InspectModelFrame.rotation + 0.03;
	InspectModelFrame:SetRotation(InspectModelFrame.rotation);
	PlaySound("igInventoryRotateCharacter");
end

function InspectPaperDollFrame_OnEvent(self, event, unit)
	if unit and unit == InspectFrame.unit then
		if event == "UNIT_MODEL_CHANGED" then
			InspectModelFrame:RefreshUnit();
		elseif event == "UNIT_LEVEL" then
			InspectPaperDollFrame_SetLevel();
		end
		return;
	end
end

function InspectPaperDollFrame_SetLevel()
	local unit, level = InspectFrame.unit, UnitLevel(InspectFrame.unit);
	
	if level == -1 then
		level = "??";
	end
		
	InspectLevelText:SetFormattedText(PLAYER_LEVEL,level, UnitRace(unit), UnitClass(unit));
end

function InspectPaperDollFrame_OnShow()
	InspectModelFrame:SetUnit(InspectFrame.unit);
	InspectPaperDollFrame_SetLevel();
	InspectPaperDollItemSlotButton_Update(InspectHeadSlot);
	InspectPaperDollItemSlotButton_Update(InspectNeckSlot);
	InspectPaperDollItemSlotButton_Update(InspectShoulderSlot);
	InspectPaperDollItemSlotButton_Update(InspectBackSlot);
	InspectPaperDollItemSlotButton_Update(InspectChestSlot);
	InspectPaperDollItemSlotButton_Update(InspectShirtSlot);
	InspectPaperDollItemSlotButton_Update(InspectTabardSlot);
	InspectPaperDollItemSlotButton_Update(InspectWristSlot);
	InspectPaperDollItemSlotButton_Update(InspectHandsSlot);
	InspectPaperDollItemSlotButton_Update(InspectWaistSlot);
	InspectPaperDollItemSlotButton_Update(InspectLegsSlot);
	InspectPaperDollItemSlotButton_Update(InspectFeetSlot);
	InspectPaperDollItemSlotButton_Update(InspectFinger0Slot);
	InspectPaperDollItemSlotButton_Update(InspectFinger1Slot);
	InspectPaperDollItemSlotButton_Update(InspectTrinket0Slot);
	InspectPaperDollItemSlotButton_Update(InspectTrinket1Slot);
	InspectPaperDollItemSlotButton_Update(InspectMainHandSlot);
	InspectPaperDollItemSlotButton_Update(InspectSecondaryHandSlot);
	InspectPaperDollItemSlotButton_Update(InspectRangedSlot);
end

function InspectPaperDollItemSlotButton_OnLoad(self)
	self:RegisterEvent("UNIT_INVENTORY_CHANGED");
	local slotName = self:GetName();
	local id;
	local textureName;
	local checkRelic;
	id, textureName, checkRelic = GetInventorySlotInfo(strsub(slotName,8));
	self:SetID(id);
	local texture = getglobal(slotName.."IconTexture");
	texture:SetTexture(textureName);
	self.backgroundTextureName = textureName;
	self.checkRelic = checkRelic;
end

function InspectPaperDollItemSlotButton_OnEvent(self, event, ...)
	if event == "UNIT_INVENTORY_CHANGED" then
		local arg1 = ...;
		if arg1 == InspectFrame.unit then
			InspectPaperDollItemSlotButton_Update(self);
		end
		return;
	end
end

function InspectPaperDollItemSlotButton_OnEnter(self)
	GameTooltip:SetOwner(self, "ANCHOR_RIGHT");
	if not GameTooltip:SetInventoryItem(InspectFrame.unit, self:GetID()) then
		local text = getglobal(strupper(strsub(self:GetName(), 8)));
		if self.checkRelic and UnitHasRelicSlot(InspectFrame.unit) then
			text = getglobal("RELICSLOT");
		end
		GameTooltip:SetText(text);
	end
	CursorUpdate(self);
end

function InspectPaperDollItemSlotButton_Update(button)
	local unit = InspectFrame.unit;
	local textureName = GetInventoryItemTexture(unit, button:GetID());
	if textureName then
		SetItemButtonTexture(button, textureName);
		SetItemButtonCount(button, GetInventoryItemCount(unit, button:GetID()));
		button.hasItem = 1;
	else
		local textureName = button.backgroundTextureName;
		if button.checkRelic and UnitHasRelicSlot(unit) then
			textureName = "Interface\\Paperdoll\\UI-PaperDoll-Slot-Relic.blp";
		end
		SetItemButtonTexture(button, textureName);
		SetItemButtonCount(button, 0);
		button.hasItem = nil;
	end
	if GameTooltip:IsOwned(button) then
		if texture then
            if not GameTooltip:SetInventoryItem(InspectFrame.unit, button:GetID()) then
				GameTooltip:SetText(getglobal(strupper(strsub(button:GetName(), 8))));
			end
		else
			GameTooltip:Hide();
		end
	end
end
