vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[
        DepositBox
        Author: DarkNight. Original code by CodeMoose
        Description: DepositBox is an addon that lets you store money in a safe place where you can save up
                         cash without being able to accidentally spend it. You can deposit and withdraw
                         your saved gold using the friendly user interface, just type in the amount you want
                         and press the correct button.
                         While money is saved in the DepositBox, it will not show up in your bag nor on merchant
                         windows. This means that you can't accidentally spend money that you've stored away.
                         This gives a nice way to save up for important purchases like your epic mount :D
                         A new feature is the DirectDeposit option. Turning this on and setting a percentage
                         will automatically store away that percentage of any money you earn.

        ToDo:
                * Find a way to use the MyAddons "Options" button to open DepositBox on the options Frame.
        

        -- VERSION 1.6.0 Released "14/12/2005"
        * Updated to be compatible with WoW v1.8.4
        * Initial attempt to adopt the code by DarkNight. Still learning what everything does.
        * Fixed bug where DB could display more money stored than you actually had money in total.
        * Migrated code to be compatible with Blizzard's new per-character/per-realm SavedVariables.
        * Added a "Bag Threshold" function: All money will go to your regular account until you reach your 
                "threshold" amount, then all money above that amount will go to the deposit box.
        * MyAddOns support added.


        -- VERSION 1.5.2 Released 17/10/2005
        * Updated to be compatible with WoW v.1.8.0
        * Fixed BuyBack Bug - Thanks DarkNight


        -- VERSION 1.5.1 Released 18/09/2005
        * Updated to be compatible with WoW v1.7.0
        * Fixed bug with loading where the DB frame sometimes couldnt be seen.
        * Fixed bug where loading sometimes caused errors.
        * Changed code to allow you to use the non-titan functionality if you have TitanPanel enabled but DB not used as an AddIn.


        -- VERSION 1.5.0a Released 09/09/2005
        * Fixed bug where DepositBox wasn't saving its openning location.
        
        
        -- VERSION 1.5.0 Released 09/09/2005
        * Added TitanPanel Support
                - This means that you can now use DepositBox as an addin to TitanPanel
        * Changed DirectDeposit from 10% to 2% increments
        * Added QuickFix for InventoryHawk
        

        -- VERSION 1.4.7 Released 03/09/2005 --
        * Added Accountant Compatibility Mode to allow you to choose between the old and new working of DepositBox. 
          This should allow people who are having problems with Bag Displays showing their total money but who do not use 
          Addons to record money earning/losses to revert back to the older code.
                - With AC Mode Enabled, DepositBox will use the new style code that allows Accountant type Addons to
                function correctly. (This may lead to some Bag Money displaying Addons displaying your total money)
                - With AC Mode Disabled, DepositBox will use the old style code that will be most useful with Addons
                that show your Player's money. (This will most likely not function with Accountant type Addons)
                - It is advised that you perform a "/console reloadui" after changing this option
        * Added QuickFix for Nox Infobar AddOn (Thanks ImTazMan)
        * Fixed bug that would take Training Costs out of DB if you didn't have enough in your bag (Thanks Corwin Whitehorn)
        * Fixed bug that would take Trade money from DB
        * Fixed bug that would take Talent Respec money from DB
        * Fixed bug that would take Single Item Repair money from DB
        
        
        -- VERSION 1.4.6 Released 13/08/2005 --
        * Fixed bug that would cause an error for first time users


        -- VERSION 1.4.5 Released 11/08/2005 --
        * Changed Money Handling code to become more compatable with Accountant type addons
                - Hopefully the new code will allow AddOns that track how much money you make/spend to function
                  correctly. They should now provide correct feedback about your money income and outgoings regardless
                  of whether you are shifting money in/out of DepositBox or not. Before, the accountants were seeing money 
                  moved into DepositBox as a loss and money out as a gain, and the DirectDeposit feature would cause 
                  confused results.
        * Fixed bug where buying a certain quantity of items would take money from DepositBox

        
        -- VERSION 1.4.4 Released 16/07/2005 --
        * Updated to be compatible with WoW v1.6.0
        * Fixed bug with Enhanced Flight Map (Thanks Corwin Whitehorn)
        

        -- VERSION 1.4.3 Released 11/07/2005 --
        * Added Money Display Option to choose between showing the money available in your bag and the money stored in DepositBox
        * Fixed Bug where Class Trainer wasn't updating if you used DepositBox while the window was open
        * Improved Loading Code to be more consistant and help remove loading discrepancies
        * Added new slash command to allow u to reset the DepositBox Button to the center of the screen
          - /db reset
          - Forces the DepositBox Button to show and move to the center of your screen (incase you have lost it off an edge)
                
        
        -- VERSION 1.4.2a Released 13/06/2005 --
        * Fixed Typo in key bindings (Thanks m1r0)

        -- VERSION 1.4.2 Released 08/06/2005 --
        * Updated to be compatible with WoW v1.5.0
        * Added Key Binding for toggling the DepositBox screen open and closed


        -- VERSION 1.4.1 Released 30/05/2005 --
        * Added Quick fix for 'MyInventory' and 'QuickCash' Addons (Thanks Skyotic)
        * Fixed bug with '/Split'  (Hopefully)
        * Changed Money Display so that it is always visible if using the minimap button
        

        -- VERSION 1.4  Released 09/05/2005 --
        * Updated UI to provide extra options
        * Added Minimap Button option, You can now use a button around the minimap instead of the original 
          DepositBox Button to show/hide the frame
        * Added Money Display function so that you can see your bag cash instead of "Deposit Box" 
          (most useful when not using the minimap button)
        * Added Storage Target Option to allow you to save money up in the background until you reach your target
                - You need to have direct deposit selected for this to be enabled
                - Set the target value in the frame and then tick the box to lock it
                - You can then hide the entire depositbox by clicking the Hide button (or using /db display)
                - It will then stay hidden until it has saved upto your target amount (or until you toggle display)
        * Fixed bug where setting some frame positions with "/db l" and "/db r" wouldn't work as expected
        * Fixed bug where the frame would appear to lock in its current location
        * Fixed bug where direct deposit percentage wasn't saved for each character
        * Added quick fix for 'All In One Inventory' Addon
        
        ! Note: Upgrading to this version will reset your direct deposit percentage to 0%


        -- VERSION 1.3.2  Released 29/04/2005 --
        * The display state of DepositBox is now saved when logging off, 
          so if you log off with it hidden, it should stay hidden when you come back.
        * Added quick fix for 'Telo's InfoBar' Addon
        * Fixed bug where money could not be sent in mail


        -- VERSION 1.3.1  Released 28/04/2005 --
        * Fixed bug where negative money could occur
        * Added quick fix for the 'Titan Panel' Addon


        -- VERSION 1.3  Released 28/04/2005 --
        * Added Clear Input button to wipe the money input boxes clean
        * Added Tooltip on Bag and Stored labels to show total amount of money you own
        * Fixed bug where tooltips came up on the wrong side when changing the location of the storageframe
        * Fixed bug where setting left or right location wouldnt do anything
        * Fixed bug with DirectDeposit where merchant money counters would not refresh
        * Fixed bug with money counters not refreshing if you deposit/withdraw money with windows open
        * Fixed bug with money counters not refreshing if you deposit/withdraw money with bags open
        * Fixed buy where DepositBox wouldn't remember the copper value that you had stored
        * Fixed bug where DirectDeposit would give you 0.5 of a copper
        * Fixed bug where posting a letter would fail


        -- VERSION 1.2  Released 21/04/2005 --
        * Added Direct Deposit Feature
          - Allows you to automatically place a percentage of what you earn into your depositbox


        -- VERSION 1.1  Released 20/04/2005 --
        * Added new commands to allow u to relocate the depositframe
          - /db <below, above, belowright, belowleft, aboveright, aboveleft>
          - shortened to a, b, l, r (eg. /db al = aboveleft)
        * Changed frame to a button so its harder to accidently move it and easier to open
        * Added sound command to toggle sound on and off
          - /db sound 
        * Added help command to display the list of available commands
          - /db help or /db


        -- VERSION 1.0  Released 19/04/2005 --
        * Stores Money And Stops You Spending It
        * Displays Bag And Store Money
        * Closable Frame To Hide Cash Store
        * Movable Frame
        * Slash Command To Hide/Display Whole Frame

        
        !! Known Bugs !!
        * Since I cannot find a way to refresh the money displays from other addons that you may be using,
          quick fixes for these addons will have to be made one at a time as people inform me of them.


  ]]


--New SavedVariablesPerCharacter
svDepositBox_Money = nil;
svDepositBox_UsingSound = nil;
svDepositBox_Location = nil;
svDepositBox_UsingDirectDepositOption = nil;
svDepositBox_DirectDepositPercentage = nil;
svDepositBox_UsingThresholdOption = nil;
svDepositBox_MoneyThreshold = nil;
svDepositBox_Hidden = nil;
svDepositBox_UsingMiniMapButton = nil;
svDepositBox_MiniMapLocation = nil;
svDepositBox_UsingMoneyAlert = nil;
svDepositBox_MoneyAlert = nil;
svDepositBox_UsingMoneyDisplay = nil;
svDepositBox_MoneyDisplayType = nil;
svDepositBox_ACMode = nil;

--Old SavedVariables
DepositBox_Money = {};
DepositBox_UsingSound = true;
DepositBox_Location = "BELOW";
DepositBox_DirectDepositPercentage = {};
DepositBox_UsingDirectDepositOption = {};
DepositBox_Hidden = false;
DepositBox_UsingMiniMapButton = false;
DepositBox_MiniMapLocation = 1;
DepositBox_UsingMoneyAlert = {};
DepositBox_MoneyAlert = {};
DepositBox_UsingMoneyDisplay = false;
DepositBox_MoneyDisplayType = "Bag";
DepositBox_ACMode = true;


local DepositBox_VERSION = "v1.6.0";
local DepositBox_RELEASEDATE = "Dec. 14, 2005"

local DepositBox_UsingTitan = false;
local DepositBox_ButtonWidth = 0;
local DepositBox_Original_TitanPanelButton_SetComboButtonWidth = nil;
local DepositBox_Original_TitanPanelBarButton_TogglePosition = nil;
local DepositBox_Original_TitanPanel_AddButton = nil;
local DepositBox_Original_TitanPanel_RemoveButton = nil;


local DepositBox_CurrentMoney = nil;
local DepositBox_LocalStoredMoney = nil;

local DepositBox_Original_GetMoney = nil;
local DepositBox_Original_MoneyFrame_Update = nil;
local DepositBox_Original_BuyMerchantItem = nil;
local DepositBox_Original_PickupMerchantItem = nil;


local DepositBox_Original_RepairAll = nil;
local DepositBox_Original_PaperDollItemSlotButton_OnClick = nil;
local DepositBox_Original_ContainerFrameItemButton_OnClick = nil;
local DepositBox_Original_TakeTaxiNode = nil;
local DepositBox_Original_StartAuction = nil;

local DepositBox_Original_SetSendMailMoney = nil;
local DepositBox_Original_SendMail = nil;
local DepositBox_Original_PurchaseSlot = nil;

local DepositBox_Original_BuybackItem = nil;
local DepositBox_Original_CompleteQuest = nil;

local DepositBox_Original_BuyTrainerService = nil;
local DepositBox_Original_SetTradeMoney = nil;
local DepositBox_Original_ConfirmTalentWipe = nil;

local DepositBox_Original_PickupPlayerMoney = nil;

local DepositBox_Original_SplitMoney = nil;

local DepositBox_Original_PlaceAuctionBid = nil;
local DepositBox_Original_AuctionFrameBrowse_Update = nil;
local DepositBox_Original_AuctionFrameBid_Update = nil;


local DepositBox_Name_Player = nil;
local DepositBox_Name_Realm = GetCVar("realmName");
local DepositBox_Initialised = nil;


local DepositBox_Move = 0;

BINDING_HEADER_DEPOSITBOX = "DepositBox"
BINDING_NAME_DEPOSITBOX_TOGGLE = "Toggle DepositBox Window";
DEPOSITBOX_TITLE = "Configure DepositBox"

-- MyAddons Support
DepositBoxDetails = {
                name = "DepositBox",
                version = DepositBox_VERSION,
                releaseDate = DepositBox_RELEASEDATE,
                author = "DarkNight, originally by CodeMoose",
                email = "depositbox@darknights-haven.com",
                website = "http://www.curse-gaming.com/mod.php?addid=1104",
                category = MYADDONS_CATEGORY_OTHERS
        };

DepositBoxHelp = {};
DepositBoxHelp[1] = "DepositBox " ..DepositBox_VERSION .."\nAuthor: DarkNight. Original code by CodeMoose.\n\n"
                .."DepositBox is an addon that lets you store money in a safe place where you can save up "
                .."cash without being able to accidentally spend it. You can deposit and withdraw "
                .."your saved gold using the friendly user interface, just type in the amount you want "
                .."and press the store or retrieve button.\n\n"
                .."While money is saved in the DepositBox, it will not show up in your bag nor on merchant "
                .."windows. This means that you can't accidentally spend money that you've stored away. "
                .."This gives a nice way to save up for important purchases like your epic mount :D\n\n"
                .."A popular feature is the DirectDeposit option. Turning this on and setting a percentage "
                .."will automatically store away that percentage of any money you earn.\n";
DepositBoxHelp[2] = "Command line options:\n\n"
                .."Enter /depositbox <command> or /db <command> in the chat window.\n"
                .."  Valid commands are:\n"
                .."     sound - Toggles sound on/off\n"
                .."     reset - Resets the DepositBox location to the center of the screen\n"
                .."     display - Toggles Hiding/Showing of DepositBox\n"
                .."     below, above, left, right - Changes the location of where the storage frame opens.\n"
                .."        Combinations can also be used, eg. aboveleft\n"
                .."";
DepositBoxHelp[3] = "Storage Tab:\n\n"
                .."The Storage Tab displays how much money is currently in your DepositBox and in your Bag "
                .."and gives you an easy way to move money between them. It also contains the options for "
                .."automatically depositing money into your DepositBox.\n\n"
                .."Stored: Displays the amount of money currently stored in the DepositBox. You cannot spend "
                .."the money stored in your DepositBox without first moving it to your Bag.\n\n"
                .."Bag: Displays the amount of money currently stored in your Bag. This is the amount that "
                .."is directly accessible to you for making purchases from vendors.\n\n"
                .."Money Input: Used for moving money from your Storage to your Bag and visa-versa. Enter "
                .."the amount you wish to transfer into the gold/silver/copper input boxes and select either "
                .."the 'store' or 'retrieve' buttons (located between the 'Stored' and 'Bag' displays) to "
                .."move the money.\n\n";
DepositBoxHelp[4] = "Storage Tab (continued):\n\n"
                .."Direct Deposit: Select this option and set a percentage on the slider to enable the 'Direct Deposit' "
                .."feature. When enabled, a percentage of any money earned will be deposited directly into "
                .."your DepositBox storage. For example, if you have 'Direct Deposit' set to 20% and you sell "
                .."an item for 1g, 80s will be deposited to your Bag and 20s will be deposited to your Storage.\n\n"
                .."Bag Threshold: Select this option to set a maximum amount of money that will be held in "
                .."your Bag. Once the threshold is reached, any further money earned will go directly into your "
                .."storage.\n\n"
                .."";
DepositBoxHelp[5] = "Options Tab:\n\n"
                .."Minimap Button: Select this option to turn on the display of the radial button on the minimap. "
                .."Choose the location of the button with the slider bar.\n\n"
                .."Money Display: Select this option to enable showing the amount of money stored in the DepositBox "
                .."titlebar. Select to diplay either 'Bag' or 'Stored' money.\n\n"
                .."Storage Target: select this option to trigger an alarm when the amount of money stored in the "
                .."DepositBox reaches the entered target level. Use this option to remind yourself that you now "
                .."have enough money to buy that item you were saving for.\n\n";
DepositBoxHelp[6] = "Options Tab (continued):\n\n"
                .."AC Mode: Accountant Compatibility. Turning this feature on will allow DepositBox to work correctly "
                .."with Addons that record your earnings/expenditure. (Although it may cause some other Addons to "
                .."show your total gold instead of just the amount not stored away)\n\n"
                .."Hide: Hides the DepositBox Window.\n\n"
                .."";


-- end of MyAddons variables

        
function DepositBox_OnLoad()

        SLASH_DEPOSITBOX1 = "/depositbox";
        SLASH_DEPOSITBOX2 = "/db"; -- A shortcut or alias
        SlashCmdList["DEPOSITBOX"] = DepositBox_SlashCommands;

        DepositBox_Original_GetMoney = GetMoney;
        --GetMoney = DepositBox_New_GetMoney;
        
        DepositBox_Original_MoneyFrame_Update = MoneyFrame_Update;
        MoneyFrame_Update = DepositBox_New_MoneyFrame_Update;

        DepositBox_Original_BuyMerchantItem = BuyMerchantItem;
        BuyMerchantItem = DepositBox_New_BuyMerchantItem;

        DepositBox_Original_PickupMerchantItem = PickupMerchantItem;
        PickupMerchantItem = DepositBox_New_PickupMerchantItem;

        DepositBox_Original_RepairAll = RepairAllItems;
        RepairAllItems = DepositBox_New_RepairAll;
        
        DepositBox_Original_PaperDollItemSlotButton_OnClick = PaperDollItemSlotButton_OnClick;
        PaperDollItemSlotButton_OnClick = DepositBox_New_PaperDollItemSlotButton_OnClick;
        
        DepositBox_Original_ContainerFrameItemButton_OnClick = ContainerFrameItemButton_OnClick;
        ContainerFrameItemButton_OnClick = DepositBox_New_ContainerFrameItemButton_OnClick;

        DepositBox_Original_TakeTaxiNode = TakeTaxiNode;
        TakeTaxiNode = DepositBox_New_TakeTaxiNode ;

        DepositBox_Original_StartAuction = StartAuction;
        StartAuction = DepositBox_New_StartAuction;

        DepositBox_Original_SetSendMailMoney = SetSendMailMoney;
        SetSendMailMoney = DepositBox_New_SetSendMailMoney;

        DepositBox_Original_SendMail = SendMail;
        SendMail = DepositBox_New_SendMail;

        DepositBox_Original_PurchaseSlot = PurchaseSlot;
        PurchaseSlot = DepositBox_New_PurchaseSlot;

        DepositBox_Original_BuybackItem = BuybackItem;
        BuybackItem = DepositBox_New_BuybackItem;

        DepositBox_Original_CompleteQuest = CompleteQuest;
        CompleteQuest = DepositBox_New_CompleteQuest;

        DepositBox_Original_PickupPlayerMoney = PickupPlayerMoney;
        PickupPlayerMoney = DepositBox_New_PickupPlayerMoney;
        
        DepositBox_Original_BuyTrainerService = BuyTrainerService;
        BuyTrainerService = DepositBox_New_BuyTrainerService;
        
        DepositBox_Original_SetTradeMoney = SetTradeMoney;
        SetTradeMoney = DepositBox_New_SetTradeMoney;
        
        DepositBox_Original_ConfirmTalentWipe = ConfirmTalentWipe;
        ConfirmTalentWipe = DepositBox_New_ConfirmTalentWipe;
        
        DepositBox_Original_SplitMoney = SplitMoney;
        SplitMoney = DepositBox_New_SplitMoney;
        
        DepositBox_Original_PlaceAuctionBid = PlaceAuctionBid;
        PlaceAuctionBid = DepositBox_New_PlaceAuctionBid;
        
        DepositBox_Original_AuctionFrameBrowse_Update = AuctionFrameBrowse_Update;
        AuctionFrameBrowse_Update = DepositBox_New_AuctionFrameBrowse_Update;

        DepositBox_Original_AuctionFrameBid_Update = AuctionFrameBid_Update;
        AuctionFrameBid_Update = DepositBox_New_AuctionFrameBid_Update;
                
        
        MoneyInputFrame_SetCopper(DepositBoxUI_DepositBox_MoneyInputFrame, 0);
        
        
        
        DepositBox_Name_Player = UnitName("player");
        DepositBox_Name_Realm = GetCVar("realmName");
        
        this:RegisterEvent("ADDON_LOADED");
        this:RegisterEvent("VARIABLES_LOADED");
        this:RegisterEvent("PLAYER_ENTERING_WORLD");
        this:RegisterEvent("PLAYER_MONEY");
        

        --UIErrorsFrame:AddMessage("DepositBox loaded", 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME);
        DEFAULT_CHAT_FRAME:AddMessage("|c00FFFFFF".."DepositBox "..DepositBox_VERSION.." Loaded".."|r");
        
end


--Titan Panel Functions

function DepositBox_Titan_OnLoad()
        
        this.registry={
                id                                      = "DepositBox",
                menuText                        = "DepositBox",
                buttonTextFunction      = "DepositBox_Titan_GetButtonText",
                tooltipTitle            = "Deposit Box",
                tooltipTextFunction = "DepositBox_Titan_GetToolTipText",
                icon = "Interface\\AddOns\\DepositBox\\Images\\DepositBoxTitanIcon",            
                iconWidth = 16,
                savedVariables = {
                        ShowIcon = 1,
                        ShowLabelText = 1
                }
        }
        
        DepositBox_Original_TitanPanelButton_SetComboButtonWidth = TitanPanelButton_SetComboButtonWidth;
        TitanPanelButton_SetComboButtonWidth = DepositBox_New_TitanPanelButton_SetComboButtonWidth;
        
        DepositBox_Original_TitanPanelBarButton_TogglePosition = TitanPanelBarButton_TogglePosition;
        TitanPanelBarButton_TogglePosition = DepositBox_New_TitanPanelBarButton_TogglePosition;
        
        DepositBox_Original_TitanPanel_AddButton = TitanPanel_AddButton;
        TitanPanel_AddButton = DepositBox_New_TitanPanel_AddButton;
        
        DepositBox_Original_TitanPanel_RemoveButton = TitanPanel_RemoveButton;
        TitanPanel_RemoveButton = DepositBox_New_TitanPanel_RemoveButton;

end


function DepositBox_Titan_LoadState()

        DepositBox_ButtonWidth = TitanPanelDepositBoxButton:GetWidth();
        
        -- Setup UI
        if (DepositBox_UsingTitan == true) then
                DepositBoxUI_Main_MoneyDisplayFrame:Hide();
                DepositBoxUI_Main_BlockButton:Hide();

                if (svDepositBox_UsingMiniMapButton == true) then
                        DepositBoxUI_Main_MiniMapButtonFrame:Show();
                else
                        DepositBoxUI_Main_MiniMapButtonFrame:Hide();
                end             
        end
        
        if (svDepositBox_UsingMoneyDisplay == true) then
                TitanPanelDepositBoxButtonGoldButton:Show();
                TitanPanelDepositBoxButtonSilverButton:Show();
                TitanPanelDepositBoxButtonCopperButton:Show();
        else
                TitanPanelDepositBoxButtonGoldButton:Hide();
                TitanPanelDepositBoxButtonSilverButton:Hide();
                TitanPanelDepositBoxButtonCopperButton:Hide();
        end

        DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);
        DepositBox_CheckTitanPosition();
end


function DepositBox_Titan_GetButtonText(id)

        return "DepositBox", ""; 
end


function DepositBox_Titan_GetToolTipText()
        return TitanUtils_GetGreenText("Hint: Left-click to open storage"); 
end


function TitanPanelRightClickMenu_PrepareDepositBoxMenu()
        TitanPanelRightClickMenu_AddTitle("DepositBox");
        
        TitanPanelRightClickMenu_AddToggleIcon("DepositBox");
        TitanPanelRightClickMenu_AddToggleLabelText("DepositBox");
        
        
        TitanPanelRightClickMenu_AddSpacer();
        TitanPanelRightClickMenu_AddCommand(TITAN_PANEL_MENU_HIDE, "DepositBox", TITAN_PANEL_MENU_FUNC_HIDE);
end


function DepositBox_New_TitanPanelButton_SetComboButtonWidth(id, setButtonWidth)
        if (id == "DepositBox") then
        
                local button = TitanUtils_GetButton(id);
                local text = getglobal(button:GetName().."Text");
                local icon = getglobal(button:GetName().."Icon");       
                local iconWidth, iconButtonWidth, newButtonWidth;
                
                -- Get icon button width
                iconButtonWidth = 0;
                if ( TitanUtils_GetPlugin(id).iconButtonWidth ) then
                        iconButtonWidth = TitanUtils_GetPlugin(id).iconButtonWidth;
                elseif ( icon:GetWidth() ) then
                        iconButtonWidth = icon:GetWidth();
                end

                if ( TitanGetVar(id, "ShowIcon") and ( iconButtonWidth ~= 0 ) ) then
                        icon:Show();
                        text:ClearAllPoints();
                        text:SetPoint("LEFT", icon:GetName(), "RIGHT", 2, 1);
                        
                        newButtonWidth = text:GetWidth() + iconButtonWidth + 2;
                else
                        icon:Hide();
                        text:ClearAllPoints();
                        text:SetPoint("LEFT", button:GetName(), "Left", 0, 1);
                        
                        newButtonWidth = text:GetWidth();
                end
                
                if (svDepositBox_UsingMoneyDisplay == true) then
                        newButtonWidth = newButtonWidth + 90;
                end
                
                if ( setButtonWidth or
                                button:GetWidth() == 0 or 
                                button:GetWidth() - newButtonWidth > TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE or 
                                button:GetWidth() - newButtonWidth < -TITAN_PANEL_BUTTON_WIDTH_CHANGE_TOLERANCE ) then
                        button:SetWidth(newButtonWidth);
                        TitanPanelButton_Justify();
                end                     
        
                if (TitanGetVar(id, "ShowIcon") == 1 or TitanGetVar(id, "ShowLabelText") == 1 or svDepositBox_UsingMoneyDisplay == true) then
                else
                        TitanSetVar(id, "ShowIcon", 1)
                        TitanSetVar(id, "ShowLabelText", 1)
                        TitanPanel_RemoveButton("DepositBox");
                        
                        if(DepositBoxUI_DepositBoxFrame:IsVisible() or DepositBoxUI_OptionsFrame:IsVisible()) then
                                DepositBox_ToggleDepositBox();
                        end
                        
                        -- Close right click menu
                        TitanPanelRightClickMenu_Close();
                end

        else
           DepositBox_Original_TitanPanelButton_SetComboButtonWidth(id, setButtonWidth);
        end
end


function DepositBox_New_TitanPanelBarButton_TogglePosition()
        DepositBox_Original_TitanPanelBarButton_TogglePosition();
        DepositBox_CheckTitanPosition();
end


function DepositBox_CheckTitanPosition()

        if (TitanPanelGetVar("Position") == nil) then
                return;
        end
        
        if (TitanPanelGetVar("Position") == TITAN_PANEL_PLACE_TOP) then
                if (svDepositBox_Location == "ABOVE" or svDepositBox_Location == "ABOVERIGHT" or svDepositBox_Location == "ABOVELEFT") then
                        svDepositBox_Location = "BELOW";
                end
        else
                if (svDepositBox_Location == "BELOW" or svDepositBox_Location == "BELOWRIGHT" or svDepositBox_Location == "BELOWLEFT") then
                        svDepositBox_Location = "ABOVE";
                end
        end
        
        if(DepositBoxUI_DepositBoxFrame:IsVisible() or DepositBoxUI_OptionsFrame:IsVisible()) then
                DepositBox_ToggleDepositBox();
        end
end


function DepositBox_New_TitanPanel_AddButton(id)

        DepositBox_Original_TitanPanel_AddButton(id);   

        if (id == "DepositBox") then
                if(DepositBoxUI_DepositBoxFrame:IsVisible() or DepositBoxUI_OptionsFrame:IsVisible()) then
                        DepositBox_ToggleDepositBox();
                end
                DepositBox_UsingTitan = true;
                DepositBox_Titan_LoadState();
        end

end


function DepositBox_New_TitanPanel_RemoveButton(id)

        DepositBox_Original_TitanPanel_RemoveButton(id);        

        if (id == "DepositBox") then
                if(DepositBoxUI_DepositBoxFrame:IsVisible() or DepositBoxUI_OptionsFrame:IsVisible()) then
                        DepositBox_ToggleDepositBox();
                end
                DepositBox_UsingTitan = false;
                DepositBox_Titan_LoadState();
                DepositBox_LoadState();
        end

end

--End of Titan Panel Functions


function DepositBox_ConvertOldSV()
        if (DepositBox_Name_Realm == nil or DepositBox_Name_Player == nil) then
                return;
        end
        if (svDepositBox_Money == nil) then
                if (DepositBox_Money[DepositBox_Name_Realm] == nil) then
                        DepositBox_Money[DepositBox_Name_Realm] = {};
                end
                if (DepositBox_Money[DepositBox_Name_Realm][DepositBox_Name_Player] == nil) then
                        DepositBox_Money[DepositBox_Name_Realm][DepositBox_Name_Player] = "0";
                end
                svDepositBox_Money = DepositBox_Money[DepositBox_Name_Realm][DepositBox_Name_Player];
        end
        if (svDepositBox_UsingSound == nil) then
                if (DepositBox_UsingSound == nil) then
                        DepositBox_UsingSound = true;
                end
                svDepositBox_UsingSound = DepositBox_UsingSound;
        end
        if (svDepositBox_Location == nil) then
                if (DepositBox_Location == nil or (DepositBox_Location ~= "BELOW" and DepositBox_Location ~= "ABOVE" and DepositBox_Location ~= "BELOWLEFT" and DepositBox_Location ~= "BELOWRIGHT" and DepositBox_Location ~= "ABOVELEFT" and DepositBox_Location ~= "ABOVERIGHT")) then
                        DepositBox_Location = "BELOW";
                end
                svDepositBox_Location = DepositBox_Location;
        end
        if (svDepositBox_DirectDepositPercentage == nil) then
                if (DepositBox_DirectDepositPercentage[DepositBox_Name_Realm] == nil) then
                        DepositBox_DirectDepositPercentage[DepositBox_Name_Realm] = {};
                end
                if (DepositBox_DirectDepositPercentage[DepositBox_Name_Realm][DepositBox_Name_Player] == nil) then
                        DepositBox_DirectDepositPercentage[DepositBox_Name_Realm][DepositBox_Name_Player] = 0;
                end
                svDepositBox_DirectDepositPercentage = DepositBox_DirectDepositPercentage[DepositBox_Name_Realm][DepositBox_Name_Player];
        end
        if (svDepositBox_UsingDirectDepositOption == nil) then
                if (DepositBox_UsingDirectDepositOption[DepositBox_Name_Realm] == nil) then
                        DepositBox_UsingDirectDepositOption[DepositBox_Name_Realm] = {};
                end
                if (DepositBox_UsingDirectDepositOption[DepositBox_Name_Realm][DepositBox_Name_Player] == nil) then
                        DepositBox_UsingDirectDepositOption[DepositBox_Name_Realm][DepositBox_Name_Player] = false;
                end
                svDepositBox_UsingDirectDepositOption = DepositBox_UsingDirectDepositOption[DepositBox_Name_Realm][DepositBox_Name_Player];
        end
        if (svDepositBox_Hidden == nil) then
                if (DepositBox_Hidden == nil) then
                        DepositBox_Hidden = false;
                end
                svDepositBox_Hidden = DepositBox_Hidden;
        end
        if (svDepositBox_UsingMiniMapButton == nil) then
                if (DepositBox_UsingMiniMapButton == nil) then
                        DepositBox_UsingMiniMapButton = false;
                end
                svDepositBox_UsingMiniMapButton = DepositBox_UsingMiniMapButton;
        end
        if (svDepositBox_MiniMapLocation == nil) then
                if (DepositBox_MiniMapLocation == nil) then
                        DepositBox_MiniMapLocation = 1;
                end
                svDepositBox_MiniMapLocation = DepositBox_MiniMapLocation;
        end
        if (svDepositBox_UsingMoneyAlert == nil) then
                if (DepositBox_UsingMoneyAlert[DepositBox_Name_Realm] == nil) then
                        DepositBox_UsingMoneyAlert[DepositBox_Name_Realm] = {};
                end
                if (DepositBox_UsingMoneyAlert[DepositBox_Name_Realm][DepositBox_Name_Player] == nil) then
                        DepositBox_UsingMoneyAlert[DepositBox_Name_Realm][DepositBox_Name_Player] = false;
                end
                svDepositBox_UsingMoneyAlert = DepositBox_UsingMoneyAlert[DepositBox_Name_Realm][DepositBox_Name_Player];
        end
        if (svDepositBox_MoneyAlert == nil) then
                if (DepositBox_MoneyAlert[DepositBox_Name_Realm] == nil) then
                        DepositBox_MoneyAlert[DepositBox_Name_Realm] = {};
                end
                if (DepositBox_MoneyAlert[DepositBox_Name_Realm][DepositBox_Name_Player] == nil) then
                        DepositBox_MoneyAlert[DepositBox_Name_Realm][DepositBox_Name_Player] = "0";
                end
                svDepositBox_MoneyAlert = DepositBox_MoneyAlert[DepositBox_Name_Realm][DepositBox_Name_Player];
        end
        if (svDepositBox_UsingMoneyDisplay == nil) then
                if (DepositBox_UsingMoneyDisplay == nil) then
                        DepositBox_UsingMoneyDisplay = false;
                end
                svDepositBox_UsingMoneyDisplay = DepositBox_UsingMoneyDisplay;
        end
        if (svDepositBox_MoneyDisplayType == nil) then
                if (DepositBox_MoneyDisplayType == nil) then
                        DepositBox_MoneyDisplayType = "Bag";
                end
                svDepositBox_MoneyDisplayType = DepositBox_MoneyDisplayType;
        end
        if (svDepositBox_ACMode == nil) then
                if (DepositBox_ACMode == nil) then
                        DepositBox_ACMode = true;
                end
                svDepositBox_ACMode = DepositBox_ACMode;
        end
end


function DepositBox_LoadState()

        if (svDepositBox_Money == nil) then
                svDepositBox_Money = "0";
        end
        if (svDepositBox_UsingSound == nil) then
                svDepositBox_UsingSound = true;
        end
        if (svDepositBox_Location == nil or (svDepositBox_Location ~= "BELOW" and svDepositBox_Location ~= "ABOVE" and svDepositBox_Location ~= "BELOWLEFT" and svDepositBox_Location ~= "BELOWRIGHT" and svDepositBox_Location ~= "ABOVELEFT" and svDepositBox_Location ~= "ABOVERIGHT")) then
                svDepositBox_Location = "BELOW";
        end
        if (svDepositBox_UsingDirectDepositOption == nil) then
                svDepositBox_UsingDirectDepositOption = false;
        end
        if (svDepositBox_DirectDepositPercentage == nil) then
                svDepositBox_DirectDepositPercentage = 0;
        end
        if (svDepositBox_UsingThresholdOption == nil) then
                svDepositBox_UsingThresholdOption = false;
        end
        if (svDepositBox_MoneyThreshold == nil) then
                svDepositBox_MoneyThreshold = "0";
        end
        if (svDepositBox_Hidden == nil) then
                svDepositBox_Hidden = false;
        end
        if (svDepositBox_UsingMiniMapButton == nil) then
                svDepositBox_UsingMiniMapButton = false;
        end
        if (svDepositBox_MiniMapLocation == nil) then
                svDepositBox_MiniMapLocation = 1;
        end
        if (svDepositBox_UsingMoneyAlert == nil) then
                svDepositBox_UsingMoneyAlert = false;
        end
        if (svDepositBox_MoneyAlert == nil) then
                svDepositBox_MoneyAlert = "0";
        end
        if (svDepositBox_UsingMoneyDisplay == nil) then
                svDepositBox_UsingMoneyDisplay = false;
        end
        if (svDepositBox_MoneyDisplayType == nil) then
                svDepositBox_MoneyDisplayType = "Bag";
        end
        if (svDepositBox_ACMode == nil) then
                svDepositBox_ACMode = true;
        end

        --Setup UI

        DepositBoxPercentageText:SetText(svDepositBox_DirectDepositPercentage.."%");
        DepositBoxUI_DepositBox_PercentageSlider:SetValue(svDepositBox_DirectDepositPercentage);
        if (svDepositBox_UsingDirectDepositOption == true) then
                DepositBoxUI_DepositBox_DirectCheckButton:SetChecked(1);
                DepositBoxUI_Options_MoneyAlertCheckButton:Enable();
                DepositBoxUI_Options_MoneyInputFrame:Show();
                
        else
                DepositBoxUI_DepositBox_DirectCheckButton:SetChecked(0);
                DepositBoxUI_Options_MoneyAlertCheckButton:Disable();
                DepositBoxUI_Options_MoneyAlertCheckButton:SetChecked(0);

                MoneyInputFrame_ResetMoney(DepositBoxUI_Options_MoneyInputFrame);
                MoneyInputFrame_ClearFocus(DepositBoxUI_Options_MoneyInputFrame);
                DepositBoxUI_Options_MoneyInputFrame:Hide();

        end

        if (svDepositBox_UsingThresholdOption == true) then
                DepositBoxUI_DepositBox_ThresholdCheckButton:SetChecked(1);
                MoneyInputFrame_SetCopper(DepositBoxUI_DepositBox_ThresholdInputFrame, tonumber(svDepositBox_MoneyThreshold));
                DepositBoxUI_DepositBox_ThresholdInputFrame:Hide();
                
        else
                DepositBoxUI_DepositBox_ThresholdCheckButton:SetChecked(0);
                MoneyInputFrame_SetCopper(DepositBoxUI_DepositBox_ThresholdInputFrame, 0);
        end

        if (svDepositBox_UsingMoneyAlert == true) then
                DepositBoxUI_Options_MoneyAlertCheckButton:SetChecked(1);
                MoneyInputFrame_SetCopper(DepositBoxUI_Options_MoneyInputFrame, tonumber(svDepositBox_MoneyAlert));
                DepositBoxUI_Options_MoneyInputFrame:Hide();
                
        else
                DepositBoxUI_Options_MoneyAlertCheckButton:SetChecked(0);
                MoneyInputFrame_SetCopper(DepositBoxUI_Options_MoneyInputFrame, 0);
                
        end



        DepositBoxUI_Options_MiniMapSliderText:SetText(svDepositBox_MiniMapLocation);
        DepositBoxUI_Options_MiniMapSlider:SetValue(svDepositBox_MiniMapLocation);
        if (svDepositBox_UsingMiniMapButton == true) then
                DepositBoxUI_Options_MiniMapCheckButton:SetChecked(1);
                DepositBoxUI_Main_MiniMapButtonFrame:Show();
                DepositBoxUI_Main_BlockButton:Hide();
        else
                DepositBoxUI_Options_MiniMapCheckButton:SetChecked(0);
                DepositBoxUI_Main_MiniMapButtonFrame:Hide();
                DepositBoxUI_Main_BlockButton:Show();
        end
        DepositBox_MiniMapButton_UpdatePosition();


        if (svDepositBox_MoneyDisplayType == "Bag") then
                DepositBoxUI_Options_MoneyDisplay_BagCheckButton:SetChecked(1); 
                DepositBoxUI_Options_MoneyDisplay_BoxCheckButton:SetChecked(0);
        else
                DepositBoxUI_Options_MoneyDisplay_BagCheckButton:SetChecked(0); 
                DepositBoxUI_Options_MoneyDisplay_BoxCheckButton:SetChecked(1);
        end
        
        if (svDepositBox_UsingMoneyDisplay == false) then
                DepositBoxUI_Main_MoneyDisplayFrame:Hide();
                DepositBoxUI_BlockButtonText:Show();
                DepositBoxUI_Options_MoneyDisplayCheckButton:SetChecked(0);

                DepositBoxUI_Options_MoneyDisplay_BagCheckButton:Disable(); 
                DepositBoxUI_Options_MoneyDisplay_BoxCheckButton:Disable();
        else
                DepositBoxUI_Main_MoneyDisplayFrame:Show();
                DepositBoxUI_BlockButtonText:Hide();
                DepositBoxUI_Options_MoneyDisplayCheckButton:SetChecked(1); 

                DepositBoxUI_Options_MoneyDisplay_BagCheckButton:Enable(); 
                DepositBoxUI_Options_MoneyDisplay_BoxCheckButton:Enable();
        end
        

        if (svDepositBox_ACMode == false) then
                DepositBoxUI_Options_CompatableCheckButton:SetChecked(0); 
                GetMoney = DepositBox_New_GetMoney;
        else
                DepositBoxUI_Options_CompatableCheckButton:SetChecked(1); 
                GetMoney = DepositBox_Original_GetMoney;
        end


        if (svDepositBox_Hidden == true) then
                DepositBoxUI_Main_BlockButton:Hide();
                DepositBoxUI_Main_MiniMapButtonFrame:Hide();
                DepositBoxUI_OptionsFrame:Hide();
                DepositBoxUI_DepositBoxFrame:Hide();
        else
                if (svDepositBox_UsingMiniMapButton == true) then
                        DepositBoxUI_Main_MiniMapButtonFrame:Show();
                        if (svDepositBox_UsingMoneyDisplay == false) then
                                DepositBoxUI_Main_BlockButton:Hide();
                        else
                                DepositBoxUI_Main_BlockButton:Show();
                        end
                else
                        DepositBoxUI_Main_MiniMapButtonFrame:Hide();
                        DepositBoxUI_Main_BlockButton:Show();
                end
                DepositBoxUI_OptionsFrame:Hide();
                DepositBoxUI_DepositBoxFrame:Hide();
        end

        DepositBox_CheckLocation();
        
        
        
        --Override every Player MoneyFrame to show just the unstored amount
        MoneyTypeInfo["PLAYER"].UpdateFunc = function()
                return (DepositBox_New_GetMoney() - GetCursorMoney() - GetPlayerTradeMoney());
        end
        
        --Complex Stage QuickFixes
        if (NoxInformationBarFormats ~= nil) then
                NoxInformationBar_GetMoney = function ()
                        return DepositBox_New_GetMoney();
                end
                NoxInformationBar_GetGold = function ()
                        return  floor (DepositBox_New_GetMoney() / 10000);
                end
                NoxInformationBar_GetSilver = function ()
                        return  floor ( math.mod ( DepositBox_New_GetMoney ( ), 10000 ) / 100 );
                end
                NoxInformationBar_GetCopper = function ()
                        return  math.mod ( DepositBox_New_GetMoney ( ), 100 );
                end 
                NoxInformationBar_GetAllMoney= function ()
                        return  NoxInformationBar_FormatMoney ( DepositBox_New_GetMoney ( ) );
                end 
        end
        
        
        if (IWMoneyDisplay_UpdateMoneyDisplay ~= nil) then
                
                IWMoneyDisplay_UpdateMoneyDisplay = function ()
                        IWMyGoldButton:Show();
                        IWMySilverButton:Show();
                        IWMyCopperButton:Show();
                        local currentMoney = 0;
                        currentMoney = DepositBox_New_GetMoney();
                        
                        local gold = math.floor(currentMoney / COPPER_PER_GOLD);
                        currentMoney = currentMoney - gold * COPPER_PER_GOLD;
                        local silver = math.floor(currentMoney / COPPER_PER_SILVER);
                        currentMoney = currentMoney - silver * COPPER_PER_SILVER;
                        local copper = currentMoney;
                        IWMyGoldButtonText:SetText(gold);
                        IWMySilverButtonText:SetText(silver);
                        IWMyCopperButtonText:SetText(copper);
                end     
        end
        
        --End Complex Stage QuickFixes
                
end


function DepositBox_OnEvent()
        if (event == "ADDON_LOADED") then
                if(myAddOnsFrame_Register) then
                        -- Register the addon in myAddOns
                        myAddOnsFrame_Register(DepositBoxDetails, DepositBoxHelp);
                end
        end
        
        if (event == "VARIABLES_LOADED") then
                --DEFAULT_CHAT_FRAME:AddMessage("|c00FFFFFF".."Debug: DepositBox_OnEvent: VARIABLES_LOADED".."|r");
                DepositBox_ConvertOldSV();
                DepositBox_LoadState();
                DepositBox_LocalStoredMoney = DepositBox_LoadLocalStoredMoney();
        end
        
        if (event == "PLAYER_ENTERING_WORLD") then

                if (DepositBox_CurrentMoney == nil) then
                        DepositBox_CurrentMoney = DepositBox_New_GetMoney();
                end     

                if (TitanPanelBarButton ~= nil) then
                        if ( TitanPanel_IsPluginShown("DepositBox") ) then
                                DepositBox_UsingTitan = true;
                        else
                                DepositBox_UsingTitan = false;
                        end
                        DepositBox_Titan_LoadState();
                end
                
                DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);              
        end
        
        if (event == "PLAYER_MONEY") then
                if (DepositBox_New_GetMoney() + DepositBox_LocalStoredMoney > DepositBox_Original_GetMoney()) then
                        DepositBox_SetLocalStoredMoney(DepositBox_Original_GetMoney());
                        DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);
                else
                        local newcash = 0;
                        local toDeposit = 0;
                        if (svDepositBox_UsingDirectDepositOption == true) then
                                newcash = DepositBox_New_GetMoney() - DepositBox_CurrentMoney;
                                if (newcash > 0) then
                                        toDeposit = floor((newcash / 100) * svDepositBox_DirectDepositPercentage);
                                        DepositBox_SetLocalStoredMoney (toDeposit + DepositBox_LocalStoredMoney);
                                end
                        end
                        if (svDepositBox_UsingThresholdOption == true) then
                                if (DepositBox_New_GetMoney() > tonumber(svDepositBox_MoneyThreshold)) then
                                        toDeposit = DepositBox_New_GetMoney() - tonumber(svDepositBox_MoneyThreshold);
                                        DepositBox_SetLocalStoredMoney (toDeposit + DepositBox_LocalStoredMoney);
                                end
                        end
                        DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);
                end
                
                DepositBox_CurrentMoney = DepositBox_New_GetMoney();

                DepositBox_CheckForAlert();

        end
        
                
end


function DepositBox_SetLocalStoredMoney (money)
        DepositBox_LocalStoredMoney = money;
        svDepositBox_Money = ""..DepositBox_LocalStoredMoney;
end


function DepositBox_LoadLocalStoredMoney ()
        local cashToLoad = tonumber(svDepositBox_Money);
        
        if (cashToLoad == nil) then
                cashToLoad = 0;
        end
        
        return cashToLoad;
end


function DepositBox_UpdateCashDisplay(money)
        -- Breakdown the money into denominations
        local gold = floor(money / (COPPER_PER_SILVER * SILVER_PER_GOLD));
        local silver = floor((money - (gold * COPPER_PER_SILVER * SILVER_PER_GOLD)) / COPPER_PER_SILVER);
        local copper = mod(money, COPPER_PER_SILVER);

        local silverZero = "";
        local copperZero = "";

        if (silver < 10) then
                silverZero = "0";
        end
        if (copper < 10) then
                copperZero = "0";
        end

        --Set the text
        DepositBoxUI_DepositBox_MoneyStoredGoldText:SetText(gold);
        DepositBoxUI_DepositBox_MoneyStoredSilverText:SetText(silverZero..""..silver);
        DepositBoxUI_DepositBox_MoneyStoredCopperText:SetText(copperZero..""..copper);

        --Set the text on money display too

        if (svDepositBox_MoneyDisplayType == "Box") then
                if (DepositBox_UsingTitan == true) then
                        TitanPanelDepositBoxButtonGoldButton:SetText(gold);
                        TitanPanelDepositBoxButtonSilverButton:SetText(silverZero..""..silver);
                        TitanPanelDepositBoxButtonCopperButton:SetText(copperZero..""..copper); 
                else
                        DepositBoxUI_Main_MoneyDisplayGoldText:SetText(gold);
                        DepositBoxUI_Main_MoneyDisplaySilverText:SetText(silverZero..""..silver);
                        DepositBoxUI_Main_MoneyDisplayCopperText:SetText(copperZero..""..copper);       
                end
        end


                        
        --Update the bag display too
        DepositBox_UpdateBagCashDisplay(DepositBox_New_GetMoney() - GetCursorMoney());
        
end


function DepositBox_UpdateBagCashDisplay(money)

        -- Breakdown the money into denominations
        local gold = floor(money / (COPPER_PER_SILVER * SILVER_PER_GOLD));
        local silver = floor((money - (gold * COPPER_PER_SILVER * SILVER_PER_GOLD)) / COPPER_PER_SILVER);
        local copper = mod(money, COPPER_PER_SILVER);

        local silverZero = "";
        local copperZero = "";

        if (silver < 10) then
                silverZero = "0";
        end
        if (copper < 10) then
                copperZero = "0";
        end

        --Set the text
        DepositBoxUI_DepositBox_MoneyBagGoldText:SetText(gold);
        DepositBoxUI_DepositBox_MoneyBagSilverText:SetText(silverZero..""..silver);
        DepositBoxUI_DepositBox_MoneyBagCopperText:SetText(copperZero..""..copper);
        
        --Set the text on money display too
        if (svDepositBox_MoneyDisplayType == "Bag") then
                if (DepositBox_UsingTitan == true) then
                        TitanPanelDepositBoxButtonGoldButton:SetText(gold);
                        TitanPanelDepositBoxButtonSilverButton:SetText(silverZero..""..silver);
                        TitanPanelDepositBoxButtonCopperButton:SetText(copperZero..""..copper); 
                else
                        DepositBoxUI_Main_MoneyDisplayGoldText:SetText(gold);
                        DepositBoxUI_Main_MoneyDisplaySilverText:SetText(silverZero..""..silver);
                        DepositBoxUI_Main_MoneyDisplayCopperText:SetText(copperZero..""..copper);       
                end
        end

        --Refresh windows as well
        DepositBox_RefreshWindows();
        
end


function DepositBox_RefreshWindows()
        --Refresh All Windows

        if (IsBagOpen(0)) then
                for i=1, NUM_CONTAINER_FRAMES, 1 do
                        local containerFrame = getglobal("ContainerFrame"..i);
                        if ( containerFrame:IsVisible() and (containerFrame:GetID() == 0) ) then
                                MoneyFrame_Update("ContainerFrame"..i.."MoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                                break;
                        end
                end
        end

        local frame = GetLeftFrame();
        local centerframe = GetCenterFrame();
        local doubleframe = GetDoublewideFrame();

        if (frame ~= nil) then
                local name = frame:GetName();
                if (name == "MerchantFrame") then
                        MoneyFrame_Update("MerchantMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        MerchantFrame_Update();
                elseif (name == "BankFrame") then
                        MoneyFrame_Update("BankFrameMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        UpdateBagSlotStatus();
                elseif (name == "MailFrame") then
                        MoneyFrame_Update("SendMailMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        SendMailFrame_Update();
                elseif (name == "ClassTrainerFrame") then
                        MoneyFrame_Update("ClassTrainerMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        ClassTrainer_SelectFirstLearnableSkill();               
                        ClassTrainerFrame_Update();     
                end
        end
        if (centerframe ~= nil) then
                local name = centerframe:GetName();
                if (name == "MerchantFrame") then
                        MoneyFrame_Update("MerchantMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        MerchantFrame_Update();
                elseif (name == "BankFrame") then
                        MoneyFrame_Update("BankFrameMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        UpdateBagSlotStatus();
                elseif (name == "MailFrame") then
                        MoneyFrame_Update("SendMailMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        SendMailFrame_Update();
                elseif (name == "ClassTrainerFrame") then
                        MoneyFrame_Update("ClassTrainerMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        ClassTrainer_SelectFirstLearnableSkill();               
                        ClassTrainerFrame_Update();             
                end
        end
        if (doubleframe ~= nil) then
                local name = doubleframe:GetName();
                if (name == "AuctionFrame") then
                        MoneyFrame_Update("AuctionFrameMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
                        AuctionFrameBid_Update();
                        AuctionFrameBrowse_Update();

                        DepositBox_RefreshAuction("list");
                        DepositBox_RefreshAuction("bidder");
                end
        end


        -- Quick fixes 
        if (TitanPanelMoneyButton ~= nil) then
                MoneyFrame_Update("TitanPanelMoneyButton", DepositBox_New_GetMoney() - GetCursorMoney());
        end
        if (IB_MoneyMoney ~= nil) then
                MoneyFrame_Update("IB_MoneyMoney", DepositBox_New_GetMoney() - GetCursorMoney());
        end
        if (AllInOneInventoryFrameMoneyFrame ~= nil) then
                MoneyFrame_Update("AllInOneInventoryFrameMoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
        end
        if (SmallMoneyFrameTemplate ~= nil) then
                MoneyFrame_Update("SmallMoneyFrameTemplate", DepositBox_New_GetMoney() - GetCursorMoney());
        end
        if (NOX_MoneyFrame ~= nil) then
                MoneyFrame_Update("NOX_MoneyFrame", DepositBox_New_GetMoney() - GetCursorMoney());
        end
        if (IWMyGoldButton ~= nil or IWMySilverButton ~= nil or IWMyCopperButton ~= nil) then
                IWMoneyDisplay_UpdateMoneyDisplay();
        end
        
        
end


function DepositBox_StoreCash()

        local toStore = MoneyInputFrame_GetCopper(DepositBoxUI_DepositBox_MoneyInputFrame);
        if (toStore > DepositBox_New_GetMoney()) then
                toStore = DepositBox_New_GetMoney();
                MoneyInputFrame_SetCopper(DepositBoxUI_DepositBox_MoneyInputFrame, toStore);
        end
        

        --Clear the focus
        DepositBoxUI_DepositBox_MoneyInputFrameGold:ClearFocus();
        DepositBoxUI_DepositBox_MoneyInputFrameSilver:ClearFocus();
        DepositBoxUI_DepositBox_MoneyInputFrameCopper:ClearFocus();

        if (toStore > 0) then
                if (svDepositBox_UsingSound) then
                        PlaySound("LOOTWINDOWCOINSOUND");
                end

                DepositBox_SetLocalStoredMoney(toStore + DepositBox_LocalStoredMoney);

                DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);

        end

        DepositBox_CurrentMoney = DepositBox_New_GetMoney();

        DepositBox_CheckForAlert();

end


function DepositBox_RetrieveCash()
        local toGet = MoneyInputFrame_GetCopper(DepositBoxUI_DepositBox_MoneyInputFrame);
        if (toGet > DepositBox_LocalStoredMoney) then
                toGet = DepositBox_LocalStoredMoney;
                MoneyInputFrame_SetCopper(DepositBoxUI_DepositBox_MoneyInputFrame, toGet);
        end
        

        --Clear the focus
        DepositBoxUI_DepositBox_MoneyInputFrameGold:ClearFocus();
        DepositBoxUI_DepositBox_MoneyInputFrameSilver:ClearFocus();
        DepositBoxUI_DepositBox_MoneyInputFrameCopper:ClearFocus();

        if (toGet > 0) then
                if (svDepositBox_UsingSound) then
                        PlaySound("LOOTWINDOWCOINSOUND");
                end

                DepositBox_SetLocalStoredMoney(DepositBox_LocalStoredMoney - toGet);

                DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);

        end

        DepositBox_CurrentMoney = DepositBox_New_GetMoney();
        DepositBox_CheckForAlert();

end


function DepositBox_New_GetMoney()
        local realmoney = DepositBox_Original_GetMoney();

        if (svDepositBox_Money == nil) then
                DepositBox_LocalStoredMoney = DepositBox_LoadLocalStoredMoney();
        end

        if (DepositBox_LocalStoredMoney == nil) then
                DepositBox_LocalStoredMoney = 0;
        end

        if (realmoney < DepositBox_LocalStoredMoney) then
                DepositBox_LocalStoredMoney = realmoney;
        end

        return realmoney - DepositBox_LocalStoredMoney;
end


function DepositBox_CheckForAlert() 

        if (svDepositBox_UsingMoneyAlert == true) then

                if (DepositBox_LocalStoredMoney >= tonumber(svDepositBox_MoneyAlert)) then
                        
                                if (DepositBox_UsingTitan == true) then
                                        
                                        if (svDepositBox_UsingSound) then
                                                PlaySound("igMiniMapOpen");
                                        end
                                        DepositBoxUI_DepositBoxFrame:Show();
                                        DepositBoxUI_Main_TabsFrame:Show();
                                        DepositBox_CheckLocation();                             
                                        
                                else
                                        if (svDepositBox_UsingMiniMapButton == true) then
                                                DepositBoxUI_Main_MiniMapButtonFrame:Show();
                                        else
                                                DepositBoxUI_Main_BlockButton:Show();
                                        end
                                end
                                
                                svDepositBox_Hidden = false;
                                DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00".."DepositBox Has Reached The Storage Target".."|r");
                end

        end
end


function DepositBox_UpdateMoneyAlertDisplay()
        if (DepositBox_Name_Realm == nil or DepositBox_Name_Player == nil) then
                return;
        end
        
        local text = svDepositBox_MoneyAlert;
        if (text == nil) then
                return
        end
        
        local money = tonumber(text);

        -- Breakdown the money into denominations
        local gold = floor(money / (COPPER_PER_SILVER * SILVER_PER_GOLD));
        local silver = floor((money - (gold * COPPER_PER_SILVER * SILVER_PER_GOLD)) / COPPER_PER_SILVER);
        local copper = mod(money, COPPER_PER_SILVER);

        local silverZero = "";
        local copperZero = "";

        if (silver < 10) then
                silverZero = "0";
        end
        if (copper < 10) then
                copperZero = "0";
        end

        --Set the text
        DepositBoxUI_Options_MoneyAlertGoldText:SetText(gold);
        DepositBoxUI_Options_MoneyAlertSilverText:SetText(silverZero..""..silver);
        DepositBoxUI_Options_MoneyAlertCopperText:SetText(copperZero..""..copper);

end


function DepositBox_UpdateThresholdDisplay()
        if (DepositBox_Name_Realm == nil or DepositBox_Name_Player == nil) then
                return;
        end

        local text = svDepositBox_MoneyThreshold;

        if (text == nil) then
                return
        end

        local money = tonumber(text);

        -- Breakdown the money into denominations
        local gold = floor(money / (COPPER_PER_SILVER * SILVER_PER_GOLD));
        local silver = floor((money - (gold * COPPER_PER_SILVER * SILVER_PER_GOLD)) / COPPER_PER_SILVER);
        local copper = mod(money, COPPER_PER_SILVER);

        local silverZero = "";
        local copperZero = "";

        if (silver < 10) then
                silverZero = "0";
        end
        if (copper < 10) then
                copperZero = "0";
        end

        --Set the text
        DepositBoxUI_DepositBox_ThresholdGoldText:SetText(gold);
        DepositBoxUI_DepositBox_ThresholdSilverText:SetText(silverZero..""..silver);
        DepositBoxUI_DepositBox_ThresholdCopperText:SetText(copperZero..""..copper);

end


function DepositBox_ToggleDepositBox()

        if (DepositBox_UsingTitan == true) then
        
                -- Titan Panel Enabled
                if(DepositBoxUI_DepositBoxFrame:IsVisible() or DepositBoxUI_OptionsFrame:IsVisible()) then
                        if (svDepositBox_UsingSound) then
                                PlaySound("igMiniMapClose");
                        end
                        DepositBoxUI_DepositBoxFrame:Hide();
                        DepositBoxUI_OptionsFrame:Hide();
                        DepositBoxUI_Main_TabsFrame:Hide();

                else
                        if (svDepositBox_UsingSound) then
                                PlaySound("igMiniMapOpen");
                        end
                        DepositBoxUI_DepositBoxFrame:Show();
                        DepositBoxUI_Main_TabsFrame:Show();
        
                        DepositBox_CheckLocation();
                end             
                
        
        
                return
        end
        

        if (svDepositBox_UsingMiniMapButton == true) then

                -- MiniMap Operation

                if(DepositBoxUI_DepositBoxFrame:IsVisible() or DepositBoxUI_OptionsFrame:IsVisible()) then
                        if (svDepositBox_UsingSound) then
                                PlaySound("igMiniMapClose");
                        end
                        DepositBoxUI_DepositBoxFrame:Hide();
                        DepositBoxUI_OptionsFrame:Hide();
                        DepositBoxUI_Main_TabsFrame:Hide();
                        if (svDepositBox_UsingMoneyDisplay == false) then
                                DepositBoxUI_Main_BlockButton:Hide();
                        end
                else
                        if (svDepositBox_UsingSound) then
                                PlaySound("igMiniMapOpen");
                        end
                        DepositBoxUI_DepositBoxFrame:Show();
                        DepositBoxUI_Main_BlockButton:Show();
                        DepositBoxUI_Main_TabsFrame:Show();
        
                        DepositBox_CheckLocation();
                end
                

        else

                -- Normal Operation

                if(DepositBoxUI_DepositBoxFrame:IsVisible() or DepositBoxUI_OptionsFrame:IsVisible()) then
                        if (svDepositBox_UsingSound) then
                                PlaySound("igMiniMapClose");
                        end
                        DepositBoxUI_DepositBoxFrame:Hide();
                        DepositBoxUI_OptionsFrame:Hide();
                        DepositBoxUI_Main_TabsFrame:Hide();
                else
                        if (svDepositBox_UsingSound) then
                                PlaySound("igMiniMapOpen");
                        end
                        DepositBoxUI_DepositBoxFrame:Show();
                        DepositBoxUI_Main_TabsFrame:Show();
        
                        DepositBox_CheckLocation();
                end
        end

end


function DepositBox_ToggleUsingDirectDeposit ()
        
        local checkedValue = DepositBoxUI_DepositBox_DirectCheckButton:GetChecked(); 


        if (checkedValue == nil ) then
                --Turned Off
                if (svDepositBox_UsingSound) then
                        PlaySound("igMainMenuOptionCheckBoxOff");
                end
                svDepositBox_UsingDirectDepositOption = false;
--[[
                DepositBoxUI_Options_MoneyAlertCheckButton:Disable();
                DepositBoxUI_Options_MoneyAlertCheckButton:SetChecked(0);
                svDepositBox_UsingMoneyAlert = false;
                svDepositBox_MoneyAlert = "0";
                
                DepositBoxUI_Options_MoneyInputFrame:Hide();

                MoneyInputFrame_ResetMoney(DepositBoxUI_Options_MoneyInputFrame);
                MoneyInputFrame_ClearFocus(DepositBoxUI_Options_MoneyInputFrame);
]]
        else    
                --Turned On
                if (svDepositBox_UsingSound) then
                        PlaySound("igMainMenuOptionCheckBoxOn");
                end
                svDepositBox_UsingDirectDepositOption = true;
--[[
                DepositBoxUI_Options_MoneyAlertCheckButton:Enable();
                DepositBoxUI_Options_MoneyInputFrame:Show();
]]
        end

end


function DepositBox_ToggleMiniMapButton ()
        
        local checkedValue = DepositBoxUI_Options_MiniMapCheckButton:GetChecked(); 


        if (checkedValue == nil ) then
                --Turned Off
                if (svDepositBox_UsingMiniMapButton) then
                        PlaySound("igMainMenuOptionCheckBoxOff");
                end
                svDepositBox_UsingMiniMapButton = false;
                DepositBoxUI_Main_MiniMapButtonFrame:Hide();
        else    
                --Turned On
                if (svDepositBox_UsingMiniMapButton) then
                        PlaySound("igMainMenuOptionCheckBoxOn");
                end
                svDepositBox_UsingMiniMapButton = true;
                DepositBoxUI_Main_MiniMapButtonFrame:Show();
        end

end


function DepositBox_ToggleUsingThreshold ()
        local checkedValue = DepositBoxUI_DepositBox_ThresholdCheckButton:GetChecked(); 
        if (checkedValue == nil ) then
                --Turned Off
                if (svDepositBox_UsingSound) then
                        PlaySound("igMainMenuOptionCheckBoxOff");
                end
                svDepositBox_UsingThresholdOption = false;
                MoneyInputFrame_ResetMoney(DepositBoxUI_DepositBox_ThresholdInputFrame);
                MoneyInputFrame_ClearFocus(DepositBoxUI_DepositBox_ThresholdInputFrame);
                DepositBoxUI_DepositBox_ThresholdInputFrame:Show();
        else    
                --Turned On
                if (svDepositBox_UsingSound) then
                        PlaySound("igMainMenuOptionCheckBoxOn");
                end
                svDepositBox_UsingThresholdOption = true;
                svDepositBox_MoneyThreshold = ""..MoneyInputFrame_GetCopper(DepositBoxUI_DepositBox_ThresholdInputFrame);
                MoneyInputFrame_ClearFocus(DepositBoxUI_DepositBox_ThresholdInputFrame);
                DepositBoxUI_DepositBox_ThresholdInputFrame:Hide();
        end
end


function DepositBox_ToggleUsingMoneyAlert ()
        local checkedValue = DepositBoxUI_Options_MoneyAlertCheckButton:GetChecked(); 
        if (checkedValue == nil ) then
                --Turned Off
                if (svDepositBox_UsingSound) then
                        PlaySound("igMainMenuOptionCheckBoxOff");
                end
                svDepositBox_UsingMoneyAlert = false;
                MoneyInputFrame_ResetMoney(DepositBoxUI_Options_MoneyInputFrame);
                MoneyInputFrame_ClearFocus(DepositBoxUI_Options_MoneyInputFrame);
                DepositBoxUI_Options_MoneyInputFrame:Show();
        else    
                --Turned On
                if (svDepositBox_UsingSound) then
                        PlaySound("igMainMenuOptionCheckBoxOn");
                end
                svDepositBox_UsingMoneyAlert = true;
                svDepositBox_MoneyAlert = ""..MoneyInputFrame_GetCopper(DepositBoxUI_Options_MoneyInputFrame);
                MoneyInputFrame_ClearFocus(DepositBoxUI_Options_MoneyInputFrame);
                DepositBoxUI_Options_MoneyInputFrame:Hide();
        end
end


function DepositBox_ToggleUsingMoneyDisplay()

        local checkedValue = DepositBoxUI_Options_MoneyDisplayCheckButton:GetChecked(); 

        if (checkedValue == nil) then

                svDepositBox_UsingMoneyDisplay = false;
                DepositBoxUI_Main_MoneyDisplayFrame:Hide();
                DepositBoxUI_BlockButtonText:Show();
                DepositBoxUI_Options_MoneyDisplay_BoxCheckButton:Disable();
                DepositBoxUI_Options_MoneyDisplay_BagCheckButton:Disable();
                
                if (DepositBox_UsingTitan == true) then
                        TitanPanelDepositBoxButtonGoldButton:Hide();
                        TitanPanelDepositBoxButtonSilverButton:Hide();
                        TitanPanelDepositBoxButtonCopperButton:Hide();
                        
                        DepositBox_New_TitanPanelButton_SetComboButtonWidth("DepositBox", true);                        
                end

        else

                svDepositBox_UsingMoneyDisplay = true;
                DepositBoxUI_Main_MoneyDisplayFrame:Show();
                DepositBoxUI_BlockButtonText:Hide();
                DepositBoxUI_Options_MoneyDisplay_BoxCheckButton:Enable();
                DepositBoxUI_Options_MoneyDisplay_BagCheckButton:Enable();

                if (DepositBox_UsingTitan == true) then
                        TitanPanelDepositBoxButtonGoldButton:Show();
                        TitanPanelDepositBoxButtonSilverButton:Show();
                        TitanPanelDepositBoxButtonCopperButton:Show();
                        
                        DepositBox_New_TitanPanelButton_SetComboButtonWidth("DepositBox", true);
                end
        end
        
end


function DepositBox_ToggleMoneyDisplayType(button)

        if (button == "Bag") then
                
                svDepositBox_MoneyDisplayType = "Bag";
                DepositBoxUI_Options_MoneyDisplay_BagCheckButton:SetChecked(1);
                DepositBoxUI_Options_MoneyDisplay_BoxCheckButton:SetChecked(0);

        else
        
                svDepositBox_MoneyDisplayType = "Box";
                DepositBoxUI_Options_MoneyDisplay_BagCheckButton:SetChecked(0);
                DepositBoxUI_Options_MoneyDisplay_BoxCheckButton:SetChecked(1);
                        
        end
        
        DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);
        
end


function DepositBox_ToggleACMode()
        local checkedValue = DepositBoxUI_Options_CompatableCheckButton:GetChecked(); 
        local msg = "DepositBox Acountant Compatibility Mode ";

        if (checkedValue == nil) then
                GetMoney = DepositBox_New_GetMoney;
                svDepositBox_ACMode = false;
                msg = msg.."Disabled. ";
        else
                GetMoney = DepositBox_Original_GetMoney;
                svDepositBox_ACMode = true;
                msg = msg.."Enabled. ";
        end
        
        msg = msg.."It is advised that you perform '/console reloadui'";

        DEFAULT_CHAT_FRAME:AddMessage("|c00FFFF00".. msg .."|r");
end


function DepositBox_PerformTargetHide()

        local msgok;

        if (svDepositBox_UsingMiniMapButton == true) then
                if (DepositBoxUI_Main_MiniMapButtonFrame:IsShown()) then
                        DepositBoxUI_Main_BlockButton:Hide();
                        DepositBoxUI_Main_MiniMapButtonFrame:Hide();
                        DepositBoxUI_DepositBoxFrame:Hide();
                        DepositBoxUI_OptionsFrame:Hide();
                        DepositBoxUI_Main_TabsFrame:Hide();
                
                        msgok = "DepositBox Hidden";
                        svDepositBox_Hidden = true;
                end
        else
                if (DepositBoxUI_Main_BlockButton:IsShown()) then
                        DepositBoxUI_Main_BlockButton:Hide();
                        DepositBoxUI_Main_MiniMapButtonFrame:Hide();
                        DepositBoxUI_DepositBoxFrame:Hide();
                        DepositBoxUI_OptionsFrame:Hide();
                        DepositBoxUI_Main_TabsFrame:Hide();

                        msgok = "DepositBox Hidden";
                        svDepositBox_Hidden = true;
                end
        end
        
        if (msgok ~= nil) then
                DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00"..msgok.."|r");
        end

end


function DepositBox_OnValueChanged()
        local value = DepositBoxUI_DepositBox_PercentageSlider:GetValue();

        if (svDepositBox_DirectDepositPercentage == nil) then
                return;
        end
        
        svDepositBox_DirectDepositPercentage = value;
        DepositBoxPercentageText:SetText(value.."%");
end


function DepositBox_MiniMapOnValueChanged()

                local value = DepositBoxUI_Options_MiniMapSlider:GetValue();

                svDepositBox_MiniMapLocation = value;
                DepositBoxUI_Options_MiniMapSliderText:SetText(value);

                DepositBox_MiniMapButton_UpdatePosition();
end


function DepositBox_MiniMapButton_UpdatePosition()
        DepositBoxUI_Main_MiniMapButtonFrame:SetPoint(
                "TOPLEFT",
                "Minimap",
                "TOPLEFT",
                52 - (80 * cos(svDepositBox_MiniMapLocation)),
                (80 * sin(svDepositBox_MiniMapLocation)) - 52
        );
end


function DepositBox_ShowTotalMoney()
        local money = DepositBox_Original_GetMoney();
        local gold = floor(money / (COPPER_PER_SILVER * SILVER_PER_GOLD));
        local silver = floor((money - (gold * COPPER_PER_SILVER * SILVER_PER_GOLD)) / COPPER_PER_SILVER);
        local copper = mod(money, COPPER_PER_SILVER);

        local moneytext = gold.."g "..silver.."s "..copper.."c"
        if (svDepositBox_Location == "ABOVELEFT" or svDepositBox_Location == "BELOWLEFT") then
                GameTooltip:SetOwner(DepositBoxUI_DepositBoxFrame, "ANCHOR_TOPLEFT");
        else
                GameTooltip:SetOwner(DepositBoxUI_DepositBoxFrame, "ANCHOR_TOPRIGHT");
        end
        GameTooltip:SetText("Total Money: "..moneytext);

end


function DepositBox_CheckLocation()
        local width = DepositBoxUI_DepositBoxFrame:GetWidth();
        local halfwidth = width / 2;
        local height = DepositBoxUI_DepositBoxFrame:GetHeight();

        local tabwidth = DepositBoxUI_Main_TabsFrame:GetWidth();
        local tabheight = DepositBoxUI_Main_TabsFrame:GetHeight();
        
        
        local button = "DepositBoxUI_Main_BlockButton";
        local frame = "DepositBoxUI_DepositBoxFrame";
        local offset = 0;
        
        if (DepositBox_UsingTitan == true) then
                button = "TitanPanelDepositBoxButton";
                offset = 3;
        end
        
        if (svDepositBox_Location == "BELOWRIGHT") then
                --LEFT TOP
                DepositBoxUI_DepositBoxFrame:ClearAllPoints();
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPLEFT", button, "BOTTOMLEFT", 0, -offset);
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPRIGHT", button, "BOTTOMLEFT", width, -offset);

                DepositBoxUI_Main_TabsFrame:ClearAllPoints();
                DepositBoxUI_Main_TabsFrame:SetPoint("TOPLEFT", frame, "BOTTOMLEFT", 0, 7);
                DepositBoxUI_Main_TabsFrame:SetPoint("TOPRIGHT", frame, "BOTTOMLEFT", tabwidth, 7-tabheight);

        elseif (svDepositBox_Location == "ABOVERIGHT") then
                -- LEFT BOTTOM
                DepositBoxUI_DepositBoxFrame:ClearAllPoints();
                DepositBoxUI_DepositBoxFrame:SetPoint("BOTTOMLEFT", button, "TOPLEFT", 0, offset);
                DepositBoxUI_DepositBoxFrame:SetPoint("BOTTOMRIGHT", button, "TOPLEFT", width, offset);

                DepositBoxUI_Main_TabsFrame:ClearAllPoints();
                DepositBoxUI_Main_TabsFrame:SetPoint("BOTTOMLEFT", frame, "TOPLEFT", 0, -7);
                DepositBoxUI_Main_TabsFrame:SetPoint("BOTTOMRIGHT", frame, "TOPLEFT", tabwidth, -7+tabheight);

        elseif (svDepositBox_Location == "BELOWLEFT") then
                --RIGHT TOP
                DepositBoxUI_DepositBoxFrame:ClearAllPoints();
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPLEFT", button, "BOTTOMRIGHT", -width, -offset);
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPRIGHT", button, "BOTTOMRIGHT", 0, -offset);

                DepositBoxUI_Main_TabsFrame:ClearAllPoints();
                DepositBoxUI_Main_TabsFrame:SetPoint("TOPLEFT", frame, "BOTTOMLEFT", 0, 7);
                DepositBoxUI_Main_TabsFrame:SetPoint("TOPRIGHT", frame, "BOTTOMLEFT", tabwidth, 7-tabheight);

        elseif (svDepositBox_Location == "ABOVELEFT") then
                --RIGHT BOTTOM
                DepositBoxUI_DepositBoxFrame:ClearAllPoints();
                DepositBoxUI_DepositBoxFrame:SetPoint("BOTTOMLEFT", button, "TOPRIGHT", -width, offset);
                DepositBoxUI_DepositBoxFrame:SetPoint("BOTTOMRIGHT", button, "TOPRIGHT", 0, offset);

                DepositBoxUI_Main_TabsFrame:ClearAllPoints();
                DepositBoxUI_Main_TabsFrame:SetPoint("BOTTOMLEFT", frame, "TOPLEFT", 0, -7);
                DepositBoxUI_Main_TabsFrame:SetPoint("BOTTOMRIGHT", frame, "TOPLEFT", tabwidth, -7+tabheight);

        elseif (svDepositBox_Location == "RIGHT") then
                --LEFT
                DepositBoxUI_DepositBoxFrame:ClearAllPoints();
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPLEFT", button, "BOTTOMLEFT", 0, 0);
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPRIGHT", button, "BOTTOMLEFT", width, 0);

        elseif (svDepositBox_Location == "LEFT") then
                --RIGHT
                DepositBoxUI_DepositBoxFrame:ClearAllPoints();
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPLEFT", button, "BOTTOMRIGHT", -width, 0);
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPRIGHT", button, "BOTTOMRIGHT", 0, 0);

        elseif (svDepositBox_Location == "BELOW") then
                --TOP
                DepositBoxUI_DepositBoxFrame:ClearAllPoints();
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPLEFT", button, "BOTTOM", -halfwidth, -offset);
                DepositBoxUI_DepositBoxFrame:SetPoint("TOPRIGHT", button, "BOTTOM", halfwidth, -offset);

                DepositBoxUI_Main_TabsFrame:ClearAllPoints();
                DepositBoxUI_Main_TabsFrame:SetPoint("TOPLEFT", frame, "BOTTOMLEFT", 0, 7);
                DepositBoxUI_Main_TabsFrame:SetPoint("TOPRIGHT", frame, "BOTTOMLEFT", tabwidth, 7-tabheight);

        elseif (svDepositBox_Location == "ABOVE") then
                --BOTTOM
                DepositBoxUI_DepositBoxFrame:ClearAllPoints();
                DepositBoxUI_DepositBoxFrame:SetPoint("BOTTOMLEFT", button, "TOP", -halfwidth, offset);
                DepositBoxUI_DepositBoxFrame:SetPoint("BOTTOMRIGHT", button, "TOP", halfwidth, offset);

                DepositBoxUI_Main_TabsFrame:ClearAllPoints();
                DepositBoxUI_Main_TabsFrame:SetPoint("BOTTOMLEFT", frame, "TOPLEFT", 0, -7);
                DepositBoxUI_Main_TabsFrame:SetPoint("BOTTOMRIGHT", frame, "TOPLEFT", tabwidth, -7+tabheight);
        end


end


function DepositBox_New_MoneyFrame_Update (frame, money)
        if (money == GetMoney()) then
                return DepositBox_Original_MoneyFrame_Update(frame, DepositBox_New_GetMoney() - GetCursorMoney() );
        else
                DepositBox_Original_MoneyFrame_Update(frame, money);
        end
end


function DepositBox_New_BuyMerchantItem(index, qty)
        --message("buy");
        local name, texture, price, quantity, numAvailable, isUsable = GetMerchantItemInfo(index);

        local total = price;
        if (qty ~= nil) then
                total = price * qty;
        end
        
        if (DepositBox_CheckBalance( total ) == true) then
                DepositBox_Original_BuyMerchantItem(index, qty);
        end
end


function DepositBox_New_PickupMerchantItem(index)
        --message("pickup");
        local name, texture, price, quantity, numAvailable, isUsable = GetMerchantItemInfo(index);

        if (DepositBox_CheckBalance(price) == true) then
                DepositBox_Original_PickupMerchantItem(index);
        end
end


function DepositBox_New_RepairAll()

        if (DepositBox_CheckBalance(GetRepairAllCost()) == true) then
                DepositBox_Original_RepairAll();
        end
end


function DepositBox_New_PaperDollItemSlotButton_OnClick(button, ignoreShift)
        
        if (InRepairMode()) then
                local hasItem, hasCooldown, repairCost = GameTooltip:SetInventoryItem("player", this:GetID());
                if (hasItem and repairCost and (repairCost > 0)) then
                        if (DepositBox_CheckBalance(repairCost) == true) then
                                DepositBox_Original_PaperDollItemSlotButton_OnClick(button, ignoreShift);
                        end
                end
        else
                DepositBox_Original_PaperDollItemSlotButton_OnClick(button, ignoreShift);
        end
end


function DepositBox_New_ContainerFrameItemButton_OnClick(button, ignoreShift)

        if (InRepairMode()) then
                local hasCooldown, repairCost = GameTooltip:SetBagItem(this:GetParent():GetID(), this:GetID());
                if (repairCost and (repairCost > 0)) then
                        if (DepositBox_CheckBalance(repairCost) == true) then
                                DepositBox_Original_ContainerFrameItemButton_OnClick(button, ignoreShift);
                        end
                end
        else
                DepositBox_Original_ContainerFrameItemButton_OnClick(button, ignoreShift);
        end
end


function DepositBox_New_TakeTaxiNode(slot)
        if (TaxiNodeGetType(slot) == "NONE") then
                return;
        end
        
        if (DepositBox_CheckBalance(TaxiNodeCost(slot)) == true) then
                DepositBox_Original_TakeTaxiNode(slot);
        end
end


function DepositBox_New_StartAuction(minBid, buyoutPrice, runTime)

        if (DepositBox_CheckBalance(CalculateAuctionDeposit(runTime)) == true) then
                DepositBox_Original_StartAuction(minBid, buyoutPrice, runTime);
        end
end


function DepositBox_New_SetSendMailMoney(amount)

        if (DepositBox_CheckBalance(amount) == true) then
                DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);
                return DepositBox_Original_SetSendMailMoney(amount);
        else
                --ClearSendMail();
        end
end


function DepositBox_New_SendMail(target, subject, body)

        if (DepositBox_CheckBalance(GetSendMailPrice()) == true) then
                DepositBox_Original_SendMail(target, subject, body);
                DepositBox_UpdateCashDisplay(DepositBox_LocalStoredMoney);
        else
                --ClearSendMail();
        end

end


function DepositBox_New_PurchaseSlot()

        if (DepositBox_CheckBalance(GetBankSlotCost(GetNumBankSlots()+1)) == true) then
                DepositBox_Original_PurchaseSlot();
        end
end


function DepositBox_New_BuybackItem(slot)
        local buybackName, buybackTexture, buybackPrice, buybackQuantity, buybackNumAvailable, buybackIsUsable = GetBuybackItemInfo(slot);
        if (DepositBox_CheckBalance(buybackPrice) == true) then
                DepositBox_Original_BuybackItem(slot);
        end
end


function DepositBox_New_CompleteQuest()
        if (DepositBox_CheckBalance(GetQuestMoneyToGet()) == true) then
                DepositBox_Original_CompleteQuest();
        end
end


function DepositBox_New_PickupPlayerMoney(amount)
        DepositBox_Original_PickupPlayerMoney(amount);
        DepositBox_UpdateBagCashDisplay(DepositBox_New_GetMoney() - amount);
end


function DepositBox_New_BuyTrainerService(id)
        if (DepositBox_CheckBalance(GetTrainerServiceCost(id)) == true) then
                DepositBox_Original_BuyTrainerService(id);
        end
end


function DepositBox_New_SetTradeMoney(copper)
        if (DepositBox_CheckBalance(copper) == true) then
                DepositBox_Original_SetTradeMoney(copper);
        else
                MoneyInputFrame_SetCopper(TradePlayerInputMoneyFrame, GetPlayerTradeMoney());
        end
end


function DepositBox_New_ConfirmTalentWipe()
        local popupFrame = StaticPopup_Visible("CONFIRM_TALENT_WIPE");
        
        if (popupFrame ~= nil) then
        
                local moneyFrame = getglobal(popupFrame.."MoneyFrame");
                local cost = moneyFrame.staticMoney;
                
                if (DepositBox_CheckBalance(cost) == true) then
                        DepositBox_Original_ConfirmTalentWipe();
                end
        end
        
end


function DepositBox_New_PlaceAuctionBid(type, index, bid)
        if (DepositBox_CheckBalance(bid) == true) then
                DepositBox_Original_PlaceAuctionBid(type, index, bid);
        else
                BrowseBidButton:Disable();
                BrowseBuyoutButton:Disable();
        end
end


function DepositBox_New_AuctionFrameBrowse_Update()
        DepositBox_Original_AuctionFrameBrowse_Update();
        DepositBox_RefreshAuction("list");
end


function DepositBox_New_AuctionFrameBid_Update()
        DepositBox_Original_AuctionFrameBid_Update();
        DepositBox_RefreshAuction("bidder");
end


function DepositBox_RefreshAuction(type)
        local name, texture, count, quality, canUse, level, minBid, minIncrement, buyoutPrice, bidAmount, highBidder, owner = GetAuctionItemInfo(type, GetSelectedAuctionItem(type));
        if (buyoutPrice == 0 or buyoutPrice > DepositBox_New_GetMoney()) then
        
                if (type == "list") then
                        BrowseBuyoutButton:Disable();   
                elseif (type == "bidder") then
                        BidBuyoutButton:Disable();      
                end
        end
        if (minBid > DepositBox_New_GetMoney()) then
                if (type == "list") then
                        BrowseBidButton:Disable();      
                elseif (type == "bidder") then
                        BidBidButton:Disable(); 
                end
        end
end


function DepositBox_New_SplitMoney(amount)
        
        if (amount == nil) then
                amount = 0;
        else
                amount = tonumber(amount);
        end
        
        --message (amount);
        
        if ( amount <= 0 ) then 
                return nil; 
        end
        
        if (DepositBox_CheckBalance(amount) == true) then
                --message ("Split: "..amount);
                return DepositBox_Original_SplitMoney(amount);
                --DepositBox_UpdateBagCashDisplay(DepositBox_New_GetMoney() - GetCursorMoney());
        else
                return nil;     
        end
end


function DepositBox_CheckBalance(cost)
        if (cost > DepositBox_New_GetMoney()) then
                UIErrorsFrame:AddMessage("You cannot afford that", 1.0, 0.0, 0.0, 1.0, UIERRORS_HOLD_TIME);
                return false;
        else
                return true;
        end     
end


function DepositBox_SlashCommands(cmd)
        
        local msgok = nil;

        if (cmd == "display") then
                if (DepositBox_UsingTitan == true) then
                
                        DepositBox_ToggleDepositBox();
                
                else
                
                        if (svDepositBox_UsingMiniMapButton == true) then
                                if (DepositBoxUI_Main_MiniMapButtonFrame:IsShown()) then
                                        DepositBoxUI_Main_BlockButton:Hide();
                                        DepositBoxUI_Main_MiniMapButtonFrame:Hide();
                                        DepositBoxUI_DepositBoxFrame:Hide();
                                        DepositBoxUI_OptionsFrame:Hide();
                                        DepositBoxUI_Main_TabsFrame:Hide();
                                
                                        msgok = "DepositBox Hidden";
                                        svDepositBox_Hidden = true;
                                else    
                                        DepositBoxUI_Main_MiniMapButtonFrame:Show();
                                
                                        msgok = "DepositBox Shown";
                                        svDepositBox_Hidden = false;
                                end
                        else
                                if (DepositBoxUI_Main_BlockButton:IsShown()) then
                                        DepositBoxUI_Main_BlockButton:Hide();
                                        DepositBoxUI_Main_MiniMapButtonFrame:Hide();
                                        DepositBoxUI_DepositBoxFrame:Hide();
                                        DepositBoxUI_OptionsFrame:Hide();
                                        DepositBoxUI_Main_TabsFrame:Hide();
                
                                        msgok = "DepositBox Hidden";
                                        svDepositBox_Hidden = true;
                                else    
                                        DepositBoxUI_Main_BlockButton:Show();
                                
                                        msgok = "DepositBox Shown";
                                        svDepositBox_Hidden = false;
                                end
                        end
                end
        end

        if (cmd == "sound") then
                if (svDepositBox_UsingSound == true) then
                        svDepositBox_UsingSound = false;
                        msgok = "DepositBox Sounds Disabled";
                else
                        svDepositBox_UsingSound = true;
                        msgok = "DepositBox Sounds Enabled";
                end
        end
        if (cmd == "below" or cmd == "b") then
                svDepositBox_Location = "BELOW";
                msgok = "DepositBox Location set to Below";
        end
        if (cmd == "above" or cmd == "a") then
                svDepositBox_Location = "ABOVE";
                msgok = "DepositBox Location set to Above";
        end
        if (cmd == "belowright" or cmd == "br") then
                svDepositBox_Location = "BELOWRIGHT";
                msgok = "DepositBox Location set to BelowRight";
        end
        if (cmd == "belowleft" or cmd == "bl") then
                svDepositBox_Location = "BELOWLEFT";
                msgok = "DepositBox Location set to BelowLeft";
        end
        if (cmd == "aboveright" or cmd == "ar") then
                svDepositBox_Location = "ABOVERIGHT";
                msgok = "DepositBox Location set to AboveRight";
        end
        if (cmd == "aboveleft" or cmd == "al") then
                svDepositBox_Location = "ABOVELEFT";
                msgok = "DepositBox Location set to AboveLeft";
        end
        if (cmd == "right" or cmd == "r") then
                if (svDepositBox_Location == "ABOVELEFT" or svDepositBox_Location == "ABOVE" or svDepositBox_Location == "ABOVERIGHT") then 
                        svDepositBox_Location = "ABOVERIGHT";
                        msgok = "DepositBox Location set to AboveRight";
                else
                        svDepositBox_Location = "BELOWRIGHT";
                        msgok = "DepositBox Location set to BelowRight";
                end
        end
        if (cmd == "left" or cmd == "l") then
                if (svDepositBox_Location == "ABOVELEFT" or svDepositBox_Location == "ABOVE" or svDepositBox_Location == "ABOVERIGHT") then 
                        svDepositBox_Location = "ABOVELEFT";
                        msgok = "DepositBox Location set to AboveLeft";
                else
                        svDepositBox_Location = "BELOWLEFT";
                        msgok = "DepositBox Location set to BelowLeft";
                end
        end
        if (cmd == "reset") then
                if (DepositBox_UsingTitan == true) then
                        DepositBox_CheckTitanPosition();
                        msgok = "DepositBox Location Reset";
                else
                        DepositBoxUI_Main_BlockButton:ClearAllPoints();
                        DepositBoxUI_Main_BlockButton:SetPoint("CENTER", DepositBoxUI_Main_BlockButton:GetParent():GetName(), "CENTER", 0, 0);
                        DepositBoxUI_Main_BlockButton:Show();
                        msgok = "DepositBox Location Reset to center";
                end
        end

        if (msgok ~= nil) then
                DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00"..msgok.."|r");
                DepositBox_CheckLocation();
        end

        if (cmd == "" or cmd == "help") then
                local help = "DepositBox "..DepositBox_VERSION.." - By CodeMoose|n"..
                                 "/depositbox <command> or /db <command>|n"..
                                 "commands:|n"..
                                 "sound - Toggles sound on/off|n"..
                                 "reset - Resets the DepositBox location to the center of the screen|n"..
                                 "display - Toggles Hiding/Showing of DepositBox|n"..
                                 "below, above, left, right - Changes the location of where the storage frame opens. Combinations can also be used, eg. aboveleft|n"

                DEFAULT_CHAT_FRAME:AddMessage("|c00FFFF00"..help .."|r");
        end

end