local scripts = {
	checkbutton = {
		OnShow = function() this:SetChecked(this.self:Get(this.setting)) end,
		OnClick = function() this.self:Set(this.setting,this:GetChecked() and true or false); this.self:UpdateSettings() end,
	},
	slider = {
		OnShow = function() this.real = false this:SetValue(this.self:Get(this.setting)) this.real = true end,
		OnValueChanged = function()
			local value = this:GetValue()
			local formatstring
			if math.floor(value) == value then 
				formatstring = "%d"
			else
				formatstring = "%.2f"
			end
			getglobal(this:GetName().."Value"):SetText(string.format(formatstring,value))
			if this.real then
				this.self:Set(this.setting,value)
				this.self:UpdateSettings()
			end
		end,
	},
	editbox1 = { --initialized with a string
		OnEditFocusGained = function() this:SetText(this.self:Get(this.setting) or ""); this:HighlightText() end,
		OnEditFocusLost = function() this:HighlightText(0,0) end,
		OnShow = function() this:SetText(this.self:Get(this.setting) or "") end,
		OnEscapePressed = function()
			local text = this:GetText()
			if text == "" then
				this:ClearFocus()
			else
				this:SetText("")
			end
		end,
		OnEnterPressed = function() this.self:Set(this.setting,this:GetText()); this:ClearFocus() end,
	},
	editbox2 = { --left blank, OnEnterPressed and OnEnter will be defined elsewhere
		OnEditFocusGained = function() this:SetText("") end,
		OnEditFocusLost = function() this:SetText("") end,
		OnEscapePressed = function()
			local text = this:GetText()
			if text == "" then
				this:ClearFocus()
			else
				this:SetText("")
			end
		end,
	},
	editbox3 = { --controls a table
		OnEditFocusGained = function() this:SetText("") end,
		OnEditFocusLost = function() this:SetText("") end,
		OnEscapePressed = function()
			local text = this:GetText()
			if text == "" then
				this:ClearFocus()
			else
				this.self:Set(this.setting,string.lower(text),nil)
				this:SetText("")
			end
		end,
		OnEnterPressed = function()
			local text = this:GetText()
			if not (text == "") then
				this.self:Set(this.setting,string.lower(text),1)
				this:SetText("")
			end
		end,
		OnEnter = function()
			if this.tooltipText then
				local text = this.tooltipText
				for index,value in pairs(this.self:Get(this.setting)) do
					text = text.."\n"..index
				end
				GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
				GameTooltip:SetText(text, nil, nil, nil, nil, 1);
			end
		end,
	},
	dropdown = {
		OnShow = function()
			getglobal(this:GetName().."Text"):SetText(this.self:Get(this.setting))
		end,
	},
	dropdown2 = {
		OnShow = function()
			getglobal(this:GetName().."Text"):SetText(this.text)
		end,
	},
}

local function filldropdown(frame,setting,values)
	local info
	for index,value in ipairs(values) do
		info = DropDownLib:GetTable()
		info.text = value
		info.checked = (DoTimer:Get(setting) == value) and 1
		info.func = function() 
			DoTimer:Set(setting,value) 
			DoTimer:UpdateSettings() 
			getglobal(frame:GetName().."Text"):SetText(value)
			DropDownLib:CloseDropDownMenus()
		end
		DropDownLib:AddButton(info,1)
	end
end

local sortingtable = {}
local function sorttable(pretable)
	for index,value in pairs(sortingtable) do sortingtable[index] = nil end
	for index,value in pairs(pretable) do table.insert(sortingtable,index) end
	table.sort(sortingtable)
	return sortingtable
end

local types = {
	["Harmful"] = "debuff",
	["Helpful"] = "buff",
	["No Target"] = "notarget",
}
local typeskorean = {
	["디버프"] = "debuff",
	["버프"] = "buff",
	["대상 없음"] = "notarget",
}

local orderedtypes = {
	"Harmful",
	"Helpful",
	"No Target",
}
local orderedtypeskorean = {
	"디버프",
	"버프",
	"대상 없음",
}
local koreanstepset = {
	"시작",
	"중간",
	"끝",
}

local category

local function colordropdown()
	local info
	local DROPDOWNLIB_MENU_LEVEL = DropDownLib:MenuLevel()
	local DROPDOWNLIB_MENU_VALUE = DropDownLib:MenuValue()
	if DROPDOWNLIB_MENU_LEVEL == 4 then
		local subcat = DROPDOWNLIB_MENU_VALUE
		for index,value in ipairs({"begin","half","final"}) do
			info = DropDownLib:GetTable()
			info.text = value
			info.notCheckable = 1
			info.hasColorSwatch = 1
			info.r = DoTimer:Get("colors",category,subcat,value,"r") or 1
			info.g = DoTimer:Get("colors",category,subcat,value,"g") or 1
			info.b = DoTimer:Get("colors",category,subcat,value,"b") or 1
			info.swatchFunc = function()
				local r,g,b = DropDownLibColorPicker:GetColorRGB()
				DoTimer:Set("colors",category,subcat,value,"r",r)
				DoTimer:Set("colors",category,subcat,value,"g",g)
				DoTimer:Set("colors",category,subcat,value,"b",b)
				for i,v in ipairs({"begin","half","final"}) do
					if not DoTimer:Get("colors",category,subcat,v) then
						DoTimer:Set("colors",category,subcat,v,"r",r)
						DoTimer:Set("colors",category,subcat,v,"g",g)
						DoTimer:Set("colors",category,subcat,v,"b",b)
					end
				end
				DoTimer:UpdateSettings()
			end
			DropDownLib:AddButton(info,4)
		end
	elseif DROPDOWNLIB_MENU_LEVEL == 3 then
		if category == "timer" then
			local entries = DoTimer:AcquireTable()
			local tab = DROPDOWNLIB_MENU_VALUE
			for i = 1,GetNumSpellTabs() do
				local name,_,offset,numspells = GetSpellTabInfo(i)
				if name == tab then
					for id = offset + 1,offset + numspells do
						local spell = GetSpellName(id,BOOKTYPE_SPELL)
						entries[spell] = 1
					end
					break
				end
			end
			entries = sorttable(entries)
			for index,value in ipairs(entries) do
				info = DropDownLib:GetTable()
				info.text = value
				local checked
				if DoTimer:Get("colors","timer",value) then checked = 1 end
				info.checked = checked
				info.value = value
				info.hasArrow = 1
				info.func = function() 
					if checked then 
						DoTimer:Set("colors","timer",value,nil) 
						DoTimer:UpdateSettings()
					end 
				end
				DropDownLib:AddButton(info,3)
			end
		elseif category == "type" then
			local subcat = DROPDOWNLIB_MENU_VALUE
			for index,value in ipairs({"begin","half","final"}) do
				info = DropDownLib:GetTable()
				info.text = value
				info.notCheckable = 1
				info.hasColorSwatch = 1
				info.r = DoTimer:Get("colors",category,subcat,value,"r") or DoTimer:GetTimerData()[subcat].colors[value]["r"]
				info.g = DoTimer:Get("colors",category,subcat,value,"g") or DoTimer:GetTimerData()[subcat].colors[value]["g"]
				info.b = DoTimer:Get("colors",category,subcat,value,"b") or DoTimer:GetTimerData()[subcat].colors[value]["b"]
				info.swatchFunc = function()
					local r,g,b = DropDownLibColorPicker:GetColorRGB()
					DoTimer:Set("colors",category,subcat,value,"r",r)
					DoTimer:Set("colors",category,subcat,value,"g",g)
					DoTimer:Set("colors",category,subcat,value,"b",b)
					for i,v in ipairs({"begin","half","final"}) do
						if not DoTimer:Get("colors",category,subcat,v) then
							DoTimer:Set("colors",category,subcat,v,"r",DoTimer:GetTimerData()[subcat].colors[v]["r"])
							DoTimer:Set("colors",category,subcat,v,"g",DoTimer:GetTimerData()[subcat].colors[v]["g"])
							DoTimer:Set("colors",category,subcat,v,"b",DoTimer:GetTimerData()[subcat].colors[v]["b"])
						end
					end
					DoTimer:UpdateSettings()
				end
				DropDownLib:AddButton(info,3)
			end
		end
	elseif DROPDOWNLIB_MENU_LEVEL == 2 then
		category = DROPDOWNLIB_MENU_VALUE
		if category == "timer" then
			for i = 1,GetNumSpellTabs() do
				local name = GetSpellTabInfo(i)
				info = DropDownLib:GetTable()
				info.text = name
				info.value = name
				info.hasArrow = 1
				info.notCheckable = 1
				DropDownLib:AddButton(info,2)
			end
		elseif category == "type" then
			for index,value in ipairs(orderedtypes) do
				info = DropDownLib:GetTable()
				info.text = value
				local timertype = types[value]
				local checked
				if DoTimer:Get("colors","type",timertype) then checked = 1 end
				info.checked = checked
				info.value = timertype
				info.hasArrow = 1
				info.func = function() 
					if checked then 
						DoTimer:Set("colors","type",timertype,nil) 
						DoTimer:UpdateSettings()
					end 
				end
				DropDownLib:AddButton(info,2)
			end
		end
	elseif DROPDOWNLIB_MENU_LEVEL == 1 then
		info = DropDownLib:GetTable()
		info.text = "특정 타이머 지정"
		info.notCheckable = 1
		info.hasArrow = 1
		info.value = "timer"
		DropDownLib:AddButton(info,1)
		info = DropDownLib:GetTable()
		info.text = "타이머 종류"
		info.notCheckable = 1
		info.hasArrow = 1
		info.value = "type"
		DropDownLib:AddButton(info,1)
		info = DropDownLib:GetTable()
		info.text = "바의 글자색"
		local colors = DoTimer:Get("bartextcolor")
		info.r = colors.r
		info.g = colors.g
		info.b = colors.b
		info.hasColorSwatch = 1
		local checked
		local currcolor = DoTimer:Get("bartextcolor")
		local defcolor = DoTimer:GetDefault("bartextcolor")
		if not (currcolor.r == defcolor.r and currcolor.g == defcolor.g and currcolor.b == defcolor.b) then checked = 1 end
		info.checked = checked
		info.func = function() if checked then DoTimer:Set("bartextcolor",nil) end end
		info.swatchFunc = function()
			local r,g,b = DropDownLibColorPicker:GetColorRGB()
			DoTimer:Set("bartextcolor","r",r)
			DoTimer:Set("bartextcolor","g",g)
			DoTimer:Set("bartextcolor","b",b)
			DoTimer:UpdateSettings()
		end
		DropDownLib:AddButton(info,1)
		info = DropDownLib:GetTable()
		info.text = "고스트타이머 색"
		local colors = DoTimer:Get("ghostcolor")
		info.r = colors.r
		info.g = colors.g
		info.b = colors.b
		info.hasColorSwatch = 1
		local checked
		local currcolor = DoTimer:Get("ghostcolor")
		local defcolor = DoTimer:GetDefault("ghostcolor")
		if not (currcolor.r == defcolor.r and currcolor.g == defcolor.g and currcolor.b == defcolor.b) then checked = 1 end
		info.checked = checked
		info.func = function() if checked then DoTimer:Set("ghostcolor",nil) end end
		info.swatchFunc = function()
			local r,g,b = DropDownLibColorPicker:GetColorRGB()
			DoTimer:Set("ghostcolor","r",r)
			DoTimer:Set("ghostcolor","g",g)
			DoTimer:Set("ghostcolor","b",b)
			DoTimer:UpdateSettings()
		end
		DropDownLib:AddButton(info,1)
		info = DropDownLib:GetTable()
		info.text = "바 배경색"
		local colors = DoTimer:Get("barbackgroundcolor")
		info.r = colors.r
		info.g = colors.g
		info.b = colors.b
		info.hasColorSwatch = 1
		local checked
		local currcolor = DoTimer:Get("barbackgroundcolor")
		local defcolor = DoTimer:GetDefault("barbackgroundcolor")
		if not (currcolor.r == defcolor.r and currcolor.g == defcolor.g and currcolor.b == defcolor.b) then checked = 1 end
		info.checked = checked
		info.func = function() if checked then DoTimer:Set("barbackgroundcolor",nil) end end
		info.swatchFunc = function()
			local r,g,b = DropDownLibColorPicker:GetColorRGB()
			DoTimer:Set("barbackgroundcolor","r",r)
			DoTimer:Set("barbackgroundcolor","g",g)
			DoTimer:Set("barbackgroundcolor","b",b)
			DoTimer:UpdateSettings()
		end
		DropDownLib:AddButton(info,1)
	end
end

local function hiddentypesdropdown()
	local info
	for index,value in ipairs(orderedtypes) do
		info = DropDownLib:GetTable()
		local type = string.lower(types[value])
		local checked
		if DoTimer:Get("hiddentypes",type) then checked = 1 end
		info.checked = checked
		info.text = value
		info.func = function() if checked then DoTimer:Set("hiddentypes",type,nil) else DoTimer:Set("hiddentypes",type,1) end DoTimer:UpdateSettings() end
		DropDownLib:AddButton(info,1)
	end
end

local function otherdropdown()
	local frame = this:GetParent()
	if frame and frame.setting and frame.values then 
		filldropdown(frame,frame.setting,frame.values) 
	end 
end

local guitable = {
	title = "DoTimer Main Menu",
	name = "DoTimerMenuFrame",
	{ --column 1
		{
			title = "애드온 사용",
			type = "checkbutton",
			tooltiptext = "체크하면 이 애드온을 사용합니다. 기본값 : 사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "status",
			},
		},
		{
			title = "자리 고정",
			type = "checkbutton",
			tooltiptext = "체크하면 애드온의 자리를 고정시킵니다. 기본값 : 이동 가능.",
			scripts = scripts.checkbutton,
			data = {
				setting = "locked",
			},
		},
		{
			title = "이름 표시",
			type = "checkbutton",
			tooltiptext = "체크하면 걸린 대상의 이름을 표시합니다. 기본값 : 사용",
			scripts = scripts.checkbutton,
			data = {
				setting = "names",
			},
		},
		{
			title = "공격대 대상 아이콘",
			type = "checkbutton",
			tooltiptext = "체크하면 공격대 대상 아이콘을 표시합니다. 이름 표시를 해야만 사용할 수 있습니다., 기본값 : 사용",
			scripts = scripts.checkbutton,
			data = {
				setting = "raidicons",
			},
		},
		{
			title = "레벨 표시",
			type = "checkbutton",
			tooltiptext = "체크하면 걸린 대상의 레벨을 표시합니다. 기본값 : 사용",
			scripts = scripts.checkbutton,
			data = {
				setting = "levels",
			},
		},
		{
			title = "선택한 타겟만 표시",
			type = "checkbutton",
			tooltiptext = "체크하면 현재 선택하고 있는 대상의 타이머만 표시되게 설정합니다. (나머지도 기록은 되지만 감춰집니다.) 기본값: 미사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "onlytarget",
			},
		},
		{
			title = "타겟 정렬",
			type = "checkbutton",
			tooltiptext = "체크하면 현재 선택하고 있는 대상이 자동으로 첫번째 위치로 표시되게 설정합니다. 기본값: 미사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "sorttarget",
			},
		},
		{
			title = "주시 대상만 표시",
			type = "checkbutton",
			tooltiptext = "체크하면 주시 대상의 타이머만 표시되게 설정합니다. (나머지도 기록은 되지만 감춰집니다.) 기본값: 미사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "onlyfocus",
			},
		},
		{
			title = "타겟 주시 대상 정렬",
			type = "checkbutton",
			tooltiptext = "체크하면 주시 대상이 자동으로 첫번째 위치로 표시되게 설정합니다. 기본값: 미사용",
			scripts = scripts.checkbutton,
			data = {
				setting = "sortfocus",
			},
		},
		{
			title = "디버프 클릭가능",
			type = "checkbutton",
			tooltiptext = "체크하면 디버프 바를 클릭해서 동작을 하게 합니다. 왼쪽클릭: 쳇창에 디버프 시간 알리기, 오른쪽클릭: 이 디버프 표시 안하기, 쉬프트+오른쪽클릭: 이 디버프는 다시 표시하지 않음, 기본값: 사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "clickable",
			},
		},
		{
			title = "정밀하게 표시",
			type = "checkbutton",
			tooltiptext = "체크하면 타이머 지속시간을 0.1초 단위로 정밀하게 표시합니다. 체크하지 않으면 1초 간격으로 표시합니다. 기본값: 미사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "tenths",
			},
		},
		{
			title = "툴팁 보기",
			type = "checkbutton",
			tooltiptext = "체크하면 타이머 위에 마우스를 가져갔을때 툴팁을 보이게 합니다, 기본값: 사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "tooltips",
			},
		},
		{
			title = "아이콘 보기",
			type = "checkbutton",
			tooltiptext = "체크하면 바형태 타이머 앞에 디버프 아이콘이 보이게 합니다, 기본값: 사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "icons",
			},
		},
		{
			title = "반전",
			type = "checkbutton",
			tooltiptext = "체크하면 타이머가 감소되는 방식이 아닌 차오르는 방식으로 바뀌게 됩니다., 기본값 : 미사용",
			scripts = scripts.checkbutton,
			data = {
				setting = "reversed",
			},
		},
		{
			title = "만료 알림",
			type = "checkbutton",
			tooltiptext = "체크하면 타이머가 5초 이내로 남았을 경우 글자가 적색이 되고 아이콘이 2초간 점멸하게 합니다. 기본값: 사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "expalert",
			},
		},
		{
			title = "소리 내기",
			type = "checkbutton",
			tooltiptext = "체크하면 타이머가 5초 남았을때 사운드가 연주되게 설정합니다. 기본값: 미사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "playsound",
			},
		},
		{
			title = "알림용 고스트 타이머",
			type = "checkbutton",
			tooltiptext = "체크하면 디버프 시간이 끝나면 고스트 타이머를 생성하여 디버프 다시 해야함을 알립니다. 기본값: 사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "ghosts",
			},
		},
		{
			title = "모두 숨기기",
			type = "checkbutton",
			tooltiptext = "체크하면 모든 타이머를 숨깁니다. 기본값: 미사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "hideall",
			},
		},
		{
			title = "자신의 버프 표시",
			type = "checkbutton",
			tooltiptext = "체크하면 자신이 건 버프를 표시합니다. 기본값: 미사용.",
			scripts = scripts.checkbutton,
			data = {
				setting = "playertimers",
			},
		},
	},
	{ --column 2
		{
			title = "전체 크기 조정",
			type = "slider",
			tooltiptext = "인터페이스의 상대크기를 변경시킵니다. 기본값: 1.",
			scripts = scripts.slider,
			lowval = .5,
			highval = 1.25,
			step = .05,
			data = {
				setting = "scale",
			},
		},
		{
			title = "아이콘 크기 조정",
			type = "slider",
			tooltiptext = "인터페이스 상의 디버프 아이콘의 상대크기를 변경시킵니다. 기본값: 1.",
			scripts = scripts.slider,
			lowval = .5,
			highval = 2,
			step = .05,
			data = {
				setting = "buttonscale",
			},
		},
		{
			title = "타이머바 길이",
			type = "slider",
			tooltiptext = "타이머 바의 길이를 설정합니다. 기본값: 175",
			scripts = scripts.slider,
			lowval = 50,
			highval = 250,
			step = 5,
			data = {
				setting = "barlength",
			},
		},
		{
			title = "타이머 간격",
			type = "slider",
			tooltiptext = "타이머들 사이의 간격을 설정합니다. 기본값: 5.",
			scripts = scripts.slider,
			lowval = 0,
			highval = 20,
			step = 1,
			data = {
				setting = "timerspacing",
			},
		},
		{
			title = "대상 간격",
			type = "slider",
			tooltiptext = "대상들 간의 간격을 설정합니다. 기본값 15.",
			scripts = scripts.slider,
			lowval = 0,
			highval = 30,
			step = 1,
			data = {
				setting = "targetspacing",
			},
		},
		{
			title = "투명도",
			type = "slider",
			tooltiptext = "타이머의 특징을 설정합니다.  1 불투명; 0 반투명, 기본값 1.",
			scripts = scripts.slider,
			lowval = 0,
			highval = 1,
			step = .05,
			data = {
				setting = "alpha",
			},
		},
		{
			title = "고스트 타이머 시간",
			type = "slider",
			tooltiptext = "고스트 타이머가 유지되는 시간을 결정합니다. 0을 설정시 기술을 다시 전까진 고스트 타이머가 유지됩니다. 기본값 5.",
			scripts = scripts.slider,
			lowval = 1,
			highval = 10,
			step = 1,
			data = {
				setting = "ghostdata",
			},
		},
		{
			title = "바 텍스쳐",
			type = "slider",
			tooltiptext = "바가 어떤 텍스쳐를 쓰는지 결정합니다. 기본값 : 4.",
			scripts = scripts.slider,
			lowval = 1,
			highval = 24,
			step = 1,
			data = {
				setting = "bartexture",
			},
		},
		{
			title = "타이머 생성 시간",
			type = "slider",
			tooltiptext = "타이머가 몇 초에걸처 생성될지를 결정합니다. 기본값 : 1.",
			scripts = scripts.slider,
			lowval = 0,
			highval = 5,
			step = 1,
			data = {
				setting = "fadeintime",
			},
		},
		{
			title = "타이머 사라짐 시간",
			type = "slider",
			tooltiptext = "타이머가 몇 초에걸처 사라질지를 결정합니다. 기본값 : 3.",
			scripts = scripts.slider,
			lowval = 0,
			highval = 5,
			step = 1,
			data = {
				setting = "fadeouttime",
			},
		},
		{
			title = "Max Buff Duration",
			type = "slider",
			tooltiptext = "Determines the maximum duration, in minutes, buffs you cast can last to be made a timer (0 means no limit), default 1.",
			scripts = scripts.slider,
			lowval = 0,
			highval = 15,
			step = 1,
			data = {
				setting = "maxbuffduration",
			},
		},
	},
	{ --column 3
		{
			title = "타이머 색깔",
			type = "dropdown",
			tooltiptext = "특정한 디버프에 색을 부여하거나 타이머 종류와 고스트 타이머, 바 텍스트틀 바꿀수 있습니다.",
			func = colordropdown,
			scripts = scripts.dropdown2,
			data = {
				text = "선택하세요...",
			},
		},
		{
			title = "타이머 종류",
			type = "dropdown",
			tooltiptext = "타이머가 어떤 식으로 표시될지 설정합니다. 기본값 : bars.",
			func = otherdropdown,
			scripts = scripts.dropdown,
			data = {
				setting = "format",
				values = {"bars","icons","text"},
			},
		},
		{
			title = "타겟 배치 방식",
			type = "dropdown",
			tooltiptext = "타겟이 어느 쪽으로 배치될지 결정합니다.기본값 : down",
			func = otherdropdown,
			scripts = scripts.dropdown,
			data = {
				setting = "targetlayout",
				values = {"up","down","left","right"},
			},
		},
		{
			title = "타이머 배치 방식",
			type = "dropdown",
			tooltiptext = "타이머를 타겟의 어느 쪽으로 배치될지 결정합니다. 기본값 : down",
			func = otherdropdown,
			scripts = scripts.dropdown,
			data = {
				setting = "timerlayout",
				values = {"up","down","left","right"},
			},
		},
		{
			title = "정렬 방식",
			type = "dropdown",
			tooltiptext = "타이머가 어떤 식으로 정렬될지 설정합니다. (A) : 정방향 (D) : 역방향 기본값 : 남은 시간 (D) ",
			func = otherdropdown,
			scripts = scripts.dropdown,
			data = {
				setting = "sortmethod",
				values = {"added (A)","added (D)","remaining (A)","remaining (D)","alphabetical (A)","alphabetical (D)"},
			},
		},
		{
			title = "Seconds Format",
			type = "dropdown",
			tooltiptext = "Sets the manner in which the time string is displayed when less than 1 minute remains on the timer.",
			func = otherdropdown,
			scripts = scripts.dropdown,
			data = {
				setting = "secondsformat",
				values = {"##",":##","0:##"},
			},
		},
		{
			title = "숨기는 타이머 종류",
			type = "dropdown",
			tooltiptext = "해당 종류의 타이머는 표시하지 않습니다.",
			func = hiddentypesdropdown,
			scripts = scripts.dropdown2,
			data = {
				text = "선택하세요...",
			},
		},
		{
			title = "디버그",
			type = "editbox",
			tooltiptext = "디버그 메시지를 표시합니다. off : 표시 안함 on : 표시",
			scripts = scripts.editbox1,
			data = {
				setting = "debugchannel",
			},
		},
		{
			title = "숨기는 타이머",
			type = "editbox",
			tooltiptext = "여기에 기록된 것들은 타이머에 표시되지 않습니다.입력하고 엔터를 눌러 차단에 추가하고 ESC 키를 눌러 차단을 해제할 수 있습니다. \n\n현재 차단된 리스트:",
			scripts = scripts.editbox3,
			data = {
				setting = "hidden",
			},
		},
		{
			title = "채팅창 메시지",
			type = "editbox",
			tooltiptext = [[
				타이머를 왼쪽 클릭시
				채팅창에 나오는 것들을 조정합니다.

				형식 코드:
				%s: 주문 이름
				%r: 주문 레벨
				%d: 남은 시간
				%t: 주문의 폭표
				%l: 목표의 레벨

				일반 주문에 사용할 수 있는 코드 : %s,%r,%d,%t,%l
				대상이 없는 주문에 사용할 수 있는 코드 : %s,%r,%d

				normal,notarget 중 하나 고르시고, 한칸 뛰신 다음,
				뒤에 : 을 붙이시고 입력하세요.
				다 입력하셧으면 엔터 키를 누르세요.
				
				현재 설정:]],
			scripts = scripts.editbox2,
			overridescripts = {
				OnEnterPressed = function() 
					local text = this:GetText()
					if not (text == "") then 
						local _,_,output,msg = string.find(text,"(%a+)%:%s?(.+)")
						if output then 
							output = string.lower(output)
							DoTimer:Set("chatmsg"..output,msg)
							this:SetText("") 
						end
					end
				end,
				OnEnter = function() 
					if this.tooltipText then
						local text = this.tooltipText
						text = text.."\nNormal: "..DoTimer:Get("chatmsgnormal")
						text = text.."\nNo Target: "..DoTimer:Get("chatmsgnotarget")
						GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
						GameTooltip:SetText(text, nil, nil, nil, nil, 1);
					end
				end,
			},
		},
		{
			title = "바 메시지",
			type = "editbox",
			tooltiptext = [[
				바가 표시하는 정보를 수정할수 있습니다. 바 형태나 텍스트 표시일 경우만 작동합니다.
				
				형식 코드:
				%s: 주문 이름
				%r: 주문 레벨
				%d: 남은 시간
				%t: 주문의 대상
				%l: 대상의 레벨
				
				다 입력하셧으면 엔터 키를 누르세요.]],
			scripts = scripts.editbox1,
			data = {
				setting = "barmsg",
			},
		},
	},
	{ --column 4
		{
			title = "설정 초기화",
			type = "button",
			tooltiptext = "모든 설정을 기본값으로 되돌립니다.",
			buffer = 10,
			scripts = {
				OnClick = function() 
					this.self:ClearSettings() 
					DoTimerMenuFrame:Hide()
					DoTimerMenuFrame:Show()
				end,
			},
		},
		{
			title = "위치 초기화",
			type = "button",
			tooltiptext = "Dotimer의 타이머 위치를 화면 가운대로 초기화 합니다.",
			buffer = 10,
			scripts = {
				OnClick = function() this.self:Set("offsetX",nil); this.self:UpdateSettings() end,
			},
		},
		{
			title = "제작자 정보.",
			type = "button",
			tooltiptext = "채팅창에 이 애드온의 제작자를 소개합니다.",
			buffer = 10,
			scripts = {
				OnClick = function() DoTimer:Commands("help info") end,
			},
		},
		{
			title = "초보자 도움말",
			type = "button",
			tooltiptext = "초보자를 위한 도움말을 표시합니다.",
			buffer = 10,
			scripts = {
				OnClick = function() DoTimer:Commands("help new") end,
			},
		},
		{
			title = "미리 보기",
			type = "button",
			tooltiptext = "가상의 바를 만들어서 설정을 테스트할 수 있습니다.",
			buffer = 10,
			scripts = {
				OnClick = function() this.self:ShowTimers(3,4) end,
			},
		},
		{
			title = "미리 보기 숨기기",
			type = "button",
			tooltiptext = "테스트용으로 만든 가상의 바를 숨깁니다.",
			buffer = 10,
			scripts = {
				OnClick = function() this.self:RemoveAllTimers() end,
			},
		},
		{
			title = "프로파일",
			type = "button",
			tooltiptext = "설정 등을 저장할 수 있습니다.",
			buffer = 10,
			scripts = {
				OnClick = function() ProfileLib:ShowGUI() end,
			},
		},
		"BREAK",
		{
			title = "창 닫기",
			type = "button",
			tooltiptext = "이 창을 닫습니다.",
			scripts = {
				OnClick = function() this.holder.place.column.menu:Hide() end,
			},
		},
	},
}

function DoTimer:ShowGUI()
	if not DoTimerMenuFrame then
		DoTimer:CreateGUI(guitable)
	end
	DoTimerMenuFrame:Show()
end
