vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:

-- This is a function calling array for any other addons that wish to "tap-in" to these tooltips
LINK_WRANGLER_CALLER = {};

-- Credit Legorol

IRR_LINK_COLOR_OPEN             = "|cff";
IRR_LINK_COLORS = {};
IRR_LINK_COLORS[0]              = "9d9d9d";     -- grey
IRR_LINK_COLORS[1]              = "ffffff"; -- white
IRR_LINK_COLORS[2]              = "1eff00"; -- green
IRR_LINK_COLORS[3]              = "0070dd"; -- blue
IRR_LINK_COLORS[4]              = "a335ee"; -- purple
IRR_LINK_COLORS[5]              = "ff8000"; -- gold (legendary)
IRR_LINK_HYPERLINK_OPEN = "|H";
IRR_LINK_LINK_OPEN              = "|h[";
IRR_LINK_LINK_CLOSE             = "]|h";
IRR_LINK_COLOR_CLOSE    = "|r";

IRR_MIN_HEIGHT = 132;

-------------------------------------------------------------------------------------------
-- GLOBALS
-------------------------------------------------------------------------------------------
IRR_ItemTypes = {
        [INVTYPE_WEAPONMAINHAND]        = {[1] = 16},           -- Main Hand
        [INVTYPE_2HWEAPON]                      = {[1] = 16,[2] = 17},          -- Two-Hand
        [INVTYPE_WEAPON]                        = {[1] = 16,[2] = 17},          -- One-Hand
        [INVTYPE_WEAPON_OTHER]          = {[1] = 16,[2] = 17},          -- One-Hand_other
        [INVTYPE_SHIELD]                        = {[1] = 17},           -- Off Hand
        [INVTYPE_WEAPONOFFHAND]         = {[1] = 17},           -- Off Hand
        [INVTYPE_HOLDABLE]                      = {[1] = 17},           -- Held In Off-hand
        [INVTYPE_HEAD]                          = {[1] = 1},            -- Head
        [INVTYPE_WAIST]                         = {[1] = 6},            -- Waist
        [INVTYPE_SHOULDER]                      = {[1] = 3},            -- Shoulder
        [INVTYPE_LEGS]                          = {[1] = 7},            -- Legs
        [INVTYPE_CLOAK]                         = {[1] = 15},           -- Back
        [INVTYPE_FEET]                          = {[1] = 8},            -- Feet
        [INVTYPE_CHEST]                         = {[1] = 5},            -- Chest
        [INVTYPE_ROBE]                          = {[1] = 5},            -- Chest
        [INVTYPE_WRIST]                         = {[1] = 9},            -- Wrist
        [INVTYPE_HAND]                          = {[1] = 10},           -- Hands
        [INVTYPE_RANGED]                        = {[1] = 18},           -- Ranged
        [INVTYPE_BODY]                          = {[1] = 4},            -- Shirt
        [INVTYPE_TABARD]                        = {[1] = 19},           -- Tabard
        [INVTYPE_FINGER]                        = {[1] = 11,[2] = 12},          -- Finger
        [INVTYPE_FINGER_OTHER]          = {[1] = 12,[2] = 12},          -- Finger_other
        [INVTYPE_NECK]                          = {[1] = 2},            -- Neck
        [INVTYPE_TRINKET]                       = {[1] = 13,[2] = 14},          -- Trinket
        [INVTYPE_TRINKET_OTHER]         = {[1] = 13,[2] = 14},          -- Trinket_other
        [INVTYPE_WAND]                          = {[1] = 18},           -- Wand
        [INVTYPE_GUN]                           = {[1] = 18},           -- Gun
        [INVTYPE_GUNPROJECTILE]         = {[1] = 0},            -- Projectile
        [INVTYPE_BOWPROJECTILE]         = {[1] = 0}                     -- Projectile
};

IRR_SlotIDtoSlotName = {
        [0] = AMMOSLOT,         -- 0
        HEADSLOT,                       -- 1
        NECKSLOT,                       -- 2
        SHOULDERSLOT,           -- 3
        SHIRTSLOT,                      -- 4
        CHESTSLOT,                      -- 5
        WAISTSLOT,                      -- 6
        LEGSSLOT,                       -- 7
        FEETSLOT,                       -- 8
        WRISTSLOT,                      -- 9
        HANDSSLOT,                      -- 10
        FINGER0SLOT,            -- 11
        FINGER1SLOT,            -- 12
        TRINKET0SLOT,           -- 13
        TRINKET1SLOT,           -- 14
        BACKSLOT,                       -- 15
        MAINHANDSLOT,           -- 16
        SECONDARYHANDSLOT,      -- 17
        RANGEDSLOT,                     -- 18
        TABARDSLOT,                     -- 19
};


IR_MOD_ITEMREF_WINDOWS = {};
IR_MOD_CHAT_BUFFER = {};
IR_MOD_CHAT_NAMES_BUFFER = {};
IR_MOD_CHAT_BUFFER_MAX = 60;
IR_MOD_CHAT_BUFFER_INDEX = 1;

IR_MOD_AUCTIONEER_INDEX = 0;
IR_MOD_AUCTIONEER_POS = 0;

-------------------------------------------------------------------------------------------
-- UTILITY
-------------------------------------------------------------------------------------------
local function dout(msg)
        if( DEFAULT_CHAT_FRAME) then
                DEFAULT_CHAT_FRAME:AddMessage(msg,1.0,0,0);
        end
end

-------------------------------------------------------------------------------------------
-- ADDON SUPPORT
-------------------------------------------------------------------------------------------
function LinkWrangler_AddonContent(func, addonName, index)
        local frame = IR_MOD_ITEMREF_WINDOWS[index].window;
        local link = IR_MOD_ITEMREF_WINDOWS[index].itemRefID;
        
        if (func ~= nil) then
                --dout(func);
                local caller = getglobal(func);
                
                if (caller ~= nil) then
                        caller(frame,link);
                        frame:Show();
                else
                        dout("Link Wrangler Error: Attempt to call appender \""..func.."\" for AddOn: \""..addonName.."\" failed.");
                end
        else
                dout("Link Wrangler Error: Attempt to call appender for AddOn: \""..addonName.."\" failed.");
        end
end

function IRR_DoAuctioneerFrame(index)
        if (IsAddOnLoaded("Auctioneer") ~= nil) then
                --dout("IRR_DoAuctioneerFrame");
                if (IR_MOD_ITEMREF_WINDOWS[index].minimized == nil) then
                        local frame = IR_MOD_ITEMREF_WINDOWS[index].window;

                        local link = IR_MOD_ITEMREF_WINDOWS[index].itemRefID;
                        
                        if (frame:IsVisible()) then
                                local itemText = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextLeft1");
                                local name = itemText:GetText();
                                if (name) then
                                        local fabricatedLink = "|cff000000|H"..link.."|h["..name.."]|h|r";
                                                                        
                                        if (AuctionConfig.filters['embed'] == "on") then
                                                frame:SetHyperlink("item:1710:0:0:0");
                                                frame:SetHyperlink(IR_MOD_ITEMREF_WINDOWS[index].itemRefID);
                                        end

                                        if (TT_Clear) then
                                                TT_Clear();
                                                TT_TooltipCall(frame, name, fabricatedLink, -1, 1, 0);
                                                TT_Show(frame);
                                        elseif (EnhTooltip.TooltipCall) then -- requires LW version of EnhTooltip
                                                EnhTooltip.ClearTooltip();
                                                EnhTooltip.TooltipCall(frame, name, fabricatedLink, -1, 1, 0);
                                        end
                                                
                                        if (IR_MOD_ITEMREF_WINDOWS[index].firstTimeAuc == 1) then
                                                IR_MOD_ITEMREF_WINDOWS[index].firstTimeAuc = 0;
                                        else
                                                if (AuctionConfig.filters['embed'] == "on") then
                                                        table.foreach(LINK_WRANGLER_CALLER, function(k,v) LinkWrangler_AddonContent(v,k,index); end);
                                                end
                                        end
                                        
                                        IR_MOD_AUCTIONEER_POS = EnhancedTooltip:GetLeft();
                                        IR_MOD_AUCTIONEER_INDEX = index;
                                end
                        end
                end
        end
end



-------------------------------------------------------------------------------------------
-- UTILITY
-------------------------------------------------------------------------------------------
function IRR_CompareItem(index)
        --dout("slot: "..GetInventorySlotInfo("RangedSlot"));
        
        local itemComp1 = getglobal("IRR_ItemCompTooltip"..index);
        local itemComp1Name = "IRR_ItemCompTooltip"..index;
        local itemComp2 = getglobal("IRR_ItemCompTool"..index+10);
        local itemComp2Name = "IRR_ItemCompTool"..index+10;
        
        if (IR_MOD_ITEMREF_WINDOWS[index].compare == 0) then
                IR_MOD_ITEMREF_WINDOWS[index].compare = 1;
                
                --local slotID = IRR_GetCompareItemIndex(IR_MOD_ITEMREF_WINDOWS[index].windowName);
                local slots = IR_MOD_ITEMREF_WINDOWS[index].slots;
                
                if (slots == nil) then
                        return;
                end

                ShowUIPanel(itemComp1);
                itemComp1:SetOwner(UIParent, "ANCHOR_NONE");
                itemComp1:SetPoint("BOTTOMLEFT",IR_MOD_ITEMREF_WINDOWS[index].windowName,"TOPLEFT",0,10);
                itemComp1:SetInventoryItem("player",slots[1]);
                                
                if (table.getn(slots) > 1) then
                        --dout("more");
                        ShowUIPanel(itemComp2);
                        itemComp2:SetOwner(UIParent, "ANCHOR_NONE");
                        itemComp2:SetPoint("BOTTOMLEFT","IRR_ItemCompTooltip"..index,"TOPLEFT",0,10);
                        itemComp2:SetInventoryItem("player",slots[2]);
                end
        else
                IR_MOD_ITEMREF_WINDOWS[index].compare = 0;
                HideUIPanel(itemComp1);
                HideUIPanel(itemComp2);
        end
end


function IRR_GetCompareItemIndex(frame)
        --local tooltip = getglobal(frame);

        for i=1,6 do
                --dout(i);
                local typeText = getglobal(frame.."TextLeft"..i);
                local type = typeText:GetText();
                local checkType = 1;
                if (type == nil) then
                        checkType = 0;
                end

                if (checkType == 1) then
                        --dout("type: "..type)
                        
                        local retVal =  IRR_ItemTypes[type];

                        if (retVal ~= nil) then
                                --dout("returning")
                                return retVal;
                        end
                        --dout("not returning")
                end
        end
end

function IRR_CloseAllWindows()
        -- Next deal with the no windows open logic
        for i=1,table.getn(IR_MOD_ITEMREF_WINDOWS) do
                local info = IR_MOD_ITEMREF_WINDOWS[i];

                info.state = 0;
                info.link = 0;
                info.compare = 0;
                info.whisper = nil;
                info.textlink = nil;
                info.itemRefID = nil;
                info.itemID = nil;
                info.quality = nil;
                info.name = nil;
                info.firstTimeAuc = 1;
                
                HideUIPanel(info.window);

                local comp1 = getglobal("IRR_ItemCompTooltip"..i);
                HideUIPanel(comp1);

                local comp2 = getglobal("IRR_ItemCompTool"..i+10);
                HideUIPanel(comp2);
        end

        GameTooltip:Hide();
end

function IRR_GetWindowIndex(link)
        -- First check if the item is already displayed
        for i=1,table.getn(IR_MOD_ITEMREF_WINDOWS) do
                local info = IR_MOD_ITEMREF_WINDOWS[i];

                if (info.link == link) then
                        IRR_ItemRefTooltip_OnClick(i);
                        return 0;
                end
        end

        
        -- Next check for open windows to display item in
        for i=1,table.getn(IR_MOD_ITEMREF_WINDOWS) do
                local info = IR_MOD_ITEMREF_WINDOWS[i];

                if (info.state == 0) then
                        info.state = 1;
                        info.link = link;
                        return info.index;
                end
        end

        IRR_CloseAllWindows();

        local info = IR_MOD_ITEMREF_WINDOWS[1];
        info.state = 1;
        info.link = link;
        return 1;
end

function IRR_GetItemTextLink(item,linkStr,index,itemName)
        local startPos,endPos = string.find(linkStr,item,1,true);
        local startBound = "|cff";
        local endBound = "|r";

        -- check for colored links first
        local lastLinkStart;
        local linkStart = string.find(linkStr,startBound,1,true);
        
        local whisperButton = getglobal("ItemRefWhisperButton"..index);
        whisperButton:SetButtonState("NORMAL");

        if (linkStart == nil) then -- link is from loot
                -- disable the whisper button
                whisperButton:SetButtonState("DISABLED");
                        
                local bag,slot = IRR_FindItem(itemName, skipcount);
                
                if (bag and slot) then
                        link = GetContainerItemLink(bag, slot);
                        return link;
                else
                        return nil;
                end
        end

        --dout("linkstart: "..linkStart);
        while (linkStart ~= nil) and (linkStart < startPos) do
                lastLinkStart = linkStart;
                linkStart = string.find(linkStr,startBound,(lastLinkStart+1),true);
        end

        linkStart = lastLinkStart;

        local linkEnd = string.find(linkStr,endBound,endPos,true);

        if (linkEnd == nil) then
                return;
        end

        linkEnd = linkEnd + 1;

        local link = strsub(linkStr, linkStart, linkEnd);
        --dout(link);
        
        --IRR_DecryptLink("mine: "..link);

        return link;

end


function IRR_SetWhisperPlayerAndLink(index,frame)
        --local itemText = getglobal(frame.."TextLeft1");
        local itemName = IR_MOD_ITEMREF_WINDOWS[index].name;

        local item = "["..itemName.."]";
        
        --if (item == nil) then
                --dout("nil returning");
        --      return;
        --end
        --dout("item: "..item);
        
        -- 
        local foundIndex = 0;
        for i=1,table.getn(IR_MOD_CHAT_BUFFER) do
                local startPos,endPos = string.find(IR_MOD_CHAT_BUFFER[i],item,1,true);

                --dout("chatbuf: "..IR_MOD_CHAT_BUFFER[i]);
                if (startPos ~= nil) then
                        foundIndex = i;
                        --dout("found");
                end
        end

        local whisperButton = getglobal("ItemRefWhisperButton"..index);
        whisperButton:SetButtonState("DISABLED");
        if (foundIndex > 0) then
                local member = IR_MOD_CHAT_NAMES_BUFFER[foundIndex];

                if (string.len(member) > 0) then
                        IR_MOD_ITEMREF_WINDOWS[index].whisper = member;
                        whisperButton:SetButtonState("NORMAL");
                else
                        whisperButton:SetButtonState("DISABLED");
                        IR_MOD_ITEMREF_WINDOWS[index].whisper = "";
                end
                        
        end

        -- New link
        local textLink = IRR_LINK_COLOR_OPEN;
        textLink = textLink..IRR_LINK_COLORS[IR_MOD_ITEMREF_WINDOWS[index].quality];
        textLink = textLink..IRR_LINK_HYPERLINK_OPEN;
        textLink = textLink..IR_MOD_ITEMREF_WINDOWS[index].itemRefID;
        textLink = textLink..IRR_LINK_LINK_OPEN;
        textLink = textLink..IR_MOD_ITEMREF_WINDOWS[index].name;
        textLink = textLink..IRR_LINK_LINK_CLOSE;
        textLink = textLink..IRR_LINK_COLOR_CLOSE;

        IR_MOD_ITEMREF_WINDOWS[index].textlink = textLink;

        --IRR_DecryptLink(linkStr);
        --IRR_DecryptLink(textLink);
        --dout("quality: "..iiRarity);
        --ITEM_QUALITY_COLORS
end

function IRR_DecryptLink(link)
        local dString = "";

        for i=1,string.len(link) do
                dString = dString.."-"..string.char(string.byte(link,i));
        end

        dout(dString);
end


function IRR_DoWhisperPlayer(index)
        local member = IR_MOD_ITEMREF_WINDOWS[index].whisper;

        if (member ~= nil) then
                if ( not ChatFrameEditBox:IsVisible() ) then
                        ChatFrame_OpenChat("/w "..member.." ");
                else
                        ChatFrameEditBox:SetText("/w "..member.." ");
                end
        end
end

function IRR_DoRelinkItem(index)
        local link = IR_MOD_ITEMREF_WINDOWS[index].textlink;
        --IRR_DecryptLink("chat edit: "..link);

        if (link ~= nil) then
                if ( not ChatFrameEditBox:IsVisible() ) then
                        ChatFrame_OpenChat(link);
                else
                        ChatFrameEditBox:SetText(ChatFrameEditBox:GetText()..link);
                end
        end
end

function IRR_DoRelinkCompItem(index,compWindow)
        local link = IR_MOD_ITEMREF_WINDOWS[index].compareLinks[compWindow];
        --IRR_DecryptLink("chat edit: "..link);

        if (link ~= nil) then
                if ( not ChatFrameEditBox:IsVisible() ) then
                        ChatFrame_OpenChat(link);
                else
                        ChatFrameEditBox:SetText(ChatFrameEditBox:GetText()..link);
                end
        end
end

function IRR_DoDressingRoom(index)
        --dout(IR_MOD_ITEMREF_WINDOWS[index].itemID);
        --dout(IR_MOD_ITEMREF_WINDOWS[index].itemRefID);
        --dout("dress up");
        --ShowUIPanel(DressUpFrame);
        --DressUpModel:Dress();
        --DressUpModel:TryOn(IR_MOD_ITEMREF_WINDOWS[index].itemID);

        DressUpItemLink(IR_MOD_ITEMREF_WINDOWS[index].itemRefID);
        
end

function IRR_GetItemID(link)
        return string.sub(link,6,string.find(link,":",6)-1);
end

function IRR_FindItem(name, skipcount)
        skipcount = skipcount or 0;
        
        for i=NUM_BAG_FRAMES,0,-1 do
                for j=GetContainerNumSlots(i),1,-1 do
                        if (IRR_GetItemName(i,j) == name) then 
                                if skipcount == 0 then 
                                        return i,j; 
                                end
                                skipcount = skipcount - 1;
                        end
                end
        end
end

function IRR_GetItemName(bag, slot)
        local linktext = nil;

        linktext = GetContainerItemLink(bag, slot);
        
        if linktext then
                local _,_,name = string.find(linktext, "^.*%[(.*)%].*$");
                return name;
        else
                return "";
        end
end

function IRR_DoEllipses(text,maxWidth)
        local s = text:GetText();
        s = string.sub(s,1,string.len(s)-7);
        
        return s.."...";
end

function IRR_ClearAllFields(index)
        for i=2,30 do
                local text1 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextLeft"..i);
                local text2 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextRight"..i);

                text1:SetText("");
                text2:SetText("");
        end
end

function IRR_DoMinimize(index)
        if (IR_MOD_ITEMREF_WINDOWS[index].minimized ~= nil) then
                --dout("restore");
                IR_MOD_ITEMREF_WINDOWS[index].minimized = nil;
                
                for i=2,30 do
                        local text1 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextLeft"..i);
                        local text2 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextRight"..i);

                        local text1Str = text1:GetText();
                        --local text2Str = text2:GetText();
                        
                        if (IR_MOD_ITEMREF_WINDOWS[index].fontStringStatus1[i] == 1) then
                                text1:Show();
                        end

                        if (IR_MOD_ITEMREF_WINDOWS[index].fontStringStatus2[i] == 1) then
                                text2:Show();
                        end
                end

                local compareButt = getglobal("ItemRefCompButton"..index);
                local whisperButt = getglobal("ItemRefWhisperButton"..index);
                local relinkButt = getglobal("ItemRefRelinkButton"..index);
                local DRButt = getglobal("ItemRefDRButton"..index);

                compareButt:Show();
                whisperButt:Show();
                relinkButt:Show();
                DRButt:Show();

                local text1 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextLeft1");
                text1:SetText(IR_MOD_ITEMREF_WINDOWS[index].name);

                -- move min button
                local minButton = getglobal("ItemRefMinButton"..index);
                minButton:SetPoint("TOPRIGHT","ItemRefCloseButton"..index,"TOPRIGHT",0,-20);
                
                if (AUCTIONEER_VERSION ~= nil or ENCHANTRIX_VERSION ~= nil) then
                        IRR_DoAuctioneerFrame(index);
                end
        else
                --dout("minimize");
                IR_MOD_ITEMREF_WINDOWS[index].minimized = 1;
                        
                for i=2,30 do
                        local text1 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextLeft"..i);
                        local text2 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextRight"..i);

                        if (text1:IsVisible()) then
                                IR_MOD_ITEMREF_WINDOWS[index].fontStringStatus1[i] = 1;
                        else
                                IR_MOD_ITEMREF_WINDOWS[index].fontStringStatus1[i] = 0;
                        end

                        if (text2:IsVisible()) then
                                IR_MOD_ITEMREF_WINDOWS[index].fontStringStatus2[i] = 1;
                        else
                                IR_MOD_ITEMREF_WINDOWS[index].fontStringStatus2[i] = 0;
                        end

                        text1:Hide();
                        text2:Hide();
                end

                --dout("Window Width: "..IR_MOD_ITEMREF_WINDOWS[index].window:GetWidth());
                --local text1 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextLeft1");
                --dout("String width: "..text1:GetStringWidth());

                local windowWidth = IR_MOD_ITEMREF_WINDOWS[index].window:GetWidth() -37 - 32;
                local text1 = getglobal(IR_MOD_ITEMREF_WINDOWS[index].windowName.."TextLeft1");
                local stringWidth = text1:GetStringWidth();

                if (stringWidth >= windowWidth) then
                        text1:SetText(IRR_DoEllipses(text1,windowWidth));
                end

                -- move min button
                local minButton = getglobal("ItemRefMinButton"..index);
                minButton:SetPoint("TOPRIGHT","ItemRefCloseButton"..index,"TOPRIGHT",-20,0);
                
                local compareButt = getglobal("ItemRefCompButton"..index);
                local whisperButt = getglobal("ItemRefWhisperButton"..index);
                local relinkButt = getglobal("ItemRefRelinkButton"..index);
                local DRButt = getglobal("ItemRefDRButton"..index);

                compareButt:Hide();
                whisperButt:Hide();
                relinkButt:Hide();
                DRButt:Hide();

                local compFrame1 = getglobal("IRR_ItemCompTooltip"..index);
                local compFrame2 = getglobal("IRR_ItemCompTool"..index+10);
                IR_MOD_ITEMREF_WINDOWS[index].compare = 0;

                compFrame1:Hide();
                compFrame2:Hide();

                if (AUCTIONEER_VERSION ~= nil or ENCHANTRIX_VERSION ~= nil) then
                        if (TT_Clear) then
                                TT_Clear();
                        elseif(EnhTooltip.ClearTooltip) then
                                EnhTooltip.ClearTooltip();
                        end
                end
        end
end

-------------------------------------------------------------------------------------------
-- EVENT HANDLERS
-------------------------------------------------------------------------------------------
function IRR_OnLoad()
        this:RegisterEvent("CHAT_MSG_GUILD");
        this:RegisterEvent("CHAT_MSG_PARTY");
        this:RegisterEvent("CHAT_MSG_CHANNEL");
        this:RegisterEvent("CHAT_MSG_WHISPER");
        this:RegisterEvent("CHAT_MSG_RAID");
        this:RegisterEvent("CHAT_MSG_OFFICER");
        this:RegisterEvent("CHAT_MSG_SAY");
        this:RegisterEvent("CHAT_MSG_LOOT");
        this:RegisterEvent("CHAT_MSG_YELL");
end

function IRR_OnEvent(event,arg1,arg2)
        IR_MOD_CHAT_BUFFER[IR_MOD_CHAT_BUFFER_INDEX] = nil;
        IR_MOD_CHAT_BUFFER[IR_MOD_CHAT_BUFFER_INDEX] = arg1;
        IR_MOD_CHAT_NAMES_BUFFER[IR_MOD_CHAT_BUFFER_INDEX] = nil;
        IR_MOD_CHAT_NAMES_BUFFER[IR_MOD_CHAT_BUFFER_INDEX] = arg2;
        
        IR_MOD_CHAT_BUFFER_INDEX = IR_MOD_CHAT_BUFFER_INDEX + 1;

        if (IR_MOD_CHAT_BUFFER_INDEX > IR_MOD_CHAT_BUFFER_MAX) then
                IR_MOD_CHAT_BUFFER_INDEX = 1;
        end

        --dout("stored: "..IR_MOD_CHAT_NAMES_BUFFER[IR_MOD_CHAT_BUFFER_INDEX-1]..": "..IR_MOD_CHAT_BUFFER[IR_MOD_CHAT_BUFFER_INDEX-1]);
end


function IRR_EscPressed()
        dout("Escape");
end

function IRR_ItemRefTooltip_OnLoad(index)
        local windowInfo = {};

        local itemFrame = getglobal("IRR_ItemRefTooltip"..index);
        local itemFrameName = "IRR_ItemRefTooltip"..index;
        local compFrame = getglobal("IRR_ItemCompTooltip"..index);
        local compFrameName = "IRR_ItemCompTooltip"..index;
        
        windowInfo.window = itemFrame;
        windowInfo.windowName = itemFrameName;
        
        windowInfo.index = index;
        windowInfo.state = 0;
        windowInfo.link = 0;
        windowInfo.compare = 0;
        windowInfo.compareWindow = compFrame;
        windowInfo.compareWindowName = compFrameName;
        windowInfo.slots = nil;
        windowInfo.whisper = nil;
        windowInfo.textlink = nil;
        windowInfo.itemRefID = nil;
        windowInfo.itemID = nil;
        windowInfo.quality = nil;
        windowInfo.name = nil;
        windowInfo.minimized = nil;
        windowInfo.originalHeight = nil;
        windowInfo.compareLinks = {};
        windowInfo.firstTimeAuc = 1;
        windowInfo.fontStringStatus1 = {};
        windowInfo.fontStringStatus2 = {};
        
        IR_MOD_ITEMREF_WINDOWS[index] = windowInfo;

        this.index = index;
end


function IRR_ItemRefTooltip_OnClick(index,isCompFrame)
        local itemFrame;
        local masterButton = 0;

        if (IsShiftKeyDown() == 1) then
                IRR_CloseAllWindows();
        else
                if (isCompFrame == nil) then
                        itemFrame = getglobal("IRR_ItemRefTooltip"..index);
                        
                        IR_MOD_ITEMREF_WINDOWS[index].state = 0;
                        IR_MOD_ITEMREF_WINDOWS[index].link = 0;
                        IR_MOD_ITEMREF_WINDOWS[index].firstTimeAuc = 1;

                        HideUIPanel(itemFrame);
                        masterButton = 1;

                        IR_MOD_ITEMREF_WINDOWS[index].minimized = nil;
                end

                if (index <= 10 or masterButton == 1) then
                        local compFrame = getglobal("IRR_ItemCompTooltip"..index);
                        IR_MOD_ITEMREF_WINDOWS[index].compare = 0;
                        HideUIPanel(compFrame);
                end

                if (masterButton == 1) then
                        index = index + 10;
                end

                if (index > 10) then
                        local compFrame = getglobal("IRR_ItemCompTool"..index);
                        HideUIPanel(compFrame);

                        IR_MOD_ITEMREF_WINDOWS[index-10].compare = 0;
                end

                GameTooltip:Hide();
        end
end


function IRR_SetWindowHeight(itemRef)
        if (IR_MOD_ITEMREF_WINDOWS[itemRef.index].minimized ~= nil) then
                itemRef:SetHeight(37);
        else
                if (IR_MOD_ITEMREF_WINDOWS[itemRef.index].originalHeight) then
                        itemRef:SetHeight(IR_MOD_ITEMREF_WINDOWS[itemRef.index].originalHeight);
                end
        end
end

function IRR_SetWindowWidth()
        if (AUCTIONEER_VERSION ~= nil or ENCHANTRIX_VERSION ~= nil) then
                local itemRefFrame = IR_MOD_ITEMREF_WINDOWS[IR_MOD_AUCTIONEER_INDEX].window;

                local fWidth = itemRefFrame:GetWidth();
                local aWidth = EnhancedTooltip:GetWidth();

                if (EnhancedTooltip:GetLeft() == IR_MOD_AUCTIONEER_POS) then
                        if (fWidth > aWidth) then
                                EnhancedTooltip:SetWidth(fWidth);
                        else
                                itemRefFrame:SetWidth(aWidth);
                        end
                end
        end
end

function IRR_DoTooltipUpdate(elapse)
        IRR_SetWindowHeight(this);
        IRR_SetWindowWidth();
end

function IRR_BetterShiftClick(link,text,button,osir)
        local iiName,iiLink,iiRarity,_,iiType,_,_,iiEquip = GetItemInfo(link);

        if (not iiRarity) then
                --dout("Original");
                osir(link,text,button);
                return; end
        
        local textLink = IRR_LINK_COLOR_OPEN;
        textLink = textLink..IRR_LINK_COLORS[iiRarity];
        textLink = textLink..IRR_LINK_HYPERLINK_OPEN;
        textLink = textLink..link;
        textLink = textLink..IRR_LINK_LINK_OPEN;
        textLink = textLink..iiName;
        textLink = textLink..IRR_LINK_LINK_CLOSE;
        textLink = textLink..IRR_LINK_COLOR_CLOSE;

        --dout("link: "..textLink);

        if (textLink ~= nil) then
                if ( not ChatFrameEditBox:IsVisible() ) then
                        ChatFrame_OpenChat(textLink);
                else
                        ChatFrameEditBox:SetText(ChatFrameEditBox:GetText()..textLink);
                end
        end
end

function IRR_DoTooltipShow(index)
        local itemRef = this;

        --IRR_SetWindowHeight(itemRef);
                
        local iiName,iiLink,iiRarity,_,iiType,_,_,iiEquip = GetItemInfo(IR_MOD_ITEMREF_WINDOWS[index].itemRefID);
        IR_MOD_AUCTIONEER_INDEX = index;                -- Make the tooltip index available to other mods.

        IR_MOD_ITEMREF_WINDOWS[index].name = iiName;
        IR_MOD_ITEMREF_WINDOWS[index].quality = iiRarity;

                -- Set the whisper/link stuff
        IRR_SetWhisperPlayerAndLink(index,"IRR_ItemRefTooltip"..index);
        
        local slots = IRR_GetCompareItemIndex("IRR_ItemRefTooltip"..index);

        local compButton = getglobal("ItemRefCompButton"..index);
        local DRButton = getglobal("ItemRefDRButton"..index);
                        
        if (slots == nil) then
                --HideUIPanel(compButton);
                --HideUIPanel(whisperButton);
                IR_MOD_ITEMREF_WINDOWS[index].slots = nil;
                slots = {};
                --dout("NOT an equippable item...");
        end
        
        local empty = 1;
        
        for i=1,table.getn(slots) do
                local check = GetInventoryItemLink("player", slots[i]);

                if (check ~= nil) then
                        empty = 0;
                        --do break end;
                end
                
                --dout(check);
                IR_MOD_ITEMREF_WINDOWS[index].compareLinks[i] = check;
        end

        if (empty == 1 or slots == nil) then
                compButton:SetButtonState("DISABLED");
                if (empty == 1) then
                        --dout("No equipped item...");
                end
        else
                compButton:SetButtonState("NORMAL");
                IR_MOD_ITEMREF_WINDOWS[index].slots = slots;
        end

        --dout(iiType.."*");
        if (iiType == IRR_ARMOR or iiType == IRR_WEAPON) then
                DRButton:SetButtonState("NORMAL");
        else
                --dout("disabling DR");
                DRButton:SetButtonState("DISABLED");
        end

        IR_MOD_ITEMREF_WINDOWS[index].minimized = 1;
        IRR_DoMinimize(index);

        -- Auctioneer
        IR_MOD_ITEMREF_WINDOWS[index].firstTimeAuc = 1;
        IRR_DoAuctioneerFrame(index);
                
        table.foreach(LINK_WRANGLER_CALLER, function(k,v) LinkWrangler_AddonContent(v,k,index); end);
                
        return;
end

function IRR_SizeChanged(index)
        if (IR_MOD_ITEMREF_WINDOWS[index].minimized == nil) then
                --dout("size changed");
                IR_MOD_ITEMREF_WINDOWS[index].originalHeight = this:GetHeight();

                if (this:GetHeight() < IRR_MIN_HEIGHT) then
                        IR_MOD_ITEMREF_WINDOWS[index].originalHeight = IRR_MIN_HEIGHT;
                end
        end
end

-------------------------------------------------------------------------------------------
-- Hook functions
-------------------------------------------------------------------------------------------
local originalSetItemRef;
originalSetItemRef = SetItemRef;
function SetItemRef(link, text, button)
        --IRR_DecryptLink(link);
        --dout("link: "..link)

        if (IsControlKeyDown()) then
                originalSetItemRef(link,text,button);
                return;
        end
        
        if ( strsub(link, 1, 4) == "item" ) then
                if (IsShiftKeyDown()) then
                        IRR_BetterShiftClick(link,text,button,originalSetItemRef);
                        return; end
                
                local index = IRR_GetWindowIndex(link);
                
                if (index == 0) then -- ignore
                        --dout("index is 0.  Returning...?");
                        return;
                end

                local itemRef = IR_MOD_ITEMREF_WINDOWS[index].window;
                
                IR_MOD_ITEMREF_WINDOWS[index].itemRefID = link;
                --IR_MOD_ITEMREF_WINDOWS[index].itemID = IRR_GetItemID(link);
                        
                ShowUIPanel(itemRef);
                if ( not itemRef:IsVisible() ) then
                        itemRef:SetOwner(UIParent, "ANCHOR_PRESERVE");
                end

                IRR_ClearAllFields(index);
                itemRef:SetHyperlink(link);
                
                if (ChatBox_Names) then
                        --originalSetItemRef(link,text,button);
                end
        else
                -- Call original if not handled above
                originalSetItemRef(link,text,button);
                --dout("using original");               
        end
end

Generated by GNU Enscript 1.6.5.90.