function tradeDispenserSettings_OnUpdate()
	tradeDispenserVerbose(2, "Updated Settings-Frame")
	if (tradeDispenserSettingsChannelDDframe) then tradeDispenserSettingsChannelDDframe:Hide(); end
	if (tradeDispenserSettingsOSDscale and tradeDispenserSettingsSwatch and tD_CharDatas.OSD) then
		if ( tD_CharDatas.OSD.isEnabled ) then
			tradeDispenserSettingsOSDCheck:SetChecked(1);
			tradeDispenserSettingsOSDLock:Show();
			tradeDispenserSettingsOSDscale:Show();
			tradeDispenserSettingsSwatch:Show();
			tradeDispenserSettingsOSDborder:Show();
			tradeDispenserSettingsOSDhoriz:Show();
		else
			tradeDispenserSettingsOSDCheck:SetChecked(0);
			tradeDispenserSettingsOSDLock:Hide();
			tradeDispenserSettingsOSDscale:Hide();
			tradeDispenserSettingsSwatch:Hide();
			tradeDispenserSettingsOSDborder:Hide();	
			tradeDispenserSettingsOSDhoriz:Hide();			
		end
		tradeDispenserSettingsOSDLock:SetChecked(tD_CharDatas.OSD.locked);
	end

	if (tD_CharDatas.ChannelID) then tradeDispenser_ChannelUpdate() end
	
	if (tD_CharDatas.broadcastSlice and tradeDispenserSettingsBroadcastTimerLbl) then 
		tradeDispenserSettingsBroadcastTimerLbl:SetText(floor(tD_CharDatas.broadcastSlice/60).." min")
	end
	
	if (tradeDispenserSettingsBroadcastCheck) then
		if (tD_CharDatas.AutoBroadcast and tradeDispenserSettingsBroadcastTimer) then
			tradeDispenserSettingsBroadcastCheck:SetChecked(1);
			tradeDispenserSettingsBroadcastTimer:Show();
			tradeDispenserSettingsBroadcastTimer:SetValue(math.floor(tD_CharDatas.broadcastSlice/60));
		else 
			tradeDispenserSettingsBroadcastCheck:SetChecked(0);
			tradeDispenserSettingsBroadcastTimer:Hide();
			tD_CharDatas.AutoBroadcast=false;
		end
	end
	
	if (tradeDispenserSettingsTimelimitCheck) then
		if (tD_CharDatas.TimelimitCheck) then
			tradeDispenserSettingsTimelimitCheck:SetChecked(1);
			tradeDispenserSettingsTimelimitSlider:Show();
			tradeDispenserSettingsTimelimitSlider:SetValue(tD_CharDatas.Timelimit);
			tradeDispenserSettingsTimelimitSliderLbl:SetText(tD_CharDatas.Timelimit.." sec");
		else
			tradeDispenserSettingsTimelimitCheck:SetChecked(0);
			tradeDispenserSettingsTimelimitSlider:Hide();
		end
	end
end


function tradeDispenser_EditBoxUpdate()
	tradeDispenserVerbose(2,"EditBox updated")
	local temp = 480;
	if (not tradeDispenserTradeControl or not tradeDispenserSettingsText) then return end;
	
	if (tradeDispenserTradeControl:IsShown()) then temp=temp+184 end
	
	tradeDispenserSettingsText:SetWidth( temp );
	tradeDispenserSettingsText:SetHeight( 24*tD_CharDatas.Random + 6);
	
	local i;
	for i=1,8 do
		local obj = getglobal("tradeDispenserSettingsTextBroadcastText"..i);
		obj:SetWidth( temp-130 );
		getglobal("tradeDispenserSettingsTextBroadcastText"..i.."Middle"):SetWidth( temp-130 );

		if (i<=tD_CharDatas.Random) then	obj:Show()		else 	obj:Hide() 		end
		if (tD_CharDatas.RndText and tD_CharDatas.RndText[i]) then
			obj:SetText(tD_CharDatas.RndText[i]);
		else 
			obj:SetText("empty");
		end
	end	
end


function tradeDispenser_ChannelUpdate()
	tradeDispenserSettingsChannelDDTitleLbL:SetText(tradeDispenserChannelColors[tD_CharDatas.ChannelID].text);
	local col = tradeDispenserChannelColors[tD_CharDatas.ChannelID];
	tradeDispenserSettingsChannelDDTitleLbL:SetTextColor(col.r, col.g, col.b);
end


function tradeDispenserSettings_OnColorChange(frame)
	frame.r = tD_CharDatas.OSD.r;
	frame.g = tD_CharDatas.OSD.g;
	frame.b = tD_CharDatas.OSD.b;
	frame.opacity = 1-tD_CharDatas.OSD.alpha;
	frame.opacityFunc = tradeDispenserSettings_SetColor;
	frame.swatchFunc = tradeDispenserSettings_SetOpacity;
	frame.hasOpacity = 1;
	ColorPickerFrame.frame = frame;
	CloseMenus();
	UIDropDownMenuButton_OpenColorPicker(frame);
end

function tradeDispenserSettings_SetColor()
	local r, g, b = ColorPickerFrame:GetColorRGB();
	tD_CharDatas.OSD.r=r;
	tD_CharDatas.OSD.g=g;
	tD_CharDatas.OSD.b=b;
	tradeDispenserSettings_OnUpdate();
	tradeDispenserOSD_OnUpdate();
	getglobal(ColorPickerFrame.frame:GetName() .. "SwatchNormalTexture"):SetVertexColor(r, g, b);
end

function tradeDispenserSettings_SetOpacity()
	local a = OpacitySliderFrame:GetValue();
	tD_CharDatas.OSD.alpha=1-a;
	tradeDispenserSettings_OnUpdate();
	tradeDispenserOSD_OnUpdate();
end




-- FUNCTIONS to insert ITEMLINKS --
-- copied and modified from the addon "SuperMacro" --
-- really well done! thx.      
-- btw: they expands the "default" functions by some features

function tradeDispenserSettings_InsertItemText(link)
	if ( not link ) then return end;
	if ( IsAltKeyDown() or IsShiftKeyDown() or IsControlKeyDown() ) then
		local temp = tD_CharDatas.OnBroadcastText:GetText();
		tD_CharDatas.OnBroadcastText:Insert(link);
		tradeDispenserVerbose(1,"Added "..link);
		return 1;
	end
end


local tD_oldContainerFrameItemButton_OnClick = ContainerFrameItemButton_OnClick;
function ContainerFrameItemButton_OnClick(button, ignoreShift)
	if ( button=="LeftButton" and not ignoreShift and tD_CharDatas.OnBroadcastText~=nil ) then
		local link = GetContainerItemLink(this:GetParent():GetID(), this:GetID());
		if ( not tradeDispenserSettings_InsertItemText(link) ) then
			tD_oldContainerFrameItemButton_OnClick(button, ignoreShift);
		end
		return;
	end
	tD_oldContainerFrameItemButton_OnClick(button, ignoreShift);
end

local tD_oldPaperDollItemSlotButton_OnClick = PaperDollItemSlotButton_OnClick;
function PaperDollItemSlotButton_OnClick(button, ignoreShift)
	if ( button=="LeftButton" and not ignoreShift and tD_CharDatas.OnBroadcastText~=nil ) then
		local link = GetInventoryItemLink("player", this:GetID());
		if ( not tradeDispenserSettings_InsertItemText(link) ) then
			tD_oldPaperDollItemSlotButton_OnClick(button, ignoreShift);
		end
		return;
	end
	tD_oldPaperDollItemSlotButton_OnClick(button, ignoreShift);
end

local tD_oldBagSlotButton_OnClick = BagSlotButton_OnClick;
function BagSlotButton_OnClick()
	if ( arg1=="LeftButton" and tD_CharDatas.OnBroadcastText~=nil ) then
		this:SetChecked(not this:GetChecked());
		local link = GetInventoryItemLink("player", this:GetID());
		if ( not tradeDispenserSettings_InsertItemText(link) ) then
			tD_oldBagSlotButton_OnClick();
		end
		return;
	end
	tD_oldBagSlotButton_OnClick();
end

local tD_oldBagSlotButton_OnShiftClick = BagSlotButton_OnShiftClick;
function BagSlotButton_OnShiftClick()
	if ( tD_CharDatas.OnBroadcastText~=nil ) then
		this:SetChecked(not this:GetChecked());
		local link = GetInventoryItemLink("player", this:GetID());
		if ( not tradeDispenserSettings_InsertItemText(link) ) then
			tD_oldBagSlotButton_OnShiftClick();
		end
		return;
	end
	tD_oldBagSlotButton_OnShiftClick();
end
