--[[

	TipBuddy: ---------
		copyright 2005 by Chester

]]

--------------------------------------------------------------------------------------------------------------------------------------
-- OPTIONS FRAME
--------------------------------------------------------------------------------------------------------------------------------------
function TipBuddy_ToggleOptionsFrame()
	if ( TipBuddy_OptionsFrame:IsVisible() ) then
		HideUIPanel(TipBuddy_OptionsFrame);
		PlaySound("gsTitleOptionExit");
		-- Check if the options frame was opened by myAddOns
--[[		if (MYADDONS_ACTIVE_OPTIONSFRAME == this) then
			ShowUIPanel(myAddOnsFrame);
		else
			ShowUIPanel(GameMenuFrame);
		end]]
	else
		TipBuddy_OptionsFrame_UpdateCheckboxes();
		TipBuddy_OptionsFrame_UpdateSliders();
		TipBuddy_OptionsFrame_UpdateColorButtons();
		TipBuddy_OptionsFrame_UpdateColorButtons_Text();
		TipBuddy_OptionsFrame_UpdateEditBoxes();

		TipBuddy_Background_ColorPick_OnLoad();

		HideUIPanel(GameMenuFrame);
		ShowUIPanel(TipBuddy_OptionsFrame);
		PlaySound("igMainMenuQuit");
	end
end

function TipBuddy_OptionsFrame_OnLoad()
	TipBuddy_OptionsFrameHeaderText:SetText("TipBuddy Options");
	TipBuddy_UpdateTabs_Initialize();
	PanelTemplates_SetNumTabs(TipBuddy_OptionsFrame_PlayersFrame, 3);
	PanelTemplates_SetNumTabs(TipBuddy_OptionsFrame_NPCsFrame, 3);
	PanelTemplates_SetNumTabs(TipBuddy_OptionsFrame_PetsFrame, 2);
	TipBuddy_HideOptionPanels();
	TipBuddy_OptionsFrame_PlayersFrame:Show();
end

function LoadTipBuddyButtonTextures(name)
	this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
	this:RegisterEvent("UPDATE_BINDINGS");
	local prefix = "Interface\\AddOns\\TipBuddy\\gfx\\UI-MicroButton-";
	this:SetNormalTexture(prefix..name.."-Up");
	this:SetPushedTexture(prefix..name.."-Down");
	this:SetDisabledTexture(prefix..name.."-Disabled");
	this:SetHighlightTexture("Interface\\Buttons\\UI-MicroButton-Hilight");
end

function TipBuddy_HideOptionPanels()
	TipBuddy_OptionsFrame_PlayersFrame:Hide();
	TipBuddy_OptionsFrame_NPCsFrame:Hide();
	TipBuddy_OptionsFrame_PetsFrame:Hide();
	TipBuddy_OptionsFrame_CORPSEFrame:Hide();
	TipBuddy_OptionsFrame_General_Options:Hide();
	TipBuddy_OptionsFrame_Anchoring_Options:Hide();
	TipBuddy_OptionsFrame_Compact_Options:Hide();
end
---------------------------------------------------------------
-- UPDATING DUE TO CHECKBOXES
---------------------------------------------------------------
function TipBuddy_OptionsFrame_UpdateGreyed()
	--[[
	if ( TB_Op_Check1:GetChecked() ) then
		TipBuddy_ToggleCheckboxFrame( TB_Op_Check1 );
	end
	if ( TB_Op_Check9:GetChecked() ) then
		TipBuddy_ToggleCheckboxFrame( TB_Op_Check9 );
	end
	if ( TB_Op_Check17:GetChecked() ) then
		TipBuddy_ToggleCheckboxFrame( TB_Op_Check17 );
	end
	if ( TB_Op_Check25:GetChecked() ) then
		TipBuddy_ToggleCheckboxFrame( TB_Op_Check25 );
	end
	if ( TB_Op_Check33:GetChecked() ) then
		TipBuddy_ToggleCheckboxFrame( TB_Op_Check33 );
	end
	if ( TB_Op_Check41:GetChecked() ) then
		TipBuddy_ToggleCheckboxFrame( TB_Op_Check41 );
	end
	if ( TB_Op_Check49:GetChecked() ) then
		TipBuddy_ToggleCheckboxFrame( TB_Op_Check49 );
	end]]
	if ( TB_Op_Check57:GetChecked() ) then
		TB_Op_Check61:Disable();
		getglobal("TB_Op_Check61Text"):SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
	else
		TB_Op_Check61:Enable();
		getglobal("TB_Op_Check61Text"):SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
	end
end

function TipBuddy_OptionsFrame_UpdateCheckboxes()
	for index, value in TB_Op_Checks do
		local button = getglobal( value.frame );
		local string = getglobal( value.frame.."Text");

		if (not button) then
			return;
		end

		local tipTable = TipBuddy_SavedVars[value.type];
		----TB_AddMessage(value.type);
		button:SetChecked( tipTable[value.var] );

		string:SetText( TEXT(value.text) );
		button.tooltipText = value.tooltipText;
		button.tooltipRequirement = value.tooltipRequirement;
		button.gxRestart = value.gxRestart;
		button.restartClient = value.restartClient;

		if ( button.disabled ) then
			button:Disable();
			string:SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
		else
			button:Enable();
			string:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
		end
	end
end

function TipBuddy_OptionsFrame_UpdateSliders()
	for index, value in TipBuddy_OptionsFrame_Sliders do
		local slider = getglobal("TipBuddy_OptionsFrame_Slider"..index);
		local string = getglobal("TipBuddy_OptionsFrame_Slider"..index.."Text");
		local high = getglobal("TipBuddy_OptionsFrame_Slider"..index.."High");
		local low = getglobal("TipBuddy_OptionsFrame_Slider"..index.."Low");

		TipBuddy_OptionsFrame_SliderCalcEnabled( slider );

		if (index == 1) then
			low:SetText( "Small" );
			high:SetText( "Large" );			
		else
			low:SetText( value.minValue );
			high:SetText( value.maxValue );			
		end

		local tipTable = TipBuddy_SavedVars["general"];

		slider:SetMinMaxValues(value.minValue, value.maxValue);
		slider:SetValueStep(value.valueStep);

		slider:SetValue( tipTable[value.var] );

		string:SetText(TEXT(value.text));
		slider.tooltipText = value.tooltipText;
		slider.tooltipRequirement = value.tooltipRequirement;
		slider.gxRestart = value.gxRestart;
		slider.restartClient = value.restartClient;
	end
end

function TipBuddy_OptionsFrame_SliderCalcEnabled( slider )
	local thumb = getglobal(slider:GetName().."Thumb");
	local string = getglobal(slider:GetName().."Text");
	local updatetext = getglobal(slider:GetName().."TextUpdate");
	local high = getglobal(slider:GetName().."High");
	local low = getglobal(slider:GetName().."Low");
	if ( slider.disabled ) then
		slider:EnableMouse(0);
		thumb:Hide();
		string:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
		updatetext:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
		low:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
		high:SetVertexColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
	else
		slider:EnableMouse(1);
		thumb:Show();
		string:SetVertexColor(NORMAL_FONT_COLOR.r , NORMAL_FONT_COLOR.g , NORMAL_FONT_COLOR.b);
		updatetext:SetVertexColor(NORMAL_FONT_COLOR.r , NORMAL_FONT_COLOR.g , NORMAL_FONT_COLOR.b);
		low:SetVertexColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
		high:SetVertexColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
	end
end

function TipBuddy_OptionsFrame_UpdateEditBoxes()
	for index, value in TB_EditBoxes do
		local editbox = getglobal( value.frame );
		--local string = getglobal( value.frame.."Text");

		if (not editbox) then
			return;
		end

		local tipTable = TipBuddy_SavedVars[value.type];
		----TB_AddMessage(value.type);
		if (not tipTable[value.var]) then
			DEFAULT_CHAT_FRAME:AddMessage("|cff3366ffSETTING BLANK VAR with: "..TEXT(value.type));
			tipTable[value.var] = "";
		end
		editbox:SetText( tipTable[value.var] );
	end
end

function TipBuddy_OptionsFrame_UpdateDropDowns()
	OptionsFrame_EnableDropDown(UIOptionsFrameClickCameraDropDown);
end

---------------------------------------------------------------
-- TOGGLING ALL CHECKBOXES WHEN DISABLE ALL
---------------------------------------------------------------
function TipBuddy_ToggleCheckboxFrame( checkBox )
	local button = getglobal( checkBox:GetName() );
	local boxId = button:GetID();

--	--TB_AddMessage(button:GetID());

	if ( button:GetChecked() ) then
		for i=1, 7, 1 do
			local boxName = getglobal( "TB_Op_Check"..(boxId + i) );
			if (boxName == 0) then
				return;				
			end
			TipBuddy_DisableCheckBox(boxName);
		end
	else
		for i=1, 7, 1 do
			local boxName = getglobal( "TB_Op_Check"..(boxId + i) );
			if (boxName == 0) then
				return;				
			end
			TipBuddy_EnableCheckBox(boxName);
		end
	end
end

function TipBuddy_DisableCheckBox(checkBox)
--	checkBox:SetChecked(0);
	checkBox:Disable();
	getglobal(checkBox:GetName().."Text"):SetTextColor(GRAY_FONT_COLOR.r, GRAY_FONT_COLOR.g, GRAY_FONT_COLOR.b);
end

function TipBuddy_EnableCheckBox(checkBox, checked)
--	if ( checkBox:GetChecked() ) then
--		return;
--	end
--	checkBox:SetChecked(checked);
	checkBox:Enable();
	getglobal(checkBox:GetName().."Text"):SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
end

function TipBuddy_UpdateTabs_Initialize()
--	local frame = getglobal( this:GetName() );
--	PanelTemplates_SetTab( TipBuddy_OptionsFrame_PlayersFrame, 1 );
	TipBuddy_OptionsFrame_PCFriend_Options:Show();
	TipBuddy_OptionsFrame_PCEnemy_Options:Hide();
	TipBuddy_OptionsFrame_PCParty_Options:Hide();

	TipBuddy_OptionsFrame_NPCFriend_Options:Show();
	TipBuddy_OptionsFrame_NPCNeutral_Options:Hide();
	TipBuddy_OptionsFrame_NPCEnemy_Options:Hide();

	TipBuddy_OptionsFrame_PETFriend_Options:Show();
	TipBuddy_OptionsFrame_PETEnemy_Options:Hide();

	TipBuddy_OptionsFrame_CORPSE_Options:Show();
end


function TipBuddy_PlayersFrameTab_OnClick(index)
	if ( not index ) then
		index = this:GetID();
	end
--	local frame = getglobal( this:GetName() );
	PanelTemplates_SetTab( TipBuddy_OptionsFrame_PlayersFrame, index );
	TipBuddy_OptionsFrame_PCFriend_Options:Hide();
	TipBuddy_OptionsFrame_PCEnemy_Options:Hide();
	TipBuddy_OptionsFrame_PCParty_Options:Hide();
	PlaySound("igCharacterInfoTab");
	if ( index == 1 ) then
		-- Friendly
		TipBuddy_OptionsFrame_PCFriend_Options:Show();
	elseif ( index == 2 ) then
		-- Enemy
		TipBuddy_OptionsFrame_PCParty_Options:Show();
	elseif ( index == 3 ) then
		-- InParty
		TipBuddy_OptionsFrame_PCEnemy_Options:Show();
	end
end

function TipBuddy_NPCsFrameTab_OnClick(index)
	if ( not index ) then
		index = this:GetID();
	end
--	local frame = getglobal( this:GetName() );
	PanelTemplates_SetTab( TipBuddy_OptionsFrame_NPCsFrame, index );
	TipBuddy_OptionsFrame_NPCFriend_Options:Hide();
	TipBuddy_OptionsFrame_NPCNeutral_Options:Hide();
	TipBuddy_OptionsFrame_NPCEnemy_Options:Hide();
	PlaySound("igCharacterInfoTab");
	if ( index == 1 ) then
		-- Friendly
		TipBuddy_OptionsFrame_NPCFriend_Options:Show();
	elseif ( index == 2 ) then
		-- Neutral
		TipBuddy_OptionsFrame_NPCNeutral_Options:Show();
	elseif ( index == 3 ) then
		-- Enemy
		TipBuddy_OptionsFrame_NPCEnemy_Options:Show();
	end
end

function TipBuddy_PetsFrameTab_OnClick(index)
	if ( not index ) then
		index = this:GetID();
	end
--	local frame = getglobal( this:GetName() );
	PanelTemplates_SetTab( TipBuddy_OptionsFrame_PetsFrame, index );
	TipBuddy_OptionsFrame_PETFriend_Options:Hide();
	TipBuddy_OptionsFrame_PETEnemy_Options:Hide();
	PlaySound("igCharacterInfoTab");
	if ( index == 1 ) then
		-- Friendly
		TipBuddy_OptionsFrame_PETFriend_Options:Show();
	elseif ( index == 2 ) then
		-- InParty
		TipBuddy_OptionsFrame_PETEnemy_Options:Show();
	end
end

function TipBuddy_OptionsFrameTab_OnClick(index)
	if ( not index ) then
		index = this:GetID();
	end
--	local frame = getglobal( this:GetName() );
	--PanelTemplates_SetTab( TipBuddy_OptionsFrame_PlayersFrame, index );
	TipBuddy_OptionsFrame_General_Options:Hide();
	TipBuddy_OptionsFrame_Compact_Options:Hide();
	PlaySound("igCharacterInfoTab");
	if ( index == 1 ) then
		TipBuddy_OptionsFrame_General_Options:Show();
		TipBuddy_OptionsFrame_GeneralOptionsTitleText:SetTextColor(1.0, 1.0, 1.0);
		TipBuddy_OptionsFrame_CompactOptionsTitleText:SetTextColor(0.3, 0.3, 0.1);
	elseif ( index == 2 ) then
		TipBuddy_OptionsFrame_Compact_Options:Show();
		TipBuddy_OptionsFrame_CompactOptionsTitleText:SetTextColor(1.0, 1.0, 1.0);
		TipBuddy_OptionsFrame_GeneralOptionsTitleText:SetTextColor(0.3, 0.3, 0.1);
	end
end

--------------------------------------------------------------------------------------------------------------------------------------
-- FRAME BACKGROUND COLOR PICKER
--------------------------------------------------------------------------------------------------------------------------------------
function TipBuddy_Background_ColorPick_OnLoad()
	cInfo = {};
end

function TipBuddy_Background_ColorPick( button )

	local name = getglobal( button:GetName() );
	local id = name:GetID();
	cInfo.type = TipBuddy_ColorPicker_Buttons[id].type;
	cInfo.var = TipBuddy_ColorPicker_Buttons[id].var;

	local targettype = TipBuddy_SavedVars[cInfo.type][cInfo.var];	
	if (not targettype) then
		TipBuddy_SavedVars[cInfo.type][cInfo.var] = { ["r"] = 0.8, ["g"] = 0.8, ["b"] = 0.9, ["a"] = 1, };
		targettype = TipBuddy_SavedVars[value.type][value.var];	
	end
--TB_AddMessage("frame: "..button:GetName());
--TB_AddMessage("type: "..TEXT(cInfo.type));
	TBColorPickerFrame.func = TipBuddy_Background_SetColor;
	TBColorPickerFrame.hasOpacity = 1;
	TBColorPickerFrame.opacityFunc = TipBuddy_Background_SetOpacity;
	TBColorPickerFrame.cancelFunc = TipBuddy_Background_Cancel;

	TBColorPickerFrame:SetColorRGB( targettype.r, targettype.g, targettype.b);
	TBColorPickerFrame.opacity = (1- targettype.a);
	TBColorPickerFrame.previousValues = {r=targettype.r, g=targettype.g, b=targettype.b, opacity=targettype.a};

	ShowUIPanel(TBColorPickerFrame);
	--TB_AddMessage("just passed ShowUIPanel");
end

function TipBuddy_Text_ColorPick( button )

	local name = getglobal( button:GetName() );
	local id = name:GetID();
	cInfo.type = TipBuddy_ColorPicker_Buttons_Text[id].type;
	cInfo.var = TipBuddy_ColorPicker_Buttons_Text[id].var;

	local targettype = TipBuddy_SavedVars[cInfo.type][cInfo.var];	

----TB_AddMessage("frame: "..cInfo.name);
----TB_AddMessage("type: "..type);
	TBColorPickerFrame_Text.func = TipBuddy_Background_SetColor_Text;
	--TBColorPickerFrame_Text.hasOpacity = 1;
	--TBColorPickerFrame_Text.opacityFunc = TipBuddy_Background_SetOpacity;
	TBColorPickerFrame_Text.cancelFunc = TipBuddy_Background_Cancel;

	TBColorPickerFrame_Text:SetColorRGB( targettype.r, targettype.g, targettype.b);
	--TBColorPickerFrame_Text.opacity = (1- targettype.bgcolor.a);
	TBColorPickerFrame_Text.previousValues = {r=targettype.r, g=targettype.g, b=targettype.b, opacity=targettype.a};

	ShowUIPanel(TBColorPickerFrame_Text);
	--TB_AddMessage("just passed ShowUIPanel");
end

function TipBuddy_OptionsFrame_UpdateColorButtons()
	for index, value in TipBuddy_ColorPicker_Buttons do
		--TB_AddMessage(getn(TipBuddy_ColorPicker_Buttons));
		--TB_AddMessage(index);
		local button = getglobal( value.frame );
		local swatch = getglobal( value.frame.."NormalTexture");
		local string = getglobal( value.frame.."Text");
--		local type = getglobal( value.type );
		--TB_AddMessage("Color: ["..value.type.."]["..value.var.."]");
		
		if (not button) then
			return;
		end
			
		local targettype = TipBuddy_SavedVars[value.type][value.var];

		if (not targettype) then
			TipBuddy_SavedVars[value.type][value.var] = { ["r"] = 0.8, ["g"] = 0.8, ["b"] = 0.9, ["a"] = 1, };
			targettype = TipBuddy_SavedVars[value.type][value.var];	
		end

		string:SetText(TEXT(value.text));
		if (value.text) then
			----TB_AddMessage("frame:"..TEXT(value.frame).."colorbutton text: "..value.text);	
		end
		button.tooltipText = value.tooltipText;
		button.tooltipRequirement = value.tooltipRequirement;
		swatch:SetVertexColor( targettype.r, targettype.g, targettype.b );
		if (index < 10 or index == 21) then
			if (button:IsVisible()) then
				button:GetParent():SetBackdropColor( targettype.r, targettype.g, targettype.b, TB_NoNegative(targettype.a-0.2) );				
			else
				button:GetParent():SetBackdropColor( 0.2, 0.2, 0.2, 1 );								
			end
		elseif (index > 10 and index < 20 or index == 22) then
			if (button:IsVisible()) then
				button:GetParent():SetBackdropBorderColor( targettype.r, targettype.g, targettype.b, TB_NoNegative(targettype.a-0.2) );
			else
				button:GetParent():SetBackdropBorderColor( 0.8, 0.8, 0.9, 1 );
			end
		end

	end
end

function TipBuddy_OptionsFrame_UpdateColorButtons_Text()
	for index, value in TipBuddy_ColorPicker_Buttons_Text do
		local button = getglobal( value.frame );
		local swatch = getglobal( value.frame.."NormalTexture");
		local string = getglobal( value.frame.."Text");
--		local type = getglobal( value.type );
		----TB_AddMessage("Color: ["..value.type.."]["..value.var.."]");
		
		if (not button) then
			return;
		end
			
		local targettype = TipBuddy_SavedVars[value.type][value.var];

		string:SetText(TEXT(value.text));
		button.tooltipText = value.tooltipText;
		button.tooltipRequirement = value.tooltipRequirement;
		swatch:SetVertexColor( targettype.r, targettype.g, targettype.b );
		string:SetTextColor(targettype.r, targettype.g, targettype.b);
	end
end


function TipBuddy_Background_SetColor()
	local targettype = TipBuddy_SavedVars[cInfo.type][cInfo.var];

	local r,g,b = TBColorPickerFrame:GetColorRGB();
--	TipBuddy_Main_Frame:SetBackdropColor(r, g, b);

	if (not targettype) then
		TipBuddy_SavedVars[cInfo.type][cInfo.var] = {};
		targettype = TipBuddy_SavedVars[cInfo.type][cInfo.var];
	end
	targettype.r = r;
	targettype.g = g;
	targettype.b = b;		
end

function TipBuddy_Background_SetColor_Text()
	local targettype = TipBuddy_SavedVars[cInfo.type][cInfo.var];

	local r,g,b = TBColorPickerFrame_Text:GetColorRGB();
--	TipBuddy_Main_Frame:SetBackdropColor(r, g, b);

	targettype.r = r;
	targettype.g = g;
	targettype.b = b;		
end

function TipBuddy_Background_SetOpacity()
	local targettype = TipBuddy_SavedVars[cInfo.type][cInfo.var];

	local alpha = 1.0 - TBOpacitySliderFrame:GetValue();
	if (not targettype) then
		targettype = {};
	end
	targettype.a = (1- TBOpacitySliderFrame:GetValue());
end

function TipBuddy_Background_Cancel(previousValues)
	local targettype = TipBuddy_SavedVars[cInfo.type][cInfo.var];

	if (not targettype) then
		targettype = {};
	end
	if (previousValues.r and previousValues.g and previousValues.b) then
		targettype.r = previousValues.r;
		targettype.g = previousValues.g;
		targettype.b = previousValues.b;
	end
	if (previousValues.opacity) then
		local alpha = 1.0 - previousValues.opacity;
		targettype.a = previousValues.opacity;
	end
end


TipBuddy_CursorPos = {
	[1] = "Top",
	[2] = "Right",
	[3] = "Left",
	[4] = "Bottom", 
};

function TipBuddy_CursorPosDropDown_OnLoad()
	UIDropDownMenu_Initialize(this, TipBuddy_CursorPosDropDown_Initialize);
	UIDropDownMenu_SetSelectedValue(this, TipBuddy_SavedVars["general"].cursorpos);
	UIDropDownMenu_SetWidth(120, TipBuddy_CursorPosDropDown);
end

function TipBuddy_CursorPosDropDown_OnClick()
	UIDropDownMenu_SetSelectedValue(TipBuddy_CursorPosDropDown, this.value);
	TipBuddy.xpoint, TipBuddy.xpos, TipBuddy.ypos = TipBuddy_GetFrameCursorOffset();
	TipBuddy.anchor, TipBuddy.fanchor, TipBuddy.offset = TipBuddy_GetFrameAnchorPos();
	if (TipBuddy_SavedVars["general"].anchored == 1) then
		TipBuddy_Parent_Frame:SetPoint(TipBuddy.anchor, "TipBuddy_Header_Frame", TipBuddy.fanchor, 0, 0);
	end
	TipBuddy_SetFrame_Anchor( TipBuddy_Main_Frame );
	GameTooltip_SetDefaultAnchor(GameTooltip, UIParent);
end

function TipBuddy_CursorPosDropDown_Initialize()
	local selectedValue = UIDropDownMenu_GetSelectedValue(TipBuddy_CursorPosDropDown);
	local info;

	info = {};
	info.text = TipBuddy_CursorPos[1];
	info.func = TipBuddy_CursorPosDropDown_OnClick;
	info.value = "Top";
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Postion the tooltip ABOVE your cursor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_CursorPos[2];
	info.func = TipBuddy_CursorPosDropDown_OnClick;
	info.value = "Right";
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Position the tooltip to the RIGHT of your cursor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_CursorPos[3];
	info.func = TipBuddy_CursorPosDropDown_OnClick;
	info.value = "Left";
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Position the tooltip to the LEFT of your cursor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_CursorPos[4];
	info.func = TipBuddy_CursorPosDropDown_OnClick;
	info.value = "Bottom";
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Position the tooltip BELOW your cursor";
	UIDropDownMenu_AddButton(info);
end

--non-unit tips
TipBuddy_NonUnitTipPos = {
	[1] = "Cursor",
	[2] = "TipBuddyAnchor",
	[3] = "Smart Anchor", 
};

function TipBuddy_NonUnitTipPosDropDown_OnLoad()
	UIDropDownMenu_Initialize(this, TipBuddy_NonUnitTipPosDropDown_Initialize);
	UIDropDownMenu_SetSelectedValue(this, TipBuddy_SavedVars["general"].nonunit_anchor);
	UIDropDownMenu_SetWidth(120, TipBuddy_NonUnitTipPosDropDown);
end

function TipBuddy_NonUnitTipPosDropDown_OnClick()
	UIDropDownMenu_SetSelectedValue(TipBuddy_NonUnitTipPosDropDown, this.value);
	TipBuddy.xpoint, TipBuddy.xpos, TipBuddy.ypos = TipBuddy_GetFrameCursorOffset();
	TipBuddy.anchor, TipBuddy.fanchor, TipBuddy.offset = TipBuddy_GetFrameAnchorPos();
	GameTooltip_SetDefaultAnchor(GameTooltip, UIParent);
	--if (UIDropDownMenu_GetSelectedValue(TipBuddy_NonUnitTipPosDropDown)) then
		TipBuddy_SavedVars["general"].nonunit_anchor = this.value;	
	--end
	--/script DEFAULT_CHAT_FRAME:AddMessage(UIDropDownMenu_GetSelectedValue(TipBuddy_NonUnitTipPosDropDown));
	--/script DEFAULT_CHAT_FRAME:AddMessage(TipBuddy_SavedVars["general"].nonunit_anchor);
end

function TipBuddy_NonUnitTipPosDropDown_Initialize()
	local selectedValue = UIDropDownMenu_GetSelectedValue(TipBuddy_NonUnitTipPosDropDown);
	local info;

	info = {};
	info.text = TipBuddy_NonUnitTipPos[1];
	info.func = TipBuddy_NonUnitTipPosDropDown_OnClick;
	info.value = 0;
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Non-Unit tooltips will\nfollow the cursor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_NonUnitTipPos[2];
	info.func = TipBuddy_NonUnitTipPosDropDown_OnClick;
	info.value = 1;
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Non-Unit tooltips will\nattach themselves to\nthe TipBuddyAnchor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_NonUnitTipPos[3];
	info.func = TipBuddy_NonUnitTipPosDropDown_OnClick;
	info.value = 2;
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Non-Unit tooltips will attempt to\nattach themselves to the button\nor object you have your mouse\nover in a smart position";
	UIDropDownMenu_AddButton(info);

end

--Tooltip Style (Compact, Default, Advanced)
TipBuddy_TipStyle = {
	[1] = "Default Mode",
	[2] = "Compact Mode",
	[3] = "Advanced Mode", 
};

function TipBuddy_TipStyleDropDown_OnLoad( type )
	this.type = type;
	if (not TipBuddy_SavedVars[this.type].off) then
		TipBuddy_SavedVars[this.type].off = 0;	
	end
	--TB_AddMessage( this.type.." : "..TipBuddy_SavedVars[this.type].off );
	----TB_AddMessage( this.type );
	UIDropDownMenu_Initialize(this, TipBuddy_TipStyleDropDown_Initialize, nil, this.type );
	UIDropDownMenu_SetSelectedValue(this, TipBuddy_SavedVars[this.type].off);
	UIDropDownMenu_SetWidth(120, TipBuddy_TipStyleDropDown);
	TipBuddy_TipStyleDropDown_SetFrameVisibility(this, TipBuddy_SavedVars[this.type].off);
	--/script DEFAULT_CHAT_FRAME:AddMessage(UIDropDownMenu_GetSelectedValue(TB_NPCNeutral_TipStyleDropDown));
end

function TipBuddy_TipStyleDropDown_OnClick()
	--TB_AddMessage( this.owner:GetName() );
	UIDropDownMenu_SetSelectedValue(this.owner, this.value);
	TipBuddy_SavedVars[this.owner.type].off = UIDropDownMenu_GetSelectedValue(this.owner);
	TipBuddy_TipStyleDropDown_SetFrameVisibility(this.owner, this.value)
end

function TB_TipStyle_OptionsToggleFrames( value, type, colornum )
	if (value == 0) then
			getglobal("TipBuddy_OptionsFrame_"..type.."_Options_Checks"):Show();
			getglobal("TipBuddy_OptionsFrame_"..type.."_Options_EB"):Hide();
			getglobal("TB_"..type.."_BDBColorDropDown"):Show();
			TipBuddy_BDBColorDropDown_SetFrameVisibility(getglobal("TB_"..type.."_BDBColorDropDown"), UIDropDownMenu_GetSelectedValue(getglobal("TB_"..type.."_BDBColorDropDown")));		
	elseif (value == 1) then
			getglobal("TipBuddy_OptionsFrame_"..type.."_Options_Checks"):Show();
			getglobal("TipBuddy_OptionsFrame_"..type.."_Options_EB"):Hide();
			getglobal("TB_"..type.."_BDBColorDropDown"):Hide();
			getglobal("TipBuddy_OptionsFrame_ColorPicker"..colornum):Hide();
			getglobal("TipBuddy_OptionsFrame_"..type.."_Options"):SetBackdropBorderColor(0, 0, 0, 1);
	else
			getglobal("TipBuddy_OptionsFrame_"..type.."_Options_Checks"):Hide();
			getglobal("TipBuddy_OptionsFrame_"..type.."_Options_EB"):Show();
			getglobal("TB_"..type.."_BDBColorDropDown"):Show();
			TipBuddy_BDBColorDropDown_SetFrameVisibility(getglobal("TB_"..type.."_BDBColorDropDown"), UIDropDownMenu_GetSelectedValue(getglobal("TB_"..type.."_BDBColorDropDown")));
	end
end


function TipBuddy_TipStyleDropDown_SetFrameVisibility(frame, value)
	if (frame.type == "pc_friend") then
		TB_TipStyle_OptionsToggleFrames( value, "PCFriend", 11 );
	elseif (frame.type == "pc_party") then
		TB_TipStyle_OptionsToggleFrames( value, "PCParty", 12 );
	elseif (frame.type == "pc_enemy") then
		TB_TipStyle_OptionsToggleFrames( value, "PCEnemy", 13 );
	elseif (frame.type == "npc_friend") then
		TB_TipStyle_OptionsToggleFrames( value, "NPCFriend", 14 );
	elseif (frame.type == "npc_neutral") then
		TB_TipStyle_OptionsToggleFrames( value, "NPCNeutral", 15 );
	elseif (frame.type == "npc_enemy") then
		TB_TipStyle_OptionsToggleFrames( value, "NPCEnemy", 16 );
	elseif (frame.type == "pet_friend") then
		TB_TipStyle_OptionsToggleFrames( value, "PETFriend", 17 );
	elseif (frame.type == "pet_enemy") then
		TB_TipStyle_OptionsToggleFrames( value, "PETEnemy", 18 );
	elseif (frame.type == "corpse") then
		TB_TipStyle_OptionsToggleFrames( value, "CORPSE", 20 );
	else	
	end		
end

function TipBuddy_TipStyleDropDown_Initialize()
	local selectedValue = UIDropDownMenu_GetSelectedValue(this);
	local info;

	info = {};
	info.text = TipBuddy_TipStyle[1];
	info.func = TipBuddy_TipStyleDropDown_OnClick;
	info.value = 0;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Default mode is similar\nto Blizzard's default tooltips,\nbut much more customizable";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_TipStyle[2];
	info.func = TipBuddy_TipStyleDropDown_OnClick;
	info.value = 1;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Compact Mode has a \ncleaner, smaller style.";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_TipStyle[3];
	info.func = TipBuddy_TipStyleDropDown_OnClick;
	info.value = 2;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "For Advanced Users only.";
	UIDropDownMenu_AddButton(info);

end

--Tooltip Backdrop Colors
TipBuddy_BDColor = {
	[1] = "Custom",
	[2] = "Difficulty",
	[3] = "Reaction", 
};

function TipBuddy_BDColorDropDown_OnLoad( type )
	this.type = type;
	if (not TipBuddy_SavedVars[type].c_bdp) then
		TipBuddy_SavedVars[type].c_bdp = 0;	
	end
	--TB_AddMessage( this.type.." : "..TipBuddy_SavedVars[this.type].c_bdp );
	----TB_AddMessage( this.type );
	UIDropDownMenu_Initialize(this, TipBuddy_BDColorDropDown_Initialize, nil, this.type );
	UIDropDownMenu_SetSelectedValue(this, TipBuddy_SavedVars[this.type].c_bdp);
	UIDropDownMenu_SetWidth(110, TipBuddy_BDColorDropDown);
	TipBuddy_BDColorDropDown_SetFrameVisibility(this, TipBuddy_SavedVars[this.type].c_bdp)
end

function TipBuddy_BDColorDropDown_OnClick()
	--TB_AddMessage( this.owner:GetName().." : "..this.owner.type.." : "..this.value );
	UIDropDownMenu_SetSelectedValue(this.owner, this.value);
	TipBuddy_SavedVars[this.owner.type].c_bdp = this.value;
	TipBuddy_BDColorDropDown_SetFrameVisibility(this.owner, this.value)
end

function TipBuddy_BDColorDropDown_SetFrameVisibility(frame, value)
	local button;
	if (value == 0) then
		if (frame.type == "pc_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker1;
		elseif (frame.type == "pc_party") then
			button = TipBuddy_OptionsFrame_ColorPicker2;
		elseif (frame.type == "pc_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker3;
		elseif (frame.type == "npc_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker4;
		elseif (frame.type == "npc_neutral") then
			button = TipBuddy_OptionsFrame_ColorPicker5;
		elseif (frame.type == "npc_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker6;
		elseif (frame.type == "pet_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker7;
		elseif (frame.type == "pet_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker8;
		elseif (frame.type == "corpse") then
			button = TipBuddy_OptionsFrame_ColorPicker10;
		else	
			return;
		end
		button:Show();
		local targettype = TipBuddy_SavedVars[frame.type]["bgcolor"];
		if (not targettype) then
			TipBuddy_SavedVars[value.type]["bgcolor"] = { ["r"] = 0.8, ["g"] = 0.8, ["b"] = 0.9, ["a"] = 1, };
			targettype = TipBuddy_SavedVars[frame.type]["bgcolor"];	
		end		
		button:GetParent():SetBackdropColor(targettype.r, targettype.g, targettype.b, TB_NoNegative(targettype.a-0.2));
		--button:GetParent():SetBackdropBorderColor(targettype.r, targettype.g, targettype.b, TB_NoNegative(targettype.a-0.2));
	else
		if (frame.type == "pc_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker1;	
		elseif (frame.type == "pc_party") then
			button = TipBuddy_OptionsFrame_ColorPicker2;
		elseif (frame.type == "pc_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker3;
		elseif (frame.type == "npc_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker4;
		elseif (frame.type == "npc_neutral") then
			button = TipBuddy_OptionsFrame_ColorPicker5;
		elseif (frame.type == "npc_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker6;
		elseif (frame.type == "pet_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker7;
		elseif (frame.type == "pet_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker8;
		elseif (frame.type == "corpse") then
			button = TipBuddy_OptionsFrame_ColorPicker10;
		else	
			return;
		end	
		button:Hide();
		button:GetParent():SetBackdropColor(0.2, 0.2, 0.2, 1);
		--button:GetParent():SetBackdropBorderColor(0.8, 0.8, 0.9, 1);
	end
end

function TipBuddy_BDColorDropDown_Initialize()
	local selectedValue = UIDropDownMenu_GetSelectedValue(this);
	local info;

	info = {};
	info.text = TipBuddy_BDColor[1];
	info.func = TipBuddy_BDColorDropDown_OnClick;
	info.value = 0;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Choose your custom color by\nclicking the box to the right.";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_BDColor[2];
	info.func = TipBuddy_BDColorDropDown_OnClick;
	info.value = 1;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Color will be determined\nby the unit's difficulty\n(red, yellow, grey, etc).";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_BDColor[3];
	info.func = TipBuddy_BDColorDropDown_OnClick;
	info.value = 2;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Color is determined by th\n unit's reaction towards you.";
	UIDropDownMenu_AddButton(info);

end

--Tooltip Backdrop BORDER Colors
TipBuddy_BDBColor = {
	[1] = "Custom",
	[2] = "Difficulty",
	[3] = "Reaction", 
};

function TipBuddy_BDBColorDropDown_OnLoad( type )
	this.type = type;
	if (not TipBuddy_SavedVars[this.type].c_bdb) then
		TipBuddy_SavedVars[this.type].c_bdb = 0;	
	end
	--TB_AddMessage( this.type.." : "..TipBuddy_SavedVars[this.type].c_bdb );
	----TB_AddMessage( this.type );
	UIDropDownMenu_Initialize(this, TipBuddy_BDBColorDropDown_Initialize, nil, this.type );
	UIDropDownMenu_SetSelectedValue(this, TipBuddy_SavedVars[this.type].c_bdb);
	UIDropDownMenu_SetWidth(110, TipBuddy_BDBColorDropDown);
	TipBuddy_BDBColorDropDown_SetFrameVisibility(this, TipBuddy_SavedVars[this.type].c_bdb)
end

function TipBuddy_BDBColorDropDown_OnClick()
	--TB_AddMessage( this.owner:GetName() );
	UIDropDownMenu_SetSelectedValue(this.owner, this.value);
	TipBuddy_SavedVars[this.owner.type].c_bdb = this.value;
	TipBuddy_BDBColorDropDown_SetFrameVisibility(this.owner, this.value)
end

function TipBuddy_BDBColorDropDown_SetFrameVisibility(frame, value)
	local button;
	if (value == 0) then
		if (frame.type == "pc_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker11;	
		elseif (frame.type == "pc_party") then
			button = TipBuddy_OptionsFrame_ColorPicker12;
		elseif (frame.type == "pc_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker13;
		elseif (frame.type == "npc_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker14;
		elseif (frame.type == "npc_neutral") then
			button = TipBuddy_OptionsFrame_ColorPicker15;
		elseif (frame.type == "npc_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker16;
		elseif (frame.type == "pet_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker17;
		elseif (frame.type == "pet_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker18;
		elseif (frame.type == "corpse") then
			button = TipBuddy_OptionsFrame_ColorPicker20;
		else	
		end		
		button:Show();
		local targettype = TipBuddy_SavedVars[frame.type]["bgbcolor"];
		if (not targettype) then
			TipBuddy_SavedVars[value.type]["bgbcolor"] = { ["r"] = 0.8, ["g"] = 0.8, ["b"] = 0.9, ["a"] = 1, };
			targettype = TipBuddy_SavedVars[frame.type]["bgbcolor"];	
		end		
		button:GetParent():SetBackdropBorderColor(targettype.r, targettype.g, targettype.b, TB_NoNegative(targettype.a-0.2));
	else
		if (frame.type == "pc_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker11;	
		elseif (frame.type == "pc_party") then
			button = TipBuddy_OptionsFrame_ColorPicker12;
		elseif (frame.type == "pc_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker13;
		elseif (frame.type == "npc_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker14;
		elseif (frame.type == "npc_neutral") then
			button = TipBuddy_OptionsFrame_ColorPicker15;
		elseif (frame.type == "npc_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker16;
		elseif (frame.type == "pet_friend") then
			button = TipBuddy_OptionsFrame_ColorPicker17;
		elseif (frame.type == "pet_enemy") then
			button = TipBuddy_OptionsFrame_ColorPicker18;
		elseif (frame.type == "corpse") then
			button = TipBuddy_OptionsFrame_ColorPicker20;
		else	
		end
		button:Hide();
		button:GetParent():SetBackdropBorderColor(0.8, 0.8, 0.9, 1);
	end
end

function TipBuddy_BDBColorDropDown_Initialize()
	local selectedValue = UIDropDownMenu_GetSelectedValue(this);
	local info;

	info = {};
	info.text = TipBuddy_BDBColor[1];
	info.func = TipBuddy_BDBColorDropDown_OnClick;
	info.value = 0;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Choose your custom color by\nclicking the box to the right.";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_BDBColor[2];
	info.func = TipBuddy_BDBColorDropDown_OnClick;
	info.value = 1;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Color will be determined\nby the unit's difficulty\n(red, yellow, grey, etc).";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_BDBColor[3];
	info.func = TipBuddy_BDBColorDropDown_OnClick;
	info.value = 2;
	info.owner = this:GetParent();
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Color is determined by th\n unit's reaction towards you.";
	UIDropDownMenu_AddButton(info);

end

---------------------------------------------------------------
-- SAVING FRAME POSITION AFTER DRAGGED
---------------------------------------------------------------
-- this function is called when the frame should be dragged around
function TipBuddy_OnMouseDown(arg1)
	if (arg1 == "LeftButton") then
		TipBuddy_Header_Frame:StartMoving();
	end
end

-- this function is called when the frame is stopped being dragged around
function TipBuddy_OnMouseUp(arg1)
	if (arg1 == "LeftButton") then
		TipBuddy_Header_Frame:StopMovingOrSizing();

		ValidateFramePosition(this, -10);
		
		-- save the position 
		TipBuddy_SavedVars["general"].framepos_L = TipBuddy_Header_Frame:GetLeft();
		TipBuddy_SavedVars["general"].framepos_T = TipBuddy_Header_Frame:GetTop();


	end

	-- If Rightclick bring up the options menu
	if ( arg1 == "RightButton" ) then
		ToggleDropDownMenu(1, TipBuddy_SavedVars["general"].anchor_pos, TipBuddy_Header_FrameDropDown, this:GetName(), 0, 0);
		UIDropDownMenu_SetSelectedValue(this, TipBuddy_SavedVars["general"].anchor_pos);
		return;
	end
	-- Close all dropdowns
	CloseDropDownMenus();
end

function TipBuddy_ResetAnchorPos()
	TipBuddy_Header_Frame:Hide();
	TipBuddy_Header_Frame:Show();
	TipBuddy_Header_Frame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", 202, 400);

	TipBuddy_SavedVars["general"].framepos_L = TipBuddy_Header_Frame:GetLeft();
	TipBuddy_SavedVars["general"].framepos_T = TipBuddy_Header_Frame:GetTop();
end

TipBuddy_AnchorPos = {
	[1] = "Top Right",
	[2] = "Top Left",
	[3] = "Bottom Right",
	[4] = "Bottom Left", 
	[5] = "Top Center", 
	[6] = "Bottom Center", 
};

function TipBuddy_Anchor_OnClick(button)
	-- If Rightclick bring up the options menu
	if ( button == "RightButton" ) then
		ToggleDropDownMenu(0, TipBuddy_SavedVars["general"].anchor_pos, TipBuddy_Header_FrameDropDown, this:GetName(), 0, 0);
		return;
	end
	-- Close all dropdowns
	CloseDropDownMenus();
end


function TipBuddy_AnchorDropDown_OnLoad()
	UIDropDownMenu_Initialize(this, TipBuddy_AnchorDropDown_Initialize, "MENU");
--	TipBuddy_SavedVars["general"]["anchor_pos"] = TipBuddy_AnchorPos[1];
--	UIDropDownMenu_SetSelectedValue(this, nil, TipBuddy_SavedVars["general"]["anchor_pos"]);
	UIDropDownMenu_SetButtonWidth(50);
	UIDropDownMenu_SetWidth(80);
end

--	/script --TB_AddMessage( TipBuddy_SavedVars["general"]["anchor_pos"] );

function TipBuddy_AnchorDropDown_OnClick()
	UIDropDownMenu_SetSelectedValue(TipBuddy_Header_FrameDropDown, this.value);
--	--TB_AddMessage( UIDropDownMenu_GetSelectedValue(TipBuddy_Header_FrameDropDown) );
	TipBuddy_SavedVars["general"].anchor_pos = UIDropDownMenu_GetSelectedValue(TipBuddy_Header_FrameDropDown);
	TipBuddy.xpoint, TipBuddy.xpos, TipBuddy.ypos = TipBuddy_GetFrameCursorOffset();
	TipBuddy.anchor, TipBuddy.fanchor, TipBuddy.offset = TipBuddy_GetFrameAnchorPos();
	TipBuddy_SetFrame_Anchor( TipBuddy_Main_Frame );
	GameTooltip_SetDefaultAnchor(GameTooltip, UIParent);
end

function TipBuddy_AnchorDropDown_Initialize()
	local selectedValue = UIDropDownMenu_GetSelectedValue(TipBuddy_Header_FrameDropDown);
	local info;

	info = {};
	info.text = TipBuddy_AnchorPos[1];
	info.func = TipBuddy_AnchorDropDown_OnClick;
	info.value = TipBuddy_AnchorPos[1];
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Anchor tooltip to the TOP RIGHT\nof the TipBuddyAnchor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_AnchorPos[2];
	info.func = TipBuddy_AnchorDropDown_OnClick;
	info.value = TipBuddy_AnchorPos[2];
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Anchor tooltip to the TOP LEFT\nof the TipBuddyAnchor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_AnchorPos[3];
	info.func = TipBuddy_AnchorDropDown_OnClick;
	info.value = TipBuddy_AnchorPos[3];
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Anchor tooltip to the BOTTOM RIGHT\nof the TipBuddyAnchor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_AnchorPos[4];
	info.func = TipBuddy_AnchorDropDown_OnClick;
	info.value = TipBuddy_AnchorPos[4];
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Anchor tooltip to the BOTTOM LEFT\nof the TipBuddyAnchor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_AnchorPos[5];
	info.func = TipBuddy_AnchorDropDown_OnClick;
	info.value = TipBuddy_AnchorPos[5];
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Anchor tooltip to the BOTTOM CENTER\nof the TipBuddyAnchor";
	UIDropDownMenu_AddButton(info);

	info = {};
	info.text = TipBuddy_AnchorPos[6];
	info.func = TipBuddy_AnchorDropDown_OnClick;
	info.value = TipBuddy_AnchorPos[6];
	if ( info.value == selectedValue ) then
		info.checked = 1;
	end
	info.tooltipTitle = "Anchor tooltip to the TOP CENTER\nof the TipBuddyAnchor";
	UIDropDownMenu_AddButton(info);
end

function TipBuddy_SetAnchorFrameVis()
	if (TipBuddy_SavedVars["general"].anchored == 1) then
		if (not TipBuddy_SavedVars["general"].anchor_vis_first or TipBuddy_SavedVars["general"].anchor_vis == 1) then
			TipBuddy_SavedVars["general"].anchor_vis_first = 1;
			TipBuddy_Header_Frame:Show();	
		else
			TipBuddy_Header_Frame:Show();
			TipBuddy_Header_Frame:Hide();
		end	
	else
		if (TipBuddy_Header_Frame:IsVisible()) then
			TipBuddy_Header_Frame:Show();
		else
			TipBuddy_Header_Frame:Show();
			TipBuddy_Header_Frame:Hide();			
		end
	end
end

---------------------------------------------------------------
-- SAVING DATA AFTER 'OK'
---------------------------------------------------------------
function TipBuddy_OptionsFrame_OnSave()
	-- Checkboxes
	for index, value in TB_Op_Checks do
		local button = getglobal( value.frame );
		local but = value.frame; --debug
		local tipTable = TipBuddy_SavedVars[value.type];
		--tipTable.vartype = getglobal( value.var );		

		if ( button:GetChecked() ) then
			----TB_AddMessage( "button: "..but.." is checked.");	
			tipTable[value.var] = 1;
			----TB_AddMessage( "Setting button: "..but.." checked ("..tipTable[value.var]..").");
		else
			tipTable[value.var] = 0;
		end
	end

	-- Sliders
	for index, value in TipBuddy_OptionsFrame_Sliders do
		local tipTable = TipBuddy_SavedVars["general"];

		local slider = getglobal("TipBuddy_OptionsFrame_Slider"..index);
		--if (index == 6) then
		--	tipTable[value.var] = (UIParent:GetScale() * slider:GetValue());
		--else
			tipTable[value.var] = slider:GetValue();
		--end
	end

	-- EditBoxes
	for index, value in TB_EditBoxes do
		local editbox = getglobal( value.frame );
		local tipTable = TipBuddy_SavedVars[value.type];
		--tipTable.vartype = getglobal( value.var );		

		tipTable[value.var] = editbox:GetText();
	end

	TipBuddy_SetAnchorFrameVis();

	if (UIDropDownMenu_GetSelectedValue(TipBuddy_CursorPosDropDown)) then
		TipBuddy_SavedVars["general"].cursorpos = UIDropDownMenu_GetSelectedValue(TipBuddy_CursorPosDropDown);	
	else
		--TB_AddMessage("|cff3366ffTipBuddy_CursorPosDropDown is nil");
	end
	if (UIDropDownMenu_GetSelectedValue(TipBuddy_NonUnitTipPosDropDown)) then
		TipBuddy_SavedVars["general"].nonunit_anchor = UIDropDownMenu_GetSelectedValue(TipBuddy_NonUnitTipPosDropDown);	
	else
		--TB_AddMessage("|cff3366ffTipBuddy_NonUnitTipPosDropDown is nil");
	end
	if (UIDropDownMenu_GetSelectedValue(TB_PCFriend_TipStyleDropDown)) then
		TipBuddy_SavedVars["pc_friend"].off = UIDropDownMenu_GetSelectedValue(TB_PCFriend_TipStyleDropDown);			
	end
	if (UIDropDownMenu_GetSelectedValue(TB_PCParty_TipStyleDropDown)) then
		TipBuddy_SavedVars["pc_party"].off = UIDropDownMenu_GetSelectedValue(TB_PCParty_TipStyleDropDown);			
	end
	if (UIDropDownMenu_GetSelectedValue(TB_PCEnemy_TipStyleDropDown)) then
		TipBuddy_SavedVars["pc_enemy"].off = UIDropDownMenu_GetSelectedValue(TB_PCEnemy_TipStyleDropDown);			
	end
	if (UIDropDownMenu_GetSelectedValue(TB_NPCFriend_TipStyleDropDown)) then
		TipBuddy_SavedVars["npc_friend"].off = UIDropDownMenu_GetSelectedValue(TB_NPCFriend_TipStyleDropDown);			
	end
	if (UIDropDownMenu_GetSelectedValue(TB_NPCNeutral_TipStyleDropDown)) then
		TipBuddy_SavedVars["npc_neutral"].off = UIDropDownMenu_GetSelectedValue(TB_NPCNeutral_TipStyleDropDown);			
	end
	if (UIDropDownMenu_GetSelectedValue(TB_NPCEnemy_TipStyleDropDown)) then
		TipBuddy_SavedVars["npc_enemy"].off = UIDropDownMenu_GetSelectedValue(TB_NPCEnemy_TipStyleDropDown);			
	end
	if (UIDropDownMenu_GetSelectedValue(TB_PETFriend_TipStyleDropDown)) then
		TipBuddy_SavedVars["pet_friend"].off = UIDropDownMenu_GetSelectedValue(TB_PETFriend_TipStyleDropDown);			
	end
	if (UIDropDownMenu_GetSelectedValue(TB_PETEnemy_TipStyleDropDown)) then
		TipBuddy_SavedVars["pet_enemy"].off = UIDropDownMenu_GetSelectedValue(TB_PETEnemy_TipStyleDropDown);			
	end
	if (UIDropDownMenu_GetSelectedValue(TB_CORPSE_TipStyleDropDown)) then
		TipBuddy_SavedVars["corpse"].off = UIDropDownMenu_GetSelectedValue(TB_CORPSE_TipStyleDropDown);			
	end

	TipBuddy_Variable_Initialize();
	TipBuddy.xpoint, TipBuddy.xpos, TipBuddy.ypos = TipBuddy_GetFrameCursorOffset();
	TipBuddy.anchor, TipBuddy.fanchor, TipBuddy.offset = TipBuddy_GetFrameAnchorPos();
	TipBuddy.uiScale = TipBuddy_GetUIScale();

	local x, y = TipBuddy_PositionFrameToCursor();
	x = (x / TipBuddy.uiScale);
	y = (y / TipBuddy.uiScale);

	if (TipBuddy_SavedVars["general"].anchored == 1) then
		TipBuddy_Parent_Frame:SetPoint(TipBuddy.anchor, "TipBuddy_Header_Frame", TipBuddy.fanchor, 0, 0);
	else
		TipBuddy_Parent_Frame:SetPoint(TipBuddy.xpoint, "UIParent", "BOTTOMLEFT", x, y);
	end
	--/script TipBuddy_BuffFrameB1:SetPoint("BOTTOMLEFT", "TipBuddy_Main_Frame", "TOPLEFT", 0, 0); TipBuddy_BuffFrameB1:Show();
	--TipBuddy_BuffFrame

	TipBuddy_SetFrame_Anchor( TipBuddy_Main_Frame );
	GameTooltip_SetDefaultAnchor(GameTooltip, UIParent);
end

-------------------------
---- SAVE FRAME POSITION
-------------------------
-- this function is called when the frame should be dragged around
function TB_Options_OnMouseDown(arg1)
	if (arg1 == "LeftButton") then
		TipBuddy_OptionsFrame:StartMoving();
	end
end

-- this function is called when the frame is stopped being dragged around
function TB_Options_OnMouseUp(arg1)

	if (arg1 == "LeftButton") then
		TipBuddy_OptionsFrame:StopMovingOrSizing();

		ValidateFramePosition(TipBuddy_OptionsFrame, 256);
		
		-- save the position 
		TipBuddy_SavedVars["general"].opPos_L = TipBuddy_OptionsFrame:GetLeft();
		TipBuddy_SavedVars["general"].opPos_T = TipBuddy_OptionsFrame:GetTop();
		--/script TipBuddy_OptionsFrame:SetPoint("CENTER", "UIParent", "CENTER", 0, 0);
	end
end


function TipBuddy_ClickResetVarsButton() 
	StaticPopupDialogs["TIPBUDDY_RESETVARS"] = {
		text = TEXT(TB_RESETVARS_DIALOG),
		button1 = TEXT(ACCEPT),
		button2 = TEXT(DECLINE),
		OnAccept = function()
			TipBuddy_ResetAllVariables();
		end,
		OnCancel = function()
			this:Hide();
		end,
		timeout = 60,
		whileDead = 1
	};
	StaticPopup_Show("TIPBUDDY_RESETVARS");
end

function TipBuddy_ResetAllVariables()
	TipBuddy_SavedVars.version = 0;
	TipBuddy_SavedVars = { };
	TipBuddy_Variable_Initialize();
	TipBuddy_OptionsFrame_UpdateCheckboxes();
	TipBuddy_OptionsFrame_UpdateSliders();
	--TipBuddy_OptionsFrame_UpdateGreyed();
	TipBuddy_OptionsFrame_UpdateColorButtons();
	TipBuddy_OptionsFrame_UpdateColorButtons_Text();

	TipBuddy_Background_ColorPick_OnLoad();
end