vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[****************************************************************
        BankItems v10900

        Author: wow.jaslaughter.com
        ****************************************************************
        Description:
                Type /bi or /bankitems to see what is currently in your
                bank.  You must visit your bank one time to initialize.

        Credits:
                Original concept from Merphle
                I look for SellValue data for the list, an addon originally
                by Sarf.  I use the version from CapnBry at http://capnbry.net/wow

        Official Site:
                wow.jaslaughter.com
        
        BankItems-10900
        ****************************************************************]]

BINDING_HEADER_BANKITEMS = "BankItems Bindings";
BINDING_NAME_TOGGLEBANKITEMS = "Toggle BankItems";
BINDING_NAME_TOGGLEBANKITEMSALL = "Toggle BankItems and all Bags";
BINDING_NAME_RESETFRAMEPOS = "Reset BankItems positions";
BANKITEMS_VERSIONTEXT = "BankItems v10900";

BankItems_Save = {};
local loaded = nil;
local bankPlayer = nil;
local bankPlayerName = nil;
local allRealms = 0;
local allBags = 0;
local CONTAINER_FRAME_TABLE = {
        [0] = {"Interface\\ContainerFrame\\UI-BackpackBackground", 256, 256, 239},
        [1] = {"Interface\\ContainerFrame\\UI-Bag-1x4", 256, 128, 96},
        [2] = {"Interface\\ContainerFrame\\UI-Bag-1x4", 256, 128, 96},
        [3] = {"Interface\\ContainerFrame\\UI-Bag-1x4", 256, 128, 96},
        [4] = {"Interface\\ContainerFrame\\UI-Bag-1x4", 256, 128, 96},
        [5] = {"Interface\\ContainerFrame\\UI-Bag-1x4+2", 256, 128, 116},
        [6] = {"Interface\\ContainerFrame\\UI-Bag-1x4+2", 256, 128, 116},
        [7] = {"Interface\\ContainerFrame\\UI-Bag-1x4+2", 256, 128, 116},
        [8] = {"Interface\\ContainerFrame\\UI-Bag-2x4", 256, 256, 137},
        [9] = {"Interface\\ContainerFrame\\UI-Bag-2x4+2", 256, 256, 157},
        [10] = {"Interface\\ContainerFrame\\UI-Bag-2x4+2", 256, 256, 157},
        [11] = {"Interface\\ContainerFrame\\UI-Bag-2x4+2", 256, 256, 157},
        [12] = {"Interface\\ContainerFrame\\UI-Bag-3x4", 256, 256, 178},
        [13] = {"Interface\\ContainerFrame\\UI-Bag-3x4+2", 256, 256, 198},
        [14] = {"Interface\\ContainerFrame\\UI-Bag-3x4+2", 256, 256, 198},
        [15] = {"Interface\\ContainerFrame\\UI-Bag-3x4+2", 256, 256, 198},
        [16] = {"Interface\\ContainerFrame\\UI-Bag-4x4", 256, 256, 219},
        [18] = {"Interface\\ContainerFrame\\UI-Bag-4x4+2", 256, 256, 239},
        [20] = {"Interface\\ContainerFrame\\UI-Bag-5x4", 256, 256, 259},
};

function BankItems_OnLoad()
        this:RegisterEvent("VARIABLES_LOADED");

        this:RegisterEvent("BANKFRAME_OPENED");
        this:RegisterEvent("PLAYERBANKSLOTS_CHANGED");
        this:RegisterEvent("PLAYERBANKBAGSLOTS_CHANGED");
        this:RegisterEvent("BAG_UPDATE");

        this:RegisterEvent("PLAYER_MONEY");

        SlashCmdList["BANKITEMS"] = function(msg) BankItems_SlashHandler(msg) end;
        SLASH_BANKITEMS1 = "/bankitems";
        SLASH_BANKITEMS2 = "/bi";

        tinsert(UISpecialFrames,"BankItems_Frame");
end

function BankItems_OnEvent(event)
        if ( event == "VARIABLES_LOADED" ) then
                loaded = 1;
        end
        if ( not loaded ) then
                return;
        end
        if ( bankPlayer == nil ) then
                bankPlayer = BankItems_GetPlayer(UnitName("player").."|"..BankItems_Trim(GetCVar("realmName")));
                BankItems_SaveMoney();
                return;
        end
        if ( event == "BANKFRAME_OPENED" or event == "PLAYERBANKSLOTS_CHANGED" or event == "PLAYERBANKBAGSLOTS_CHANGED" ) then
                BankItems_SaveItems();
                return;
        end
        if ( event == "BAG_UPDATE" and BankFrame:IsVisible() ) then
                BankItems_SaveItems();
                if ( tonumber(arg1) and tonumber(arg1) > 4 and tonumber(arg1) <= 10 ) then
                        BankItems_PopulateBag(arg1);
                end
                return;
        end
        if ( event == "PLAYER_MONEY" ) then
                BankItems_SaveMoney();
                return;
        end
end

function BankItems_Frame_OnShow()
        PlaySound("igMainMenuOpen");
        if ( not BankItems_Frame.hasShown ) then
                BankItems_Frame.hasShown = 1;
                SetPortraitTexture(BankItems_Portrait, "player");
                BankItems_TotalMoneyText:ClearAllPoints();
                BankItems_TotalMoneyText:SetPoint("LEFT","BankItems_MoneyFrameTotalCopperButton","RIGHT",0,0);
        end
        BankItems_SaveMoney();
end

function BankItems_Frame_OnHide()
        for bagNum = 1, 6 do
                getglobal("BankItems_ContainerFrame"..bagNum):Hide();
        end
end

function BankItems_GetPlayer(playerName)
        if ( not BankItems_Save[playerName] or (not BankItems_Save[playerName].money and table.getn(BankItems_Save[playerName]) == 0) ) then
                BankItems_Save[playerName] = {};
        end
        BankItems_TitleText:SetText(BankItems_Split(playerName,"|")[1].." of "..BankItems_Split(playerName,"|")[2]);
        bankPlayerName = playerName;
        if ( playerName == UnitName("player").."|"..BankItems_Trim(GetCVar("realmName")) ) then
                SetPortraitTexture(BankItems_Portrait, "player");
        else
                BankItems_Portrait:SetTexture("Interface\\QuestFrame\\UI-QuestLog-BookIcon");
        end
        return BankItems_Save[playerName];
end

function BankItems_SlashHandler(msg)
        if ( msg and strlen(msg) > 0 ) then
                msg = strlower(msg);
        end
        if ( not msg ) then
                msg = "";
        end
        if ( msg == "list" ) then
                BankItems_ListAll();
                return;
        end
        if ( msg == "resetpos" ) then
                BankItems_ResetPos();
                return;
        end
        if ( msg == "clear" ) then
                local selected = BankItems_UserDropdown_GetValue();
                if ( BankItems_Save[selected] ) then
                        BankItems_Save[selected] = nil;
                end
                bankPlayer = BankItems_GetPlayer(UnitName("player").."|"..BankItems_Trim(GetCVar("realmName")));
                if ( BankFrame:IsVisible() ) then
                        BankItems_SaveItems();
                end
                BankItems_SaveMoney();

                BankItems_Frame:Hide();
        end
        if ( msg == "clearall" ) then
                BankItems_Save = {};
                bankPlayer = BankItems_GetPlayer(UnitName("player").."|"..BankItems_Trim(GetCVar("realmName")));
                if ( BankFrame:IsVisible() ) then
                        BankItems_SaveItems();
                end
                BankItems_SaveMoney();

                BankItems_Frame:Hide();
        end
        if ( msg == "help" ) then
                BankItems_Chat(BANKITEMS_VERSIONTEXT);
                BankItems_Chat("Type /bi or /bankitems to open BankItems");
                BankItems_Chat("-- /bi all : open BankItems and all bags");
                BankItems_Chat("-- /bi list : list contents in chat");
                BankItems_Chat("-- /bi clear : clear currently selected player's info");
                BankItems_Chat("-- /bi clearall : clear all players' info");
                BankItems_Chat("-- /bi resetpos : reset BankItems and bags position");
                return;
        end
        if ( msg == "allrealms" ) then
                if ( allRealms == 0 ) then
                        allRealms = 1;
                else
                        allRealms = 0;
                end
        end
        BankItems_PopulateFrame();

        if ( BankItems_Frame:IsVisible() ) then
                BankItems_Frame:Hide();
        else
                BankItems_Frame:Show();
                if ( msg == "all" ) then
                        allBags = 1;
                        for num = 1, 6 do
                                getglobal("BankItems_ContainerFrame"..num):Hide();
                                BankItems_Bag_OnClick(num + 4);
                        end
                else
                        allBags = 0;
                end
        end
end

function BankItems_ResetPos()
        BankItems_Frame:ClearAllPoints();
        BankItems_Frame:SetPoint("TOPLEFT","UIParent","TOPLEFT",50,-104);

        BankItems_ContainerFrame1:ClearAllPoints();
        BankItems_ContainerFrame1:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",0,-260);

        BankItems_ContainerFrame2:ClearAllPoints();
        BankItems_ContainerFrame2:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",0,0);

        BankItems_ContainerFrame3:ClearAllPoints();
        BankItems_ContainerFrame3:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",0,-520);

        BankItems_ContainerFrame4:ClearAllPoints();
        BankItems_ContainerFrame4:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",256,0);

        BankItems_ContainerFrame5:ClearAllPoints();
        BankItems_ContainerFrame5:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",256,-260);

        BankItems_ContainerFrame6:ClearAllPoints();
        BankItems_ContainerFrame6:SetPoint("TOPLEFT","BankItems_Frame","TOPRIGHT",256,-520);
end

function BankItems_SaveMoney()
        if ( UnitName("player") and BankItems_Trim(GetCVar("realmName")) ) then
                if ( BankItems_Save[UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))] ) then
                        BankItems_Save[UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))]["money"] = GetMoney();
                end
                if ( BankItems_MoneyFrame:IsVisible() ) then
                        MoneyFrame_Update("BankItems_MoneyFrame", bankPlayer.money);
                end
        end
end

function BankItems_UpdateTotalMoney()
        BankItems_SaveMoney();
        local totalMula = 0;

        if ( allRealms == 1 ) then
                for key, value in BankItems_Save do
                        if ( BankItems_Save[key].money ) then
                                totalMula = totalMula + BankItems_Save[key].money;
                        end
                end
        else
                for key, value in BankItems_Save do
                        local thisRealmPlayers = BankItems_Split(key, "|")[2];
                        if ( thisRealmPlayers == BankItems_Trim(GetCVar("realmName")) and (table.getn(BankItems_Save[key]) > 0 or BankItems_Save[key].money) ) then
                                if ( BankItems_Save[key].money ) then
                                        totalMula = totalMula + BankItems_Save[key].money;
                                end
                        end
                end
        end
        MoneyFrame_Update("BankItems_MoneyFrameTotal", totalMula);
end

function BankItems_SaveItems()
        local itemLink,icon,quantity,bagNum_Slots;
        local currPlayer = BankItems_Save[UnitName("player").."|"..BankItems_Trim(GetCVar("realmName"))];
        if ( BankFrame:IsVisible() ) then
                for num = 1, 24 do
                        itemLink = GetContainerItemLink(BANK_CONTAINER, num);
                        icon, quantity = GetContainerItemInfo(BANK_CONTAINER, num);
                        if ( itemLink ) then
                                currPlayer[num] = {
                                        ["icon"] = icon,
                                        ["count"] = quantity,
                                        ["link"] = itemLink
                                };
                        else
                                currPlayer[num] = nil;
                        end
                end
                for bagNum = 5, 10 do
                        bagNum_Slots = GetContainerNumSlots(bagNum);
                        bagNum_ID = BankButtonIDToInvSlotID(bagNum, 1);
                        itemLink = GetInventoryItemLink("player", bagNum_ID);
                        icon = GetInventoryItemTexture("player", bagNum_ID);

                        if ( icon ) then
                                currPlayer["Bag"..bagNum] = {
                                        ["link"] = itemLink,
                                        ["icon"] = icon,
                                        ["size"] = bagNum_Slots
                                };
                        else
                                currPlayer["Bag"..bagNum] = nil;
                                getglobal("BankItems_ContainerFrame"..(bagNum - 4)):Hide();
                                break;
                        end

                        itemLink = nil;

                        for bagItem = 1, bagNum_Slots do
                                itemLink = GetContainerItemLink(bagNum, bagItem);
                                icon, quantity = GetContainerItemInfo(bagNum, bagItem);
                                if ( itemLink ) then
                                        currPlayer["Bag"..bagNum][bagItem] = {
                                                ["link"] = itemLink,
                                                ["icon"] = icon,
                                                ["count"] = quantity
                                        };
                                else
                                        currPlayer["Bag"..bagNum][bagItem] = nil;
                                end
                        end
                end
        end
        BankItems_SaveMoney();
        if ( BankItems_Frame:IsVisible() ) then
                BankItems_PopulateFrame();
        end
        currPlayer = nil;
end

function BankItems_ListAll()
        local sellValue;
        if ( bankPlayer ) then
                for num = 1, 24 do
                        if ( bankPlayer[num] and bankPlayer[num].link ) then
                                if ( sellValues ) then
                                        sellValue = BankItem_ParseMoney(SellValues[BankItems_ParseLink(bankPlayer[num].link)]);
                                elseif ( ItemLinks ) then
                                        sellValue = BankItem_ParseMoney(ItemLinks[BankItems_ParseLink(bankPlayer[num].link)].p);
                                end
                                if ( sellValue ) then
                                        BankItems_Chat("Item "..num..": "..bankPlayer[num].link.." x"..bankPlayer[num].count.." (Sells for "..sellValue.." each)");
                                else
                                        BankItems_Chat("Item "..num..": "..bankPlayer[num].link.." x"..bankPlayer[num].count);
                                end
                        end
                end
                for bagNum = 5, 10 do
                        if ( bankPlayer["Bag"..bagNum] and bankPlayer["Bag"..bagNum].size > 0 ) then
                                for bagItem = 1, bankPlayer["Bag"..bagNum].size do
                                        if ( bankPlayer["Bag"..bagNum][bagItem] and bankPlayer["Bag"..bagNum][bagItem].link ) then
                                                if ( sellValues ) then
                                                        sellValue = BankItem_ParseMoney(SellValues[BankItems_ParseLink(bankPlayer["Bag"..bagNum][bagItem].link)]);
                                                elseif ( ItemLinks ) then
                                                        sellValue = BankItem_ParseMoney(ItemLinks[BankItems_ParseLink(bankPlayer["Bag"..bagNum][bagItem].link)].p);
                                                end
                                                if ( sellValue ) then
                                                        BankItems_Chat("Bag "..(bagNum - 4).." Item "..bagItem..": "..bankPlayer["Bag"..bagNum][bagItem].link.." x"..bankPlayer["Bag"..bagNum][bagItem].count.." (Sells for "..sellValue.." each)");
                                                else
                                                        BankItems_Chat("Bag "..(bagNum - 4).." Item "..bagItem..": "..bankPlayer["Bag"..bagNum][bagItem].link.." x"..bankPlayer["Bag"..bagNum][bagItem].count);
                                                end
                                        end
                                end
                        end
                end
        end
end

function BankItems_PopulateFrame()
        local texture,button;
        if ( bankPlayer ) then
                for num = 1, 24 do
                        button = getglobal("BankItems_Item"..num);
                        texture = getglobal("BankItems_Item"..num.."IconTexture");
                        if ( bankPlayer[num] ) then
                                texture:SetTexture(bankPlayer[num].icon);
                                SetItemButtonCount(button,bankPlayer[num].count);
                        else
                                texture:SetTexture("");
                                SetItemButtonCount(getglobal("BankItems_Item"..num),nil);
                        end
                end
                for bagNum = 5, 10 do
                        button = getglobal("BankItems_Bag"..(bagNum - 4));
                        texture = getglobal(button:GetName().."IconTexture");
                        if ( bankPlayer["Bag"..bagNum] and bankPlayer["Bag"..bagNum].icon ) then
                                texture:SetTexture(bankPlayer["Bag"..bagNum].icon);
                                SetItemButtonTextureVertexColor(button, 1.0,1.0,1.0);
                        else
                                texture:SetTexture("Interface\\PaperDoll\\UI-PaperDoll-Slot-Bag");
                                SetItemButtonTextureVertexColor(button, 1.0,0.1,0.1);
                        end
                        button:Show();
                end
                if ( bankPlayer.money ) then
                        MoneyFrame_Update("BankItems_MoneyFrame", bankPlayer.money);
                        BankItems_MoneyFrame:Show();
                else
                        BankItems_MoneyFrame:Hide();
                end
        end
        BankItems_UpdateTotalMoney();
end

function BankItems_Button_OnEnter()
        if ( not bankPlayer[this:GetID()] ) then
                return;
        end

        local myLink = bankPlayer[this:GetID()].link;
        if ( myLink and strlen(myLink) > 0 ) then
                GameTooltip:SetOwner(this,"ANCHOR_RIGHT");
                _,_,myLink = strfind(myLink,"|H(item:%d+:%d+:%d+:%d+)|");
                GameTooltip:SetHyperlink(myLink);
        end
end

function BankItems_BagItem_OnEnter()
        local bagID = "Bag"..this:GetParent():GetID();
        if ( not bankPlayer[bagID].link ) then
                return;
        end
        local itemID = bankPlayer[bagID].size - ( this:GetID() - 1 );
        if ( bankPlayer[bagID][itemID] ) then
                local myLink = bankPlayer[bagID][itemID].link;
                if ( myLink and strlen(myLink) > 0 ) then
                        GameTooltip:SetOwner(this,"ANCHOR_RIGHT");
                        _,_,myLink = strfind(myLink,"|H(item:%d+:%d+:%d+:%d+)|");
                        GameTooltip:SetHyperlink(myLink);
                end
        end
end

function BankItems_Button_OnClick(arg1)
        if ( bankPlayer[this:GetID()] ) then
                if ( IsControlKeyDown() ) then
                        DressUpItemLink(bankPlayer[this:GetID()].link);
                elseif ( arg1 == "LeftButton" and ChatFrameEditBox:IsVisible() ) then
                        ChatFrameEditBox:Insert(bankPlayer[this:GetID()].link);
                end
        end
end

function BankItems_BagItem_OnClick(arg1)
        local bagID = "Bag"..this:GetParent():GetID();
        local itemID = bankPlayer[bagID].size - ( this:GetID() - 1 );
        if ( bankPlayer[bagID][itemID] ) then
                if ( IsControlKeyDown() ) then
                        DressUpItemLink(bankPlayer[bagID][itemID].link);
                elseif ( arg1 == "LeftButton" and ChatFrameEditBox:IsVisible() ) then
                        ChatFrameEditBox:Insert(bankPlayer[bagID][itemID].link);
                end
        end
end

function BankItems_Bag_OnEnter()
        if ( bankPlayer["Bag"..this:GetID()] and bankPlayer["Bag"..this:GetID()].link ) then
                local myLink = bankPlayer["Bag"..this:GetID()].link;
                if ( myLink and strlen(myLink) > 0 ) then
                        GameTooltip:SetOwner(this,"ANCHOR_RIGHT");
                        _,_,myLink = strfind(myLink,"|H(item:%d+:%d+:%d+:%d+)|");
                        GameTooltip:SetHyperlink(myLink);
                end
        end
end

function BankItems_Bag_OnClick(bagID)
        if ( not bankPlayer["Bag"..bagID] or not bankPlayer["Bag"..bagID].link ) then
                return;
        end
        if ( bankPlayer["Bag"..bagID].size == 0 ) then
                if ( GetContainerNumSlots(bagID) > 0 and BankFrame:IsVisible() ) then
                        BankItems_SaveItems();
                else
                        BankItems_Chat("Bank bag is empty, and not initialized.");
                        return;
                end
        end
        local theBag = bankPlayer["Bag"..bagID];
        local bagFrame = getglobal("BankItems_ContainerFrame"..(bagID - 4));
        local bagName = bagFrame:GetName();

        if ( bagFrame:IsVisible() ) then
                bagFrame:Hide();
                return;
        end

        getglobal(bagName.."Name"):SetText(BankItems_ParseLink(theBag.link));
        getglobal(bagName.."Portrait"):SetTexture(theBag.icon);

        -- Generate the frame
        local frameSettings = CONTAINER_FRAME_TABLE[theBag.size];
        local frameBG = getglobal(bagName.."BackgroundTexture");
        local columns = NUM_CONTAINER_COLUMNS;
        local rows = ceil(theBag.size / columns);
        local button,item,idx;

        bagFrame:SetWidth(CONTAINER_WIDTH);
        bagFrame:SetHeight(frameSettings[4]);
        frameBG:SetTexture(frameSettings[1]);
        frameBG:SetWidth(frameSettings[2]);
        frameBG:SetHeight(frameSettings[3]);

        for bagItem = 1, theBag.size do
                idx = theBag.size - (bagItem - 1);
                item = theBag[idx];
                button = getglobal(bagName.."Item"..bagItem);

                if ( bagItem == 1 ) then
                        button:SetPoint("BOTTOMRIGHT", bagName, "BOTTOMRIGHT", -11, 9);
                else
                        if ( mod((bagItem-1), columns) == 0 ) then
                                button:SetPoint("BOTTOMRIGHT", bagName.."Item"..(bagItem - columns), "TOPRIGHT", 0, 4); 
                        else
                                button:SetPoint("BOTTOMRIGHT", bagName.."Item"..(bagItem - 1), "BOTTOMLEFT", -5, 0);    
                        end
                end
                button:Show();
        end
        for bagItem = theBag.size + 1, 20 do
                getglobal(bagName.."Item"..bagItem):Hide();
        end
        BankItems_PopulateBag(bagID);
        bagFrame:Show();
        PlaySound("igBackPackOpen");
end

function BankItems_PopulateBag(bagID)
        local item,theBag,idx;
        if ( bankPlayer["Bag"..bagID].size ) then
                theBag = bankPlayer["Bag"..bagID];
                for bagItem = 1, theBag.size do
                        idx = theBag.size - (bagItem - 1);
                        item = theBag[idx];
                        button = getglobal("BankItems_ContainerFrame"..(bagID - 4).."Item"..bagItem);

                        if ( item ) then
                                SetItemButtonTexture(button, item.icon);
                                SetItemButtonCount(button, item.count);
                        else
                                SetItemButtonTexture(button,"");
                                SetItemButtonCount(button, nil);
                        end
                end
        end
end

function BankItems_Bag_OnShow()
        getglobal("BankItems_Bag"..(this:GetID() - 4).."HighlightFrameTexture"):Show();
end

function BankItems_Bag_OnHide()
        getglobal("BankItems_Bag"..(this:GetID() - 4).."HighlightFrameTexture"):Hide();
end

function BankItems_ParseLink(link)
        if (string.find(link, "[", 1, true)) then
                local _,_,name = string.find(link, "^.*%[(.*)%].*$");
                return name;
        else
                return link;
        end
end

function BankItems_Chat(msg)
        if( DEFAULT_CHAT_FRAME ) then
                DEFAULT_CHAT_FRAME:AddMessage("<BankItems> "..msg, 1.0, 1.0, 0.0);
        end
end

function BankItem_ParseMoney(money)
        local disp = "";
        if ( money ) then
                local g,s,c;
                g = math.floor(money / 10000);
                money = math.mod(money,10000);
                s = math.floor(money / 100);
                money = math.mod(money,100);
                c = math.mod(money, 100);
                if ( g and g > 0 ) then
                        disp = g.."g ";
                end
                if ( s and s > 0 ) then
                        disp = disp..s.."s ";
                end
                if ( c and c > 0) then
                        disp = disp..c.."c";
                end
                if ( strlen(disp) > 0 ) then
                        return disp;
                else
                        return nil;
                end
        else
                return nil;
        end
end

function BankItems_UserDropdown_GetValue()
        if ( bankPlayerName ) then
                return bankPlayerName;
        else
                return (UnitName("player").."|"..BankItems_Trim(GetCVar("realmName")));
        end
end

function BankItems_UserDropdown_OnLoad()
        UIDropDownMenu_Initialize(this, BankItems_UserDropdown_Initialize);
        UIDropDownMenu_SetSelectedValue(this, BankItems_UserDropdown_GetValue());
        BankItems_UserDropdown.tooltip = "You are viewing this player's bank contents.";
        UIDropDownMenu_SetWidth(140, BankItems_UserDropdown);
        OptionsFrame_EnableDropDown(BankItems_UserDropdown);
end

function BankItems_UserDropdown_OnClick()
        if ( not bankPlayer ) then
                return;
        end
        UIDropDownMenu_SetSelectedValue(BankItems_UserDropdown, this.value);
        if ( this.value ) then
                bankPlayer = BankItems_GetPlayer(this.value);
        end
        BankItems_Frame_OnHide();
        BankItems_PopulateFrame();

        if ( allBags == 1 ) then
                for num = 1, 6 do
                        getglobal("BankItems_ContainerFrame"..num):Hide();
                        BankItems_Bag_OnClick(num + 4);
                end
        end
end

function BankItems_UserDropdown_Initialize()
        local selectedValue = UIDropDownMenu_GetSelectedValue(BankItems_UserDropdown);
        local info;

        if ( allRealms == 1 ) then
                for key, value in BankItems_Save do
                        if ( table.getn(BankItems_Save[key]) > 0 or BankItems_Save[key].money ) then
                                info = {};
                                info.text = BankItems_Split(key,"|")[1].." of "..BankItems_Split(key,"|")[2];
                                info.value = key;
                                info.func = BankItems_UserDropdown_OnClick;
                                if ( selectedValue == info.value ) then
                                        info.checked = 1;
                                else
                                        info.checked = nil;
                                end
                                UIDropDownMenu_AddButton(info);
                        end
                end
        else
                for key, value in BankItems_Save do
                        local thisRealmPlayers = BankItems_Split(key, "|")[2];
                        if ( thisRealmPlayers == BankItems_Trim(GetCVar("realmName")) and (table.getn(BankItems_Save[key]) > 0 or BankItems_Save[key].money) ) then
                                info = {};
                                info.text = BankItems_Split(key,"|")[1].." of "..BankItems_Split(key,"|")[2];
                                info.value = key;
                                info.func = BankItems_UserDropdown_OnClick;
                                if ( selectedValue == info.value ) then
                                        info.checked = 1;
                                else
                                        info.checked = nil;
                                end
                                UIDropDownMenu_AddButton(info);
                        end
                end
        end
end

function BankItems_Split(toCut, separator)
        local splitted = {};
        local i = 0;
        local regEx = "([^" .. separator .. "]*)" .. separator .. "?";

        for item in string.gfind(toCut .. separator, regEx) do
                i = i + 1;
                splitted[i] = BankItems_Trim(item) or '';
        end
        if ( splitted[i] == '' ) then
                splitted[i] = nil;
        end
        return splitted;
end

function BankItems_Trim (s)
        return (string.gsub(s, "^%s*(.-)%s*$", "%1"));
end

function BankItems_ShowAllRealms_CheckOnClick()
        if ( BankItems_Frame:IsVisible() ) then
                BankItems_Frame:Hide();
        end
        BankItems_SlashHandler("allrealms");
end

function BankItems_ShowAllRealms_CheckOnLoad()
        if ( allRealms == 1 ) then
                this.checked = 1;
        else
                this.checked = nil;
        end
        OptionsFrame_EnableCheckBox(this);
        this:SetChecked(this.checked);
        getglobal(this:GetName().."Text"):SetText("Show All Realms");
        this.tooltipText = "Check to show all saved characters, regardless of realm.";
end