vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
IMA_Settings = {};

local IMA_NUMITEMBUTTONS = 18;
local IMA_Playername = nil;
local IMA_AuctionFrameTab_OnClickOrig = nil;
local IMA_PickupContainerItemOrig = nil;
local IMA_ContainerFrame_UpdateOrig = nil;

function IMA_PickupContainerItem(bag, item)
        -- pass through if auction window not open or item already in
        if ( not AuctionFrame:IsVisible() ) then
                IMA_PickupContainerItemOrig(bag, item);
                return;
        end

        if ( IMA_GetItemFrame(bag, item) ) then
                return;
        end
        
        if ( not CursorHasItem() ) then
                IMA_ClearAuctionSellItem();
                IMA_AuctionFrameMassAuction.bag = bag;
                IMA_AuctionFrameMassAuction.item = item;
        end
        if ( IsAltKeyDown() and IMA_AuctionFrameMassAuction:IsVisible() and not CursorHasItem() ) then
                IMA_ClearAuctionSellItem();
                local i;
                for i = 1, IMA_NUMITEMBUTTONS, 1 do
                        if ( not getglobal("IMA_Item"..i.."ItemButton").item ) then
                                IMA_PickupContainerItemOrig(bag, item);
                                IMA_ItemButton_OnClick(getglobal("IMA_Item"..i.."ItemButton"));
                                IMA_UpdateItemButtons();
                                return;
                        end
                end
        elseif ( IsAltKeyDown() and not CursorHasItem() ) then
                IMA_ClearAuctionSellItem();
                IMA_PickupContainerItemOrig(bag, item);
                ClickAuctionSellItemButton();
                return;
        end
        IMA_PickupContainerItemOrig(bag, item);
        IMA_UpdateItemButtons();
end

-- Controls the 4th tab in AuctionFrame
function IMA_AuctionFrameTab_OnClick(index)
        -- no Sea req
        if ( IMA_AuctionFrameTab_OnClickOrig ~= nil ) then
                IMA_AuctionFrameTab_OnClickOrig(index);
        end
        
        if ( not index ) then 
                index = this:GetID();
        end
        
        if ( index == 4 ) then
                -- MassAuction tab
                AuctionFrameTopLeft:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-TopLeft");
                AuctionFrameTop:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-Top");
                AuctionFrameTopRight:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-TopRight");
                AuctionFrameBotLeft:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-BotLeft");
                AuctionFrameBot:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-Bot");
                AuctionFrameBotRight:SetTexture("Interface\\AuctionFrame\\UI-AuctionFrame-Bid-BotRight");

                -- this is to fix a bug where the AuctionsFrame can't handle having auctions added without it showing first
                if (AuctionFrameAuctions.page == nil) then
                        AuctionFrameAuctions.page = 0;
                end

                IMA_AuctionFrameMassAuction:Show();     
        else
                IMA_AuctionFrameMassAuction:Hide();
        end
end

function IMA_ContainerFrame_Update(frame)
        if ( IMA_ContainerFrame_UpdateOrig ~= nil ) then
                IMA_ContainerFrame_UpdateOrig(frame)
        end

        if ( not IMA_AuctionFrameMassAuction:IsVisible() ) then
                return;
        end

        local id = frame:GetID();
        local i;
        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                local btn = getglobal("IMA_Item"..i.."ItemButton");
                if ( btn.item and btn.bag ) then
                        if ( btn.bag == frame:GetID() ) then
                                SetItemButtonDesaturated(getglobal(frame:GetName() .. "Item" .. (frame.size-btn.item)+1), 1, 0.5, 0.5, 0.5);
                        end
                end
        end
end

function IMA_AuctionFrameMassAuction_OnLoad()
        -- Igors Mass Auction makes some hooks
        --        AuctionFrameTab_OnClick - lets us access our 4th tab
        --        PickupContainerItem - grabs something from a bag with the mouse
        IMA_PickupContainerItemOrig = PickupContainerItem
        if ( Sea ~= nil and Sea.util ~= nil and Sea.util.hook ~= nil ) then
                Sea.util.hook("AuctionFrameTab_OnClick","IMA_AuctionFrameTab_OnClick","after");
                Sea.util.hook("PickupContainerItem","IMA_PickupContainerItem","replace");
                Sea.util.hook("ContainerFrame_Update","IMA_ContainerFrame_Update","after");
        else
                -- no Sea req code
                IMA_AuctionFrameTab_OnClickOrig = AuctionFrameTab_OnClick;
                AuctionFrameTab_OnClick = IMA_AuctionFrameTab_OnClick;
                PickupContainerItem = IMA_PickupContainerItem;
                IMA_ContainerFrame_UpdateOrig = ContainerFrame_Update;
                ContainerFrame_Update = IMA_ContainerFrame_Update;
        end
        
        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                IMA_AuctionsRadioButton_OnClick(i,3);
        end

        this:RegisterEvent("UNIT_NAME_UPDATE");
        this:RegisterEvent("AUCTION_HOUSE_CLOSED");
end

function IMA_AuctionFrameMassAuction_OnShow()
        IMA_UpdateItemButtons();

        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                IMA_AuctionsRadioButton_OnClick(i,IMA_Settings["duration"..i])
        end
end

function IMA_SetItemAsAuction(itemindex)
        IMA_ClearAuctionSellItem();
        
        -- first see if something is in that slot
        but = getglobal("IMA_Item"..itemindex.."ItemButton");
        if ( but.bag == nil or but.item == nil) then return end

        -- if we have something on cursor already, remember it
        oldbag = IMA_AuctionFrameMassAuction.bag;
        olditem = IMA_AuctionFrameMassAuction.item;

        -- if we are already holding what we want
        if (but.bag == oldbag and but.item == olditem) then
                ClickAuctionSellItemButton();
                return;
        end
                
        -- put down what we had
        if ( oldbag ~= nil and olditem ~= nil) then
                IMA_PickupContainerItemOrig(oldbag,olditem);
        end
        
        -- pick up the new thing and put it in
        IMA_PickupContainerItemOrig(but.bag,but.item);
        ClickAuctionSellItemButton();
        IMA_PickupContainerItemOrig(but.bag,but.item);
        
        -- pick up what we had
        if ( oldbag ~= nil and olditem ~= nil) then
                IMA_PickupContainerItemOrig(oldbag,olditem);
        end
end

function IMA_FindAuctionItem()
        for bag = 0,4,1 do
                slots = GetContainerNumSlots(bag)
                if (slots ~= nil and slots > 0) then
                        for item = 1, slots, 1 do
                                local texture, itemCount, locked, quality, readable = GetContainerItemInfo(bag,item);
                                local lockedstr = locked;
                                if ( locked == nil ) then
                                        lockedstr = "nil";
                                end
                                if ( itemCount ~= nil and itemCount > 0 and locked ~= nil ) then
                                        return bag,item;
                                end
                        end
                end
        end
        return nil;
end

-- this function assumes that itemindex is the current active auction item
function IMA_SetInitialPrices(btn)
        local scheme = UIDropDownMenu_GetSelectedValue(IMA_PriceSchemeDropDown);
        scheme = string.gsub(scheme," ","_");

        local name, texture, count, quality, canUse, price = GetAuctionSellItemInfo();
        local start = max(100, floor(price * 1.5));
        local buyout = 0;
        
        pricefunc = getglobal("IMA_"..scheme.."_GetPriceAndBuyout");
        if (pricefunc ~= nil) then
                local start2 = nil;
                local buyout2 = nil;
                start2, buyout2 = pricefunc(btn.bag,btn.item,btn.count,btn.texture,btn.name,btn.price,start)
                if (start2 ~= nil) then
                        start = start2;
                end
                if (buyout2 ~= nil) then
                        buyout = buyout2;
                end
        end
        
        MoneyInputFrame_SetCopper(getglobal(btn:GetParent():GetName().."StartPrice"), start);
        MoneyInputFrame_SetCopper(getglobal(btn:GetParent():GetName().."BuyoutPrice"), buyout);
end

-- TODO: Make this work
function IMA_AuctionsFrameAuctions_ValidateAuction(itemindex)
        --IMA_AuctionsCreateAuctionButton:Disable();
        --IMA_AuctionsBuyoutErrorText:Hide();
        -- No item
        if ( not GetAuctionSellItemInfo() ) then
                return;
        end
        -- Buyout price is less than the start price
        --if ( MoneyInputFrame_GetCopper(IMA_BuyoutPrice) > 0 and MoneyInputFrame_GetCopper(IMA_StartPrice) > MoneyInputFrame_GetCopper(IMA_BuyoutPrice) ) then
                --IMA_AuctionsBuyoutErrorText:Show();
                --return;
        --end
        -- Start price is 0
        --if ( MoneyInputFrame_GetCopper(IMA_StartPrice) < 1 ) then
                --return;
        --end
        --IMA_AuctionsCreateAuctionButton:Enable();
end

function IMA_AuctionsRadioButton_OnClick(itemindex,index)
        if index == nil then
                index = 3;
        end

        getglobal("IMA_Item"..itemindex.."ShortAuction"):SetChecked(nil)
        getglobal("IMA_Item"..itemindex.."MediumAuction"):SetChecked(nil)
        getglobal("IMA_Item"..itemindex.."LongAuction"):SetChecked(nil)
        if ( index == 1 ) then
                getglobal("IMA_Item"..itemindex.."ShortAuction"):SetChecked(1)
                getglobal("IMA_Item"..itemindex).duration = 120;
        elseif ( index ==2 ) then
                getglobal("IMA_Item"..itemindex.."MediumAuction"):SetChecked(1)
                getglobal("IMA_Item"..itemindex).duration = 480;
        else
                getglobal("IMA_Item"..itemindex.."LongAuction"):SetChecked(1)
                getglobal("IMA_Item"..itemindex).duration = 1440;
        end

        IMA_Settings["duration"..itemindex] = index;

        -- maybe sure this is the current item before we update
        IMA_SetItemAsAuction(itemindex);
        IMA_UpdateDeposit(itemindex);
end

function IMA_UpdateDeposit(itemindex, amount)
        if ( amount == nil ) then
                amount = CalculateAuctionDeposit(getglobal("IMA_Item"..itemindex).duration);
        end
        if ( amount == nil ) then
                amount = 0;
        end
        
        MoneyFrame_Update("IMA_Item"..itemindex.."DepositCharge",amount)
end

-- this function assumes you don't have something on the cursor already
function IMA_ClearAuctionSellItem()
        if ( GetAuctionSellItemInfo() ~= nil ) then
                ClickAuctionSellItemButton();
                local bag, item = IMA_FindAuctionItem();
                IMA_PickupContainerItemOrig(bag, item);
        end
end

-- Handles the draggin of items
function IMA_ItemButton_OnClick(button)
        if ( not button ) then 
                button = this; 
        end

        if ( CursorHasItem() ) then
                local bag = IMA_AuctionFrameMassAuction.bag;
                local item = IMA_AuctionFrameMassAuction.item;
                
                if ( not bag or not item ) then return; end

                -- put it in auction slot while we're holding it
                ClickAuctionSellItemButton();

                -- We'll still be holding the item if it fails
                if (CursorHasItem()) then
                        IMA_PickupContainerItemOrig(bag, item);
                        return;
                end
                
                -- put the item back
                IMA_PickupContainerItemOrig(bag, item);

                if ( this.bag and this.item ) then
                        -- There's already an item there
                        IMA_PickupContainerItemOrig(button.bag, button.item);
                        IMA_AuctionFrameMassAuction.bag = button.bag;
                        IMA_AuctionFrameMassAuction.item = button.item;
                else
                        IMA_AuctionFrameMassAuction.bag = nil;
                        IMA_AuctionFrameMassAuction.item = nil;
                end

                local texture, count = GetContainerItemInfo(bag, item);

                getglobal(button:GetName() .. "IconTexture"):Show();
                getglobal(button:GetName() .. "IconTexture"):SetTexture(texture);

                if ( count > 1 ) then
                        getglobal(button:GetName() .. "Count"):SetText(count);
                        getglobal(button:GetName() .. "Count"):Show();
                else
                        getglobal(button:GetName() .. "Count"):Hide();
                end

                local name, texture, count, quality, canUse, price = GetAuctionSellItemInfo();
                button.bag = bag;
                button.item = item;
                button.texture = texture;
                button.count = count;
                button.name = name;
                button.price = price;

                -- set our item count based on the first item
                if (button:GetParent():GetID() == 1) then
                        IMA_AllSamePriceFrameStackSize:SetText(count);
                end
                                                           
                IMA_UpdateDeposit(button:GetParent():GetID());
                IMA_SetInitialPrices(button);
                
        elseif ( button.item and button.bag ) then
                IMA_ClearAuctionSellItem();
        
                IMA_PickupContainerItemOrig(button.bag, button.item);
                
                getglobal(button:GetName() .. "IconTexture"):Hide();
                getglobal(button:GetName() .. "Count"):Hide();

                IMA_AuctionFrameMassAuction.bag = button.bag;
                IMA_AuctionFrameMassAuction.item = button.item;

                button.item = nil;
                button.bag = nil;
                button.count = nil;
                button.texture = nil;
                button.name = nil;
                button.price = nil;
        end
        IMA_UpdateItemButtons();

        -- TODO: Display the total deposit
        
        for i = 1, NUM_CONTAINER_FRAMES, 1 do
                if ( getglobal("ContainerFrame" .. i):IsVisible() ) then
                        ContainerFrame_Update(getglobal("ContainerFrame" .. i));
                end
        end
end

function IMA_UpdateItemButtons(frame)
        local i;
        local num = 0;
        local totalDeposit = 0;
        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                local btn = getglobal("IMA_Item"..i.."ItemButton");
                if ( not frame or btn ~= frame ) then
                        local texture, count;
                        if ( btn.item and btn.bag ) then
                                texture, count = GetContainerItemInfo(btn.bag, btn.item);
                        end
                        if ( not texture ) then
                                getglobal(btn:GetName() .. "IconTexture"):Hide();
                                getglobal(btn:GetName() .. "Count"):Hide();
                                btn.item = nil; 
                                btn.bag = nil; 
                                btn.count = nil; 
                                btn.texture = nil;
                                btn.name = nil;
                                btn.price = nil;
                                IMA_UpdateDeposit(btn:GetParent():GetID(),0);
                                MoneyInputFrame_SetCopper(getglobal(btn:GetParent():GetName().."StartPrice"), 0);
                                MoneyInputFrame_SetCopper(getglobal(btn:GetParent():GetName().."BuyoutPrice"), 0);
                        else
                                num = num + 1
                                local deposit = getglobal(btn:GetParent():GetName().."DepositCharge").staticMoney;
                                if ( deposit ~= nil ) then
                                        totalDeposit = totalDeposit + deposit;
                                end
                                btn.count = count;
                                btn.texture = texture;
                                getglobal(btn:GetName() .. "IconTexture"):Show();
                                getglobal(btn:GetName() .. "IconTexture"):SetTexture(texture);
                                if ( count > 1 ) then
                                        getglobal(btn:GetName() .. "Count"):Show();
                                        getglobal(btn:GetName() .. "Count"):SetText(count);
                                else
                                        getglobal(btn:GetName() .. "Count"):Hide();
                                end
                        end
                end
        end
        IMA_AuctionFrameMassAuction.num = num;
        IMA_AuctionFrameMassAuction.totalDeposit = totalDeposit;
        if ( num > 0 ) then
                IMA_AuctionsClearButton:Enable();
                IMA_AuctionsSubmitButton:Enable();
        else
                IMA_AuctionsClearButton:Disable();
                IMA_AuctionsSubmitButton:Disable();
        end
end

function IMA_GetItemFrame(bag, item)
        local i;
        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                local btn = getglobal("IMA_Item"..i.."ItemButton");
                if ( btn.item == item and btn.bag == bag ) then
                        return btn;
                end
        end
        return nil;
end

function IMA_ClearItems()
        local i;
        local num = 0;
        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                local item = getglobal("IMA_Item"..i);
                local btn = getglobal(item:GetName().."ItemButton");
                MoneyInputFrame_SetCopper(getglobal(item:GetName().."StartPrice"), 0);
                MoneyInputFrame_SetCopper(getglobal(item:GetName().."BuyoutPrice"), 0);
                IMA_UpdateDeposit(i,0);
                btn.item = nil;
                btn.count = nil;
                btn.bag = nil;
                btn.texture = nil;
                btn.name = nil;
                btn.price = nil;
        end
        IMA_UpdateItemButtons();
        IMA_ClearAuctionSellItem();
end

function IMA_ClearItem(bag,item)
        local i;
        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                local item = getglobal("IMA_Item"..i);
                local btn = getglobal(item:GetName().."ItemButton");
                if (btn.bag == bag and btn.item == item) then
                        MoneyInputFrame_SetCopper(getglobal(item:GetName().."StartPrice"), 0);
                        MoneyInputFrame_SetCopper(getglobal(item:GetName().."BuyoutPrice"), 0);
                        IMA_UpdateDeposit(i,0);
                        btn.item = nil;
                        btn.count = nil;
                        btn.bag = nil;
                        btn.texture = nil;
                        btn.name = nil;
                        btn.price = nil;
                        return;
                end
        end
        IMA_UpdateItemButtons();
end

function IMA_OnEvent()
        if (( event == "UNIT_NAME_UPDATE" ) and (arg1 == "player")) then
                local playername = UnitName("player");
                IMA_Playername = playername;
        elseif ( event == "AUCTION_HOUSE_CLOSED" ) then
                IMA_ClearItems();
                IMA_GlobalFrame.total = 0;
                IMA_GlobalFrame.queue = { };
        end
end

function IMA_AcceptSendFrame_OnShow()
        getglobal(this:GetName().."Info"):Show();
        getglobal(this:GetName().."InfoString"):Show();
        getglobal(this:GetName().."MoneyFrame"):Show();
        getglobal(this:GetName().."InfoItems"):SetText(IMA_AuctionFrameMassAuction.num .. " " .. IMA_ITEMS);
        getglobal(this:GetName().."SubmitButton"):Enable();
        IMA_UpdateItemButtons();
        MoneyFrame_Update(this:GetName() .. "MoneyFrame", IMA_AuctionFrameMassAuction.totalDeposit);
end

function IMA_AcceptSendFrameSubmitButton_OnClick()
        IMA_GlobalFrame.queue = IMA_FillItemTable();
        IMA_GlobalFrame.total = getn(IMA_GlobalFrame.queue);
        IMA_GlobalFrame.sent = 0;
        getglobal(this:GetParent():GetName().."Info"):Hide();
        getglobal(this:GetParent():GetName().."InfoString"):Hide();
        getglobal(this:GetParent():GetName().."MoneyFrame"):Hide();
        this:Disable();
end

function IMA_AcceptSendFrameCancelButton_OnClick()
        this:GetParent():Hide();
        IMA_GlobalFrame.queue = {};
        IMA_GlobalFrame.total = 0;
        IMA_GlobalFrame.sent = 0;
end

function IMA_FillItemTable()
        local arr = { };
        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                local item = getglobal("IMA_Item"..i);
                local btn = getglobal(item:GetName().."ItemButton");
                local price = MoneyInputFrame_GetCopper(getglobal(item:GetName().."StartPrice"));
                local buyout = MoneyInputFrame_GetCopper(getglobal(item:GetName().."BuyoutPrice"));
                if ( btn.item and btn.bag ) then
                        tinsert(arr, { ["item"] = btn.item, ["bag"] = btn.bag, ["price"] = price,
                                                   ["buyout"] = buyout, ["duration"] = item.duration });
                end
        end
        return arr;
end

function IMA_ProcessQueue(elapsed)
        if ( this.bag ~= nil and this.item ~= nil ) then
                if ( GetContainerItemInfo(this.bag, this.item) == nil ) then
                        this.sent = this.sent + 1;
                        IMA_ClearItem(this.bag,this.item);
                        this.bag = nil;
                        this.item = nil;
                        if (this.sent == this.total) then
                                IMA_AcceptSendFrame:Hide();
                        end
                end
        end
        
        if ( this.total == 0 ) then
                return;
        end

        if ( this.bag == nil and this.item == nil ) then
                IMA_StartAuction();
                IMA_AcceptSendFrameInfoItems:SetText(
                        IMA_POSTING_ITEM..(this.sent+1)..IMA_OF..this.total.."...")
        end
end

function IMA_StartAuction()
        IMA_ClearAuctionSellItem();
        
        key, val = next(this.queue);
        if (key == nil) then
                this.total = 0;
                this.bag = nil;
                this.item = nil;
                this.queue = { };
                return;
        end
        
        this.bag = val.bag;
        this.item = val.item;
        
        -- put down what we picked up so things don't mess up
        if ( CursorHasItem() and IMA_AuctionFrameMassAuction.bag and IMA_AuctionFrameMassAuction.item ) then
                PickupContainerItem(IMA_AuctionFrameMassAuction.bag, IMA_AuctionFrameMassAuction.item);
                IMA_AuctionFrameMassAuction.bag = nil;
                IMA_AuctionFrameMassAuction.item = nil;
        end

        IMA_PickupContainerItemOrig(val.bag, val.item);

        ClickAuctionSellItemButton();

        local name, texture, count, quality, canUse, price = GetAuctionSellItemInfo();

        if ( not name ) then 
                DEFAULT_CHAT_FRAME:AddMessage("<MassAuction> " .. IMA_ERROR, 1, 0, 0);
        else
                -- these 3 lines help with compatability
                MoneyInputFrame_SetCopper(StartPrice, val.price);
                MoneyInputFrame_SetCopper(BuyoutPrice, val.buyout);
                AuctionFrameAuctions.duration = val.duration;

                StartAuction(val.price, val.buyout, val.duration);
        end

        this.queue[key] = nil;
        return;
end

-- SET PRICES DROPDOWN CODE

function IMA_PriceSchemeDropDown_OnShow()
        IMA_PriceSchemeDropDown_OnLoad();
        
        -- set default if none
        if IMA_Settings.DropDown == nil then
                IMA_Settings.DropDown = "Default";
        end
        
        getglobal("IMA_" .. IMA_Settings.DropDown .. "_function")();
end

function IMA_PriceSchemeDropDown_OnLoad()
        UIDropDownMenu_Initialize(this, IMA_PriceSchemeDropDown_Initialize);
end

function IMA_ClearTopFrame()
        if IMA_MultiplierFrame then
                IMA_MultiplierFrame:Hide();
                IMA_AllSamePriceFrame:Hide();
                IMA_EasyAuctionFrame:Hide();
        end
end

function IMA_Default_function()
        UIDropDownMenu_SetSelectedValue(IMA_PriceSchemeDropDown, "Default");
        IMA_ClearTopFrame();
        IMA_Settings.DropDown = "Default";
end
        
function IMA_Multiplier_function()
        UIDropDownMenu_SetSelectedValue(IMA_PriceSchemeDropDown, "Multiplier");
        IMA_ClearTopFrame();
        IMA_MultiplierFrame:Show();
        IMA_Settings.DropDown = "Multiplier";
end
        
function IMA_AllSamePrice_function()
        UIDropDownMenu_SetSelectedValue(IMA_PriceSchemeDropDown, "AllSamePrice");
        IMA_ClearTopFrame();
        IMA_AllSamePriceFrame:Show();
        IMA_Settings.DropDown = "AllSamePrice";
end

function IMA_EasyAuction_function()
        UIDropDownMenu_SetSelectedValue(IMA_PriceSchemeDropDown, "EasyAuction");
        IMA_ClearTopFrame();
        IMA_EasyAuctionFrame:Show();
        IMA_Settings.DropDown = "EasyAuction";
end

function IMA_PriceSchemeDropDown_Initialize()
        local info = {};
        info.text = IMA_DEFAULT;
        info.value = "Default";
        info.func = IMA_Default_function;
        UIDropDownMenu_AddButton(info);

        info = {};
        info.text = IMA_VALUE_MULTIPLIER;
        info.value = "Multiplier";
        info.func = IMA_Multiplier_function;
        UIDropDownMenu_AddButton(info);

        info = {};
        info.text = IMA_ALL_SAME_PRICE;
        info.value = "AllSamePrice";
        info.func = IMA_AllSamePrice_function;
        UIDropDownMenu_AddButton(info);

        info = {};
        info.text = IMA_EASY_AUCTION;
        info.value = "EasyAuction";
        info.func = IMA_EasyAuction_function;
        UIDropDownMenu_AddButton(info);
end

function IMA_SetAllPricesButton_OnClick()
        local scheme = UIDropDownMenu_GetSelectedValue(IMA_PriceSchemeDropDown);
        scheme = string.gsub(scheme," ","_");

        pricefunc = getglobal("IMA_"..scheme.."_GetPriceAndBuyout");
        if (pricefunc == nil) then
                return;
        end
        
        IMA_ClearAuctionSellItem();
        for i = 1, IMA_NUMITEMBUTTONS, 1 do
                local item = getglobal("IMA_Item"..i);
                local btn = getglobal(item:GetName().."ItemButton");
                
                if (btn.bag ~= nil and btn.item ~= nil) then
                        if (true and true) then -- put checkbox code here
                                price, buyout = pricefunc(btn.bag,btn.item,btn.count,btn.texture,btn.name,btn.price,
                                                                                  MoneyInputFrame_GetCopper(getglobal(item:GetName().."StartPrice")))
                                if (price ~= nil) then
                                        MoneyInputFrame_SetCopper(getglobal(item:GetName().."StartPrice"),price);
                                end
                                if (buyout ~= nil) then 
                                        MoneyInputFrame_SetCopper(getglobal(item:GetName().."BuyoutPrice"),buyout);
                                end
                        end
                end
        end
end

function IMA_Default_GetPriceAndBuyout(bag, item, count, texture, name, price, currentstart)
        start = MoneyInputFrame_GetCopper(StartPrice);
        buyout = MoneyInputFrame_GetCopper(BuyoutPrice);

        return start, buyout;
end

function IMA_Multiplier_GetPriceAndBuyout(bag, item, count, texture, name, price, currentstart)
        local retprice = nil;
        local retbuyout = nil;
        
        if (IMA_MultiplierFramePriceCheckButton:GetChecked()) then
                pricepercent = IMA_MultiplierFramePriceMultiplier:GetText() + 0;
                if (pricepercent >= 1 and pricepercent <= 9999) then
                        retprice = max(100,floor(price * pricepercent / 100.0));
                        currentstart = retprice + 0;
                end
        end

        if (IMA_MultiplierFrameBuyoutCheckButton:GetChecked()) then
                buyoutpercent = IMA_MultiplierFrameBuyoutMultiplier:GetText() + 0;
                if (buyoutpercent >= 1 and buyoutpercent <= 9999) then
                        retbuyout = floor(currentstart * buyoutpercent / 100.0);
                end
        end
        
        return retprice,retbuyout
end

function IMA_AllSamePrice_GetPriceAndBuyout(bag, item, count, texture, name, price, currentstart)
        local price = MoneyInputFrame_GetCopper(IMA_AllSamePriceFrameStartPrice);
        local buyout = MoneyInputFrame_GetCopper(IMA_AllSamePriceFrameBuyoutPrice);
        local basecount = IMA_AllSamePriceFrameStackSize:GetText() + 0;

        if (basecount > 0 and count ~= basecount) then
                price = floor(price / basecount * count);
                buyout = floor(buyout / basecount * count);
        end

        return price,buyout;
end

function IMA_EasyAuction_GetPriceAndBuyout(bag, item, count, texture, name, price, currentstart)
        local start = nil;
        local buyout = nil;
        
        if (EasyAuction_Prices ~= nil and EasyAuction_PersonalPrices ~= nil) then
                local lastauction = nil;
                if (IMA_Playername ~= nil and EasyAuction_PersonalPrices[IMA_Playername] ~= nil
                                and EasyAuction_PersonalPrices[IMA_Playername][name] ~= nil) then
                        lastauction = EasyAuction_PersonalPrices[IMA_Playername][name];
                else
                        if (EasyAuction_Prices[name] ~= nil) then
                                lastauction = EasyAuction_Prices[name];
                        end
                end
                if (lastauction ~= nil) then
                        start = lastauction.bid * count;
                        buyout = lastauction.buyout * count;
                end
        end     

        return start,buyout;
end