--
--  AutoBar
--
--  Config functions
-- 
--  Author: Marc aka Saien on Hyjal
--  http://64.168.251.69/wow
--

UIPanelWindows["AutoBar_Options"] = { area = "center", pushable = 99, whileDead = 1 };

StaticPopupDialogs["AUTOBAR_ITEMENTRY"] = {
	text = "Enter Item Name or ItemID:",
	button1 = TEXT(ACCEPT),
	button2 = TEXT(CANCEL),
	hasEditBox = 1, 
	maxLetters = 50,
	hasWideEditBox = 1,
	OnAccept = function()
		local editBox = getglobal(this:GetParent():GetName().."WideEditBox");
		local text = editBox:GetText();
		if (tonumber(text) and tonumber(text) > 0) then
			text = tonumber(text);
		end
		local tmp = AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting];
		if (type(tmp) == "table") then
			AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting][AutoBar_Options_ConfigButton_ChooseCategory.editting] = text;
		else
			AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting] = text;
		end
		AutoBar_Options_ConfigButton_ChooseCategory:Hide();
	end,
	OnShow = function()
		local editBox = getglobal(this:GetName().."WideEditBox");
		local tmp = AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting];
		local txt;
		if (type(tmp) == "table") then
			txt = AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting][AutoBar_Options_ConfigButton_ChooseCategory.editting];
		else
			txt = AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting];
		end
		if (txt) then
			editBox:SetText(txt);
		else
			editBox:SetText("");
		end
		editBox:SetFocus();
	end,
	OnHide = function()
		local editBox = getglobal(this:GetName().."WideEditBox");
		if (ChatFrameEditBox:IsVisible()) then 
			ChatFrameEditBox:SetFocus();
		end
		editBox:SetText("");
	end,
	OnCancel = function()
		this:GetParent():Hide();
	end,
	EditBoxOnEnterPressed = function ()
		StaticPopupDialogs["AUTOBAR_ITEMENTRY"].OnAccept();
		this:GetParent():Hide();
	end,
	EditBoxOnEscapePressed = function ()
		this:GetParent():Hide();
	end,
	timeout = 0,
	hideOnEscape = 1
};

------------------------------------
------------------------------------
------------------------------------

local function AutoBar_Config_SlashCmd(msg)
	msg = string.lower (msg);
	local firstword, restwords;
	local idx = string.find(msg," ");
	if (idx) then
		firstword = string.sub(msg,1,idx-1);
		restwords = string.sub(msg,idx+1);
	else
		firstword = msg;
	end

	AutoBar_Msg("Slash commands are entirely depreciated. Setup a Keybinding to open the AutoBar Config.");
	AutoBar_ToggleConfig();
end

------------------------------------

function AutoBar_Config_OnLoad()
	SLASH_AUTOBAR1 = "/autobar";
	SlashCmdList["AUTOBAR"] = function (msg)
		AutoBar_Config_SlashCmd(msg);
	end
end

function AutoBar_Config_OnShow()
	local idx,button,hotkey;
	for idx = 1, AUTOBAR_MAXBUTTONS, 1 do
		button = getglobal("AutoBar_Options_Buttons_Button"..idx);
		hotkey = getglobal("AutoBar_Options_Buttons_Button"..idx.."HotKey");
		count  = getglobal("AutoBar_Options_Buttons_Button"..idx.."Count");
		icon   = getglobal("AutoBar_Options_Buttons_Button"..idx.."Icon");
		hotkey:SetText("#"..idx);
		if (AutoBar_Config[AutoBar_Player].buttons[idx]) then
			local buttoninfo = AutoBar_Config[AutoBar_Player].buttons[idx];
			icon:SetTexture(AutoBar_GetTexture(buttoninfo));
			count:SetText("");
		else
			count:SetText("Empty");
			icon:SetTexture("");
		end
	end
	AutoBar_Options_Bar_Sliders();
	AutoBar_Options_CheckBox_Setup();
end

function AutoBar_Config_ButtonSetTooltip()
	local buttoninfo;
	local preamble, extended;
	if (this.itemid) then
		local name,itemid = GetItemInfo(this.itemid);
		if (name and itemid) then
			GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
			GameTooltip:SetHyperlink(itemid);
		else
			local tmp = "item:"..this.itemid..":0:0:0";
			GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
			GameTooltip:SetHyperlink("item:"..this.itemid..":0:0:0");
		end
		return;
	end
	if (this.category) then
		buttoninfo = this.category;
		extended=true;
	elseif (string.find(this:GetName(), "^AutoBar_Options_Buttons_Button")) then
		buttoninfo = AutoBar_Config[AutoBar_Player].buttons[this:GetID()];
		extended=true;
		preamble=true;
	elseif (string.find(this:GetName(), "^AutoBar_Options_ConfigButton_Button")) then
		extended=true;
		local tmp = AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting];
		if (type(tmp) == "table") then
			buttoninfo = tmp[this:GetID()]
		else
			buttoninfo = tmp;
		end
	end
	local message = "";
	if (buttoninfo == "EMPTY") then
	elseif (type(buttoninfo) == "table") then
		if (preamble) then message = "Multi Category Button\n"; end
		local idx,cat;
		for idx,cat in buttoninfo do
			if (type(cat) == "string" and AutoBar_Category_Info[cat]) then
				message = message.."\n"..AutoBar_Category_Info[cat].description;
			elseif (type(cat) == "number") then
				local name = GetItemInfo(cat);
				if (name) then
					message = message.."\n"..name.." (Custom Item by ID)";
				else
					message = message.."\n(Item ID not recognized)";
				end
			else
				message = message.."\n"..cat.." (Custom Item by Name)";
			end
		end
	elseif (type(buttoninfo) == "string" and AutoBar_Category_Info[buttoninfo]) then
		if (preamble) then message = "Single Category Button\n\n"; end
		message = message..AutoBar_Category_Info[buttoninfo].description;
		if (extended) then
			message = message.."\n";
			if (AutoBar_Category_Info[buttoninfo].notusable) then
				message = message.."\nNot directly usable.";
			end
			if (AutoBar_Category_Info[buttoninfo].targetted) then
				if (AutoBar_Category_Info[buttoninfo].targetted == "WEAPON") then
					message = message.."\nWeapon Target\n(Left click main weapon\nRight click offhand weapon.)";
				else
					message = message.."\nTargetted.";
				end
			end
			if (AutoBar_Category_Info[buttoninfo].noncombat) then
				message = message.."\nNon combat only.";
			end
			if (AutoBar_Category_Info[buttoninfo].combatonly) then
				message = message.."\nCombat only.";
			end
			if (AutoBar_Category_Info[buttoninfo].location) then
				message = message.."\nLocation: "..AutoBar_Category_Info[buttoninfo].location..".";
			end
			if (AutoBar_Category_Info[buttoninfo].limit) then
				message = message.."\nLimited Usage: ";
				if (AutoBar_Category_Info[buttoninfo].limit.downhp) then
					message = message.."Require HP restore";
					if (AutoBar_Category_Info[buttoninfo].limit.downmana) then
						message = message..", ";
					end
				end
				if (AutoBar_Category_Info[buttoninfo].limit.downmana) then
					message = message.."Require Mana restore";
				end
			end

		end
	elseif (type(buttoninfo) == "string" and not AutoBar_Category_Info[buttoninfo]) then
		if (preamble) then message = "Single Item Button\n\n"; end
		message = message..buttoninfo.." (Custom Item by Name)";
	elseif (type(buttoninfo) == "number") then
		if (preamble) then message = "Single Item Button\n\n"; end
		local name = GetItemInfo(buttoninfo);
		if (name) then
			message = message..name.." (Custom Item by ID)";
		else
			message = message.."(Item ID not recognized)";
		end
	end

	GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
	GameTooltip:SetText(message);
end

function AutoBar_Config_Button_Edit(num)
	if (not num) then num = AutoBar_Options_ConfigButton.editting; end
	local buttoninfo = AutoBar_Config[AutoBar_Player].buttons[num];
	AutoBar_Options_ConfigButton.editting = num;
	AutoBar_Options_ConfigButton:Show();
	AutoBar_Options_ConfigButtonTitleText:SetText("Edit Button #"..num);
	local idx,tmp,i;
	---
	if (type(buttoninfo) == "table") then
		tmp = 0;
		for idx = 1, 8, 1 do
			if (AutoBar_Config[AutoBar_Player].buttons[num][idx]) then
				tmp = idx;
			end
		end
		idx = 1;
		while (idx < tmp) do 
			if (AutoBar_Config[AutoBar_Player].buttons[num][idx]) then
				idx = idx + 1;
			else
				AutoBar_Config[AutoBar_Player].buttons[num][idx] = 
				AutoBar_Config[AutoBar_Player].buttons[num][idx+1];
				AutoBar_Config[AutoBar_Player].buttons[num][idx+1] = nil;
				tmp = 0;
				for i = 1, 8, 1 do
					if (AutoBar_Config[AutoBar_Player].buttons[num][i]) then
						tmp = i;
					end
				end
			end
		end
	end
	---
	for idx = 1, 8, 1 do
		local button   = getglobal("AutoBar_Options_ConfigButton_Button"..idx);
		local hotkey   = getglobal("AutoBar_Options_ConfigButton_Button"..idx.."HotKey");
		local count    = getglobal("AutoBar_Options_ConfigButton_Button"..idx.."Count");
		local icon     = getglobal("AutoBar_Options_ConfigButton_Button"..idx.."Icon");
		local move     = getglobal("AutoBar_Options_ConfigButton_Move"..idx);
		local moveup   = getglobal("AutoBar_Options_ConfigButton_Move"..idx.."_Up");
		local movedown = getglobal("AutoBar_Options_ConfigButton_Move"..idx.."_Down");
		local checkbox = getglobal("AutoBar_Options_ConfigButton_Option"..idx);
		local checkboxtext = getglobal("AutoBar_Options_ConfigButton_Option"..idx.."Text");

		hotkey:Hide();
		if (type(buttoninfo) == "table") then
			if (buttoninfo[idx]) then
				move:Show();
				count:SetText("");
				if (AutoBar_Category_Info[buttoninfo[idx]] and AutoBar_Category_Info[buttoninfo[idx]].targetted) then
					checkbox:Show();
					checkboxtext:SetText("Smart Self Cast");
					if (AutoBar_Config[AutoBar_Player].smartselfcast and AutoBar_Config[AutoBar_Player].smartselfcast[buttoninfo[idx]]) then
						checkbox:SetChecked(1);
					else
						checkbox:SetChecked(0);
					end
				else
					checkbox:Hide();
				end
				if (idx == 1) then
					moveup:Hide();
				else
					moveup:Show();
				end
				if (buttoninfo[idx+1]) then
					movedown:Show();
				else
					movedown:Hide();
				end
			else
				move:Hide();
				count:SetText("Empty");
				checkbox:Hide();
			end
			icon:SetTexture(AutoBar_GetTexture(buttoninfo[idx]));
			button:Show();
		else
			move:Hide();
			if (idx == 1) then
				icon:SetTexture(AutoBar_GetTexture(buttoninfo));
				button:Show();
				if (buttoninfo) then
					count:SetText("");
					if (AutoBar_Category_Info[buttoninfo].targetted) then
						checkbox:Show();
						checkboxtext:SetText("Smart Self Cast");
						if (AutoBar_Config[AutoBar_Player].smartselfcast and AutoBar_Config[AutoBar_Player].smartselfcast[buttoninfo]) then
							checkbox:SetChecked(1);
						else
							checkbox:SetChecked(0);
						end
					else
						checkbox:Hide();
					end
				else
					count:SetText("Empty");
					checkbox:Hide();
				end
			else
				button:Hide();
				checkbox:Hide();
			end
		end
	end
	---
	if (type(buttoninfo) == "table") then
		AutoBar_Options_ConfigButton_ConvertButton:SetText("Convert to Single Item");
	else
		AutoBar_Options_ConfigButton_ConvertButton:SetText("Convert to Multi Item");
	end
end

local function AutoBar_ConfigButton_OnClick(mousebutton)
	local tmp = AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting];
	if (type(tmp) == "table") then
		AutoBar_Options_ConfigButton_ChooseCategory.editting = this:GetID();
	else
		AutoBar_Options_ConfigButton_ChooseCategory.editting = nil;
	end
	AutoBar_Options_ConfigButton_ChooseCategory:Show();
end

local function AutoBar_ConfigButton_ChooseCategory_OnClick(mousebutton)
	if (IsShiftKeyDown()) then
		if (AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore) then
			AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore = nil;
			this:GetParent():Hide();
		else
			local category = this.category;
			if (category == "EMPTY") then category = nil; end
			if (category) then
				AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore = category;
				AutoBar_Config_ButtonChooseCategory_OnShow();
			end
		end
	else
		local category = this.category;
		if (category == "EMPTY") then category = nil; end
		if (AutoBar_Options_ConfigButton_ChooseCategory.editting) then
			AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting][AutoBar_Options_ConfigButton_ChooseCategory.editting] = category;
		else
			AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting] = category;
		end
		AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore = nil;
		this:GetParent():Hide();
	end
end
	
function AutoBar_Config_ButtonOnClick(mousebutton)
	if (string.find(this:GetName(), "^AutoBar_Options_Buttons_Button")) then
		return AutoBar_Config_Button_Edit(this:GetID());
	elseif (string.find(this:GetName(), "^AutoBar_Options_ConfigButton_Button")) then
		return AutoBar_ConfigButton_OnClick(mousebutton);
	elseif (string.find(this:GetName(), "^AutoBar_Options_ConfigButton_ChooseCategory_Button")) then
		return AutoBar_ConfigButton_ChooseCategory_OnClick(mousebutton);
	end
end

function AutoBar_Config_Button_ConvertOnClick()
	local buttoninfo = AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting];
	if (type(buttoninfo) == "table") then
		local tmp = buttoninfo[1];
		AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting] = tmp;
	else
		local tmp = buttoninfo;
		AutoBar_Config[AutoBar_Player].buttons[AutoBar_Options_ConfigButton.editting] = { tmp };
	end
	AutoBar_Config_Button_Edit(AutoBar_Options_ConfigButton.editting);
end

function AutoBar_Config_ButtonChooseCategory_OnShow()
	if (AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore and not AutoBar_Category_Info[AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore]) then
		AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore = nil;
	end
	if (AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore) then
		AutoBar_Options_ConfigButton_ChooseCategory_HintText1:Hide();
		local category = AutoBar_Options_ConfigButton_ChooseCategory.categoryexplore;

		FauxScrollFrame_Update(AutoBar_Options_ConfigButton_ChooseCategory_Scroll, table.getn(AutoBar_Category_Info[category].items), 7, 36);
		local offset = FauxScrollFrame_GetOffset(AutoBar_Options_ConfigButton_ChooseCategory_Scroll);
		local idx,name,texture;
		for idx = 1, 7, 1 do
			local button = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Button"..idx);
			local hotkey = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Button"..idx.."HotKey");
			local count  = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Button"..idx.."Count");
			local icon   = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Button"..idx.."Icon");
			local text   = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Text"..idx);
			button.category = nil;
			if (AutoBar_Category_Info[category].items[idx+offset]) then
				if (type(AutoBar_Category_Info[category].items[idx+offset]) == "number") then
					name,_,_,_,_,_,_,_,texture = GetItemInfo(AutoBar_Category_Info[category].items[idx+offset]);
					if (not name) then
						name = "(Not Found: Item "..AutoBar_Category_Info[category].items[idx+offset]..")";
						texture = "Interface\\Icons\\INV_Misc_Gift_01";
					elseif (not texture) then
						texture = "Interface\\Icons\\INV_Misc_Gift_02";
					end
				else
					texture = "Interface\\Icons\\INV_Misc_Gift_03";
					name = AutoBar_Category_Info[category].items[idx+offset];
				end
				icon:SetTexture(texture);
				text:SetText(name);
				count:SetText("");
				button:Show();
				button.itemid = tonumber(AutoBar_Category_Info[category].items[idx+offset]);
			else
				button:Hide();
				button.itemid = nil;
				text:SetText("");
			end
		end
	else
		AutoBar_Options_ConfigButton_ChooseCategory_HintText1:Show();
		local sortedCategories = {};
		for categoryName, rec in AutoBar_Category_Info do
			table.insert(sortedCategories, categoryName);
		end
		table.sort (sortedCategories);
		table.insert(sortedCategories, 1, "EMPTY");
		FauxScrollFrame_Update(AutoBar_Options_ConfigButton_ChooseCategory_Scroll, table.getn(sortedCategories), 7, 36);
		local offset = FauxScrollFrame_GetOffset(AutoBar_Options_ConfigButton_ChooseCategory_Scroll);
		local idx;
		for idx = 1, 7, 1 do
			local button = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Button"..idx);
			local hotkey = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Button"..idx.."HotKey");
			local count  = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Button"..idx.."Count");
			local icon   = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Button"..idx.."Icon");
			local text   = getglobal("AutoBar_Options_ConfigButton_ChooseCategory_Text"..idx);
			button.itemid = nil;
			if (sortedCategories[idx+offset] == "EMPTY") then
				icon:SetTexture("");
				count:SetText("Empty");
				text:SetText("Delete Current Category");
				button:Show();
				button.category = sortedCategories[idx+offset];
			elseif (sortedCategories[idx+offset]) then
				icon:SetTexture(AutoBar_GetTexture(sortedCategories[idx+offset]));
				count:SetText("");
				text:SetText(AutoBar_Category_Info[sortedCategories[idx+offset]].description);
				button.category = sortedCategories[idx+offset];
				button:Show();
			else
				button:Hide();
				button.category = nil;
				text:SetText("");
			end
		end
	end
end

function AutoBar_Config_ButtonChooseCategory_OnScroll()
	GameTooltip:Hide();
	AutoBar_Config_ButtonChooseCategory_OnShow();
end

function AutoBar_Config_Button_InsertCustomItem()
	StaticPopup_Show("AUTOBAR_ITEMENTRY");
end

function AutoBar_Options_Bar_Sliders(calledfromslider)
	if (not AutoBar_Config[AutoBar_Player].display) then
		AutoBar_Config[AutoBar_Player].display = {}; 
	end
	--
	local rows, columns, gapping, alpha, width, height, dockshiftx, dockshifty;
	if (calledfromslider) then
		rows    = AutoBar_Options_Bar_Rows:GetValue();
		columns = AutoBar_Options_Bar_Columns:GetValue();
		gapping = AutoBar_Options_Bar_Gapping:GetValue();
		alpha   = AutoBar_Options_Bar_Alpha:GetValue();
		width   = AutoBar_Options_Bar_ButtonWidth:GetValue();
		height  = AutoBar_Options_Bar_ButtonHeight:GetValue();
		dockshiftx = AutoBar_Options_Bar_DockShiftX:GetValue();
		dockshifty = AutoBar_Options_Bar_DockShiftY:GetValue();
	end
	--
	if ((not rows or rows == 0) and AutoBar_Config[AutoBar_Player].display.rows) then 
		rows = AutoBar_Config[AutoBar_Player].display.rows;
	elseif (not rows or rows == 0) then 
		rows = 1; 
	end
	if ((not columns or columns == 0) and AutoBar_Config[AutoBar_Player].display.columns) then 
		columns = AutoBar_Config[AutoBar_Player].display.columns;
	elseif (not columns or columns == 0) then 
		columns = 6; 
	end
	if ((not gapping or gapping == 0) and AutoBar_Config[AutoBar_Player].display.gapping) then 
		gapping = AutoBar_Config[AutoBar_Player].display.gapping;
	elseif (not gapping or gapping == 0) then 
		gapping = 6; 
	end
	if ((not alpha or alpha == 0) and AutoBar_Config[AutoBar_Player].display.alpha) then 
		alpha = AutoBar_Config[AutoBar_Player].display.alpha*10;
	elseif (not alpha or alpha == 0) then 
		alpha = 10; 
	end
	if ((not width or width == 0) and AutoBar_Config[AutoBar_Player].display.buttonwidth) then 
		width = AutoBar_Config[AutoBar_Player].display.buttonwidth;
	elseif (not width or width == 0) then 
		width = 36; 
	end
	if ((not height or height == 0) and AutoBar_Config[AutoBar_Player].display.buttonheight) then 
		height = AutoBar_Config[AutoBar_Player].display.buttonheight;
	elseif (not height or height == 0) then 
		height = 36; 
	end
	if ((not dockshiftx or dockshiftx == 0) and AutoBar_Config[AutoBar_Player].display.dockshiftx) then 
		dockshiftx = AutoBar_Config[AutoBar_Player].display.dockshiftx;
	elseif (not dockshiftx or dockshiftx == 0) then 
		dockshiftx = 0; 
	end
	if ((not dockshifty or dockshifty == 0) and AutoBar_Config[AutoBar_Player].display.dockshifty) then 
		dockshifty = AutoBar_Config[AutoBar_Player].display.dockshifty;
	elseif (not dockshifty or dockshifty == 0) then 
		dockshifty = 0; 
	end
	--
	if (calledfromslider) then
		while (rows*columns > 12) do
			this:SetValue(this:GetValue()-1);
			rows = AutoBar_Options_Bar_Rows:GetValue();
			columns = AutoBar_Options_Bar_Columns:GetValue();
		end
		if (height ~= width and not AutoBar_Config[AutoBar_Player].display.unlockbuttonratio) then
			if (this:GetName() == "AutoBar_Options_Bar_ButtonWidth") then
				height = width;
			elseif (this:GetName() == "AutoBar_Options_Bar_ButtonHeight") then
				width = height;
			end
		end
		--
		if (rows == 1) then
			AutoBar_Config[AutoBar_Player].display.rows = nil;
		else
			AutoBar_Config[AutoBar_Player].display.rows = rows;
		end
		if (columns == 6) then
			AutoBar_Config[AutoBar_Player].display.columns = nil;
		else
			AutoBar_Config[AutoBar_Player].display.columns = columns;
		end
		if (gapping == 6) then
			AutoBar_Config[AutoBar_Player].display.gapping = nil;
		else
			AutoBar_Config[AutoBar_Player].display.gapping = gapping;
		end
		if (alpha == 10) then
			AutoBar_Config[AutoBar_Player].display.alpha = nil;
		else
			AutoBar_Config[AutoBar_Player].display.alpha = math.floor(alpha)/10;
		end
		if (width == 36) then
			AutoBar_Config[AutoBar_Player].display.buttonwidth = nil;
		else
			AutoBar_Config[AutoBar_Player].display.buttonwidth = width;
		end
		if (height == 36) then
			AutoBar_Config[AutoBar_Player].display.buttonheight = nil;
		else
			AutoBar_Config[AutoBar_Player].display.buttonheight = height;
		end
		if (dockshiftx == 0) then
			AutoBar_Config[AutoBar_Player].display.dockshiftx = nil;
		else
			AutoBar_Config[AutoBar_Player].display.dockshiftx = dockshiftx;
		end
		if (dockshifty == 0) then
			AutoBar_Config[AutoBar_Player].display.dockshifty = nil;
		else
			AutoBar_Config[AutoBar_Player].display.dockshifty = dockshifty;
		end
	end
	--
	AutoBar_Options_Bar_RowsText:SetText("Rows - "..rows);
	AutoBar_Options_Bar_Rows:SetValue(rows);
	AutoBar_Options_Bar_ColumnsText:SetText("Columns - "..columns);
	AutoBar_Options_Bar_Columns:SetValue(columns);
	AutoBar_Options_Bar_GappingText:SetText("Icon Gapping - "..gapping);
	AutoBar_Options_Bar_Gapping:SetValue(gapping);
	AutoBar_Options_Bar_AlphaText:SetText("Icon Alpha - "..math.floor(alpha)/10);
	AutoBar_Options_Bar_Alpha:SetValue(alpha);
	AutoBar_Options_Bar_ButtonWidthText:SetText("Button Width - "..width);
	AutoBar_Options_Bar_ButtonWidth:SetValue(width);
	AutoBar_Options_Bar_ButtonHeightText:SetText("Button Height - "..height);
	AutoBar_Options_Bar_ButtonHeight:SetValue(height);
	AutoBar_Options_Bar_DockShiftXText:SetText("Shift Dock Left/Right - "..dockshiftx);
	AutoBar_Options_Bar_DockShiftX:SetValue(dockshiftx);
	AutoBar_Options_Bar_DockShiftYText:SetText("Shift Dock Up/Down - "..dockshifty);
	AutoBar_Options_Bar_DockShiftY:SetValue(dockshifty);

	AutoBar_SetupVisual();
end

function AutoBar_Options_CheckBox_Setup()
	AutoBar_Options_Bar_DockingMainBarText:SetText("Docked to Main Menu");
	AutoBar_Options_Bar_WidthHeightLockedText:SetText("Lock Button Height\nand Width Together");
	AutoBar_Options_Bar_ReverseButtonsText:SetText("Reverse Buttons");
	AutoBar_Options_Bar_HideKeyTextText:SetText("Hide Keybinding Text");
	AutoBar_Options_Bar_HideCountText:SetText("Hide Count text");
	AutoBar_Options_Bar_ShowEmptyButtonsText:SetText("Show Empty Buttons");
	if (AutoBar_Config[AutoBar_Player].display.docking == "MAINMENU") then
		AutoBar_Options_Bar_DockingMainBar:SetChecked(1);
	else
		AutoBar_Options_Bar_DockingMainBar:SetChecked(0);
	end
	if (AutoBar_Config[AutoBar_Player].display.unlockbuttonratio) then
		AutoBar_Options_Bar_WidthHeightLocked:SetChecked(0);
	else
		AutoBar_Options_Bar_WidthHeightLocked:SetChecked(1);
	end
	if (AutoBar_Config[AutoBar_Player].display.reversebuttons) then
		AutoBar_Options_Bar_ReverseButtons:SetChecked(1);
	else
		AutoBar_Options_Bar_ReverseButtons:SetChecked(0);
	end
	if (AutoBar_Config[AutoBar_Player].display.hidekeytext) then
		AutoBar_Options_Bar_HideKeyText:SetChecked(1);
	else
		AutoBar_Options_Bar_HideKeyText:SetChecked(0);
	end
	if (AutoBar_Config[AutoBar_Player].display.hidecount) then
		AutoBar_Options_Bar_HideCount:SetChecked(1);
	else
		AutoBar_Options_Bar_HideCount:SetChecked(0);
	end
	if (AutoBar_Config[AutoBar_Player].display.showemptybuttons) then
		AutoBar_Options_Bar_ShowEmptyButtons:SetChecked(1);
	else
		AutoBar_Options_Bar_ShowEmptyButtons:SetChecked(0);
	end
end

function AutoBar_Options_CheckBox_OnCheck()
	local button = this:GetName(); 
	if (this:GetChecked()) then
		if (button == "AutoBar_Options_Bar_DockingMainBar") then
			AutoBar_Config[AutoBar_Player].display.docking = "MAINMENU";
		elseif (button == "AutoBar_Options_Bar_WidthHeightLocked") then
			AutoBar_Config[AutoBar_Player].display.unlockbuttonratio = nil;
		elseif (button == "AutoBar_Options_Bar_ReverseButtons") then
			AutoBar_Config[AutoBar_Player].display.reversebuttons = 1;
		elseif (button == "AutoBar_Options_Bar_HideKeyText") then
			AutoBar_Config[AutoBar_Player].display.hidekeytext = 1;
		elseif (button == "AutoBar_Options_Bar_HideCount") then
			AutoBar_Config[AutoBar_Player].display.hidecount = 1;
		elseif (button == "AutoBar_Options_Bar_ShowEmptyButtons") then
			AutoBar_Config[AutoBar_Player].display.showemptybuttons = 1;
		end
	else
		if (button == "AutoBar_Options_Bar_DockingMainBar") then
			AutoBar_Config[AutoBar_Player].display.docking = nil;
		elseif (button == "AutoBar_Options_Bar_WidthHeightLocked") then
			AutoBar_Config[AutoBar_Player].display.unlockbuttonratio = 1;
		elseif (button == "AutoBar_Options_Bar_ReverseButtons") then
			AutoBar_Config[AutoBar_Player].display.reversebuttons = nil;
		elseif (button == "AutoBar_Options_Bar_HideKeyText") then
			AutoBar_Config[AutoBar_Player].display.hidekeytext = nil;
		elseif (button == "AutoBar_Options_Bar_HideCount") then
			AutoBar_Config[AutoBar_Player].display.hidecount = nil;
		elseif (button == "AutoBar_Options_Bar_ShowEmptyButtons") then
			AutoBar_Config[AutoBar_Player].display.showemptybuttons = nil;
		end
	end
	AutoBar_Options_CheckBox_Setup();
	AutoBar_SetupVisual();
end

function AutoBar_Options_ConfigButton_Option_OnCheck()
	local num = AutoBar_Options_ConfigButton.editting; 
	local buttoninfo = AutoBar_Config[AutoBar_Player].buttons[num];
	local category;
	if (type(buttoninfo) == "table") then
		category = buttoninfo[this:GetID()];
	else
		category = buttoninfo;
	end
	if (not AutoBar_Config[AutoBar_Player].smartselfcast) then
		AutoBar_Config[AutoBar_Player].smartselfcast = {};
	end
	AutoBar_Config[AutoBar_Player].smartselfcast[category] = this:GetChecked();
	AutoBar_Config_Button_Edit();
end

function AutoBar_Options_MoveArrow_OnClick(buttonnum, direction)
	local primarybutton = AutoBar_Options_ConfigButton.editting;
	local tmp;
	if (type(AutoBar_Config[AutoBar_Player].buttons[primarybutton]) == "table") then
		if (direction == "UP") then
			tmp = AutoBar_Config[AutoBar_Player].buttons[primarybutton][buttonnum-1];
			AutoBar_Config[AutoBar_Player].buttons[primarybutton][buttonnum-1] = 
			AutoBar_Config[AutoBar_Player].buttons[primarybutton][buttonnum];
			AutoBar_Config[AutoBar_Player].buttons[primarybutton][buttonnum] = tmp;
		elseif (direction == "DOWN") then
			tmp = AutoBar_Config[AutoBar_Player].buttons[primarybutton][buttonnum+1];
			AutoBar_Config[AutoBar_Player].buttons[primarybutton][buttonnum+1] = 
			AutoBar_Config[AutoBar_Player].buttons[primarybutton][buttonnum];
			AutoBar_Config[AutoBar_Player].buttons[primarybutton][buttonnum] = tmp;
		end
	end
	AutoBar_Config_Button_Edit(primarybutton);
end

------------------------------------

function AutoBar_ToggleConfig()
	if (AutoBar_Options:IsVisible()) then
		HideUIPanel(AutoBar_Options);
	else
		ShowUIPanel(AutoBar_Options);
	end
end

