local SM = LibStub:GetLibrary("LibSharedMedia-3.0")
local Graph = LibStub:GetLibrary("LibGraph-2.0")

local AceLocale = LibStub("AceLocale-3.0")
local L = AceLocale:GetLocale( "Recount" )
local BC = {} -- = LibStub("LibBabble-Class-3.0"):GetLookupTable()

FillLocalizedClassList(BC, false) -- We are sexist here but not much of a choice, when there is no neutral

-- Elsia: Note, most strings here haven't been localized. Need to grab all button and text labels here and put into localization registration.
-- Just started with the color selection ones to give an example. See Recount.lua.

local Recount = _G.Recount

local UnitClass = UnitClass

local me={}

local SavedCheckVars={}

local EditableColors={
	["Window"]={
		"Title",
		"Background",
		"Title Text",
	},
	["Other Windows"]={
		"Title",
		"Background",
		"Title Text",
	},
	["Bar"]={
		"Bar Text",
		"Total Bar",
	},
	["Class"]={
		"Deathknight",
		"Druid",
		"Hunter",
		"Mage",
		"Paladin",
		"Priest",
		"Rogue",
		"Shaman",
		"Warlock",
		"Warrior",
		"Pet",
--		"Guardian",
		"Mob",
	}
}

local ClassStrings={
	["DEATHKNIGHT"]=true,
	["DRUID"]=true,
	["HUNTER"]=true,
	["MAGE"]=true,
	["PALADIN"]=true,
	["PRIEST"]=true,
	["ROGUE"]=true,
	["SHAMAN"]=true,
	["WARLOCK"]=true,
	["WARRIOR"]=true,
	["PET"]=false, -- Elsia: These two are not supported by RAID_CLASS_COLORS or Babble-Class
--	["GUARDIAN"]=false,
	["MOB"]=false,
	["HOSTILE"]=false,
	["UNGROUPED"]=false,
}

function me:LBC(Name) -- Allow localization of unit strings via Babble-Class
	local CName = string.upper(Name)
	if ClassStrings[CName] then -- Elsia: Only Babble what babble knows
		return BC[CName]
	else
		return L[Name]
	end
end

function Recount:FixUnitString(Name) -- This is to handle caps of default unit strings
	local CName = string.upper(Name)
	if ClassStrings[CName]~=nil then -- Elsia: Caps all unit strings
		return CName
	else
		return Name
	end
end

function Recount:ResetDefaultWindowColors()
	Recount.Colors:SetColor("Window", "Title", { r = 1, g = 0, b = 0, a = 1})
	Recount.Colors:SetColor("Window", "Background", { r = 24/255, g = 24/255, b = 24/255, a = 1})
	Recount.Colors:SetColor("Window", "Title Text", { r = 1, g = 1, b = 1, a = 1})
	Recount.Colors:SetColor("Other Windows", "Title", { r = 1, g = 0, b = 0, a = 1})
	Recount.Colors:SetColor("Other Windows", "Background", { r = 24/255, g = 24/255, b = 24/255, a = 1})
	Recount.Colors:SetColor("Other Windows", "Title Text", { r = 1, g = 1, b = 1, a = 1})
end

function Recount:ResetDefaultClassColors()
	for k,v in pairs(EditableColors.Class) do
		v = Recount:FixUnitString(v)
		if v=="PET" then
			Recount.Colors:SetColor("Class", "PET", { r = 0.09, g = 0.61, b = 0.55, a = 1 })
--		elseif v=="GUARDIAN" then
--			Recount.Colors:SetColor("Class", "GUARDIAN", { r = 0.61, g = 0.09, b = 0.09 })
		elseif v=="MOB" then
			Recount.Colors:SetColor("Class", "MOB", { r = 0.58, g = 0.24, b = 0.63, a = 1 })
		else
			local classcols
			if CUSTOM_CLASS_COLORS and CUSTOM_CLASS_COLORS[v] then
				classcols = CUSTOM_CLASS_COLORS[v]
			else
				classcols = RAID_CLASS_COLORS[v]
			end
			classcols.a = 1
			Recount.Colors:SetColor("Class", v, classcols) 
		end
	end
	Recount.Colors:SetColor("Bar", "Bar Text", { r = 1, g = 1, b = 1, a = 1})
	Recount.Colors:SetColor("Bar", "Total Bar", { r = 0.75, g = 0.75, b = 0.75, a=1})
end


function me:SetColorRow(Branch,Name)
	self.Branch=Branch
	self.Text:SetText(me:LBC(Name))
	Name = Recount:FixUnitString(Name)
	self.Name=Name
	Recount.Colors:UnregisterItem(self.Background)
	Recount.Colors:UnregisterItem(self.Key)
	Recount.Colors:RegisterTexture(Branch,Name,self.Background)
	Recount.Colors:RegisterTexture(Branch,Name,self.Key)
end

function me:CreateColorRow(parent, frame)
	local theFrame=CreateFrame("Frame",nil,parent)

	theFrame:SetWidth(190)
	theFrame:SetHeight(13)

	theFrame.Background=theFrame:CreateTexture(nil,"BACKGROUND")
	theFrame.Background:SetAllPoints(theFrame)
	theFrame.Background:SetTexture(1,1,1,0.3)
	theFrame.Background:Hide()

	theFrame.Key=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.Key:SetHeight(13)
	theFrame.Key:SetWidth(13)
	theFrame.Key:SetPoint("LEFT",theFrame,"LEFT",0,0)
	theFrame.Key:SetTexture(1,1,1)

	theFrame.Text=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Text:SetPoint("LEFT",theFrame,"LEFT",16,0)

	theFrame:EnableMouse(true)
	theFrame:SetScript("OnEnter",function() theFrame.Background:Show() end)
	theFrame:SetScript("OnLeave",function() theFrame.Background:Hide() end)
	theFrame:SetScript("OnMouseDown",function(this) Recount.Colors:EditColor(this.Branch,this.Name,me.ConfigWindow) end)
	theFrame.SetRow=me.SetColorRow

	return theFrame
end

function me:CreateWindowColorSelection(parent)
	me.WindowColorOptions=CreateFrame("Frame",nil,parent)

	local theFrame=me.WindowColorOptions

	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",0,-34)

	theFrame.Rows={}

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)
	theFrame.Title:SetText(L["Window Color Selection"])

	local i=1
	theFrame.MainWindowTitle=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.MainWindowTitle:SetPoint("TOP",theFrame,"TOP",0,-4-i*14)
	theFrame.MainWindowTitle:SetText(L["Main Window"])
	i=i+1
	for k,v in pairs(EditableColors.Window) do
		theFrame.Rows[i]=me:CreateColorRow(theFrame)
		theFrame.Rows[i]:SetRow("Window",v)
		theFrame.Rows[i]:SetPoint("TOP",theFrame,"TOP",4,-2-i*14)
		i=i+1
		if i>16 then
			return
		end
	end
	theFrame.DetailWindowTitle=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.DetailWindowTitle:SetPoint("TOP",theFrame,"TOP",0,-4-i*14)
	theFrame.DetailWindowTitle:SetText(L["Other Windows"])
	i=i+1
	for k,v in pairs(EditableColors.Window) do
		theFrame.Rows[i]=me:CreateColorRow(theFrame)
		theFrame.Rows[i]:SetRow("Other Windows",v)
		theFrame.Rows[i]:SetPoint("TOP",theFrame,"TOP",4,-4-i*14)
		i=i+1
		if i>16 then
			return
		end
	end

	theFrame.ResetColButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.ResetColButton:SetWidth(120)
	theFrame.ResetColButton:SetHeight(18)
	theFrame.ResetColButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",40,-210)
	theFrame.ResetColButton:SetScript("OnClick",function() Recount:ResetDefaultWindowColors() end)
	theFrame.ResetColButton:SetText(L["Reset Colors"])
end

function me:CreateClassColorSelection(parent)
	me.ClassColorOptions=CreateFrame("Frame",nil,parent)

	local theFrame=me.ClassColorOptions

	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",200,-34)

	theFrame.Rows={}

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)
	theFrame.Title:SetText(L["Bar Color Selection"])
	
	local i=1
	for k,v in pairs(EditableColors.Bar) do
		theFrame.Rows[i]=me:CreateColorRow(theFrame)
		theFrame.Rows[i]:SetRow("Bar",v)
		theFrame.Rows[i]:SetPoint("TOP",theFrame,"TOP",4,-2-i*14)
		i=i+1
		if i>16 then
			return
		end
	end
	
--	theFrame.ClassTitle=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
--	theFrame.ClassTitle:SetPoint("TOP",theFrame,"TOP",0,-2-i*14)
--	theFrame.ClassTitle:SetText(L["Class Colors"])
--	i=i+1
	for k,v in pairs(EditableColors.Class) do
		theFrame.Rows[i]=me:CreateColorRow(theFrame)
		theFrame.Rows[i]:SetRow("Class",v)
		theFrame.Rows[i]:SetPoint("TOP",theFrame,"TOP",4,-2-i*14)
		i=i+1
		if i>16 then
			return
		end
	end

	i=i+1
	theFrame.ResetColButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.ResetColButton:SetWidth(120)
	theFrame.ResetColButton:SetHeight(18)
	theFrame.ResetColButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",40,-210)
	theFrame.ResetColButton:SetScript("OnClick",function() Recount:ResetDefaultClassColors() end)
	theFrame.ResetColButton:SetText(L["Reset Colors"])
end

function me:CreateIconFrame(parent,texture,title,text)
	local theFrame=CreateFrame("Frame",nil,parent)
	theFrame:SetWidth(18)
	theFrame:SetHeight(18)

	theFrame.texture=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.texture:SetAllPoints(theFrame)
	theFrame.texture:SetTexture(texture)
	theFrame.title=title
	theFrame.text=text

	theFrame:SetScript("OnEnter",function()
					GameTooltip:SetOwner(theFrame, "ANCHOR_TOPRIGHT")
					GameTooltip:ClearLines()
					GameTooltip:AddLine(theFrame.title)
					GameTooltip:AddLine(theFrame.text,1,1,1,true)
					GameTooltip:Show()
				     end)
	theFrame:SetScript("OnLeave",function() GameTooltip:Hide() end)

	theFrame:EnableMouse()
	theFrame:Show()

	return theFrame
end

function me:ConfigureCheckbox(check)
	check:SetWidth(20)
	check:SetHeight(20)
	check:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true) else this:SetChecked(false) end end)
	check:SetNormalTexture("Interface\\Buttons\\UI-CheckBox-Up")
	check:SetPushedTexture("Interface\\Buttons\\UI-CheckBox-Down")
	check:SetDisabledCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check-Disabled")
	check:SetCheckedTexture("Interface\\Buttons\\UI-CheckBox-Check")
	check:SetHighlightTexture("Interface\\Buttons\\UI-CheckBox-Highlight")
end

function me:CreateSavedCheckbox(Text, parent,VarTop,VarName)
	local Checkbox=CreateFrame("CheckButton",nil,parent)
	me:ConfigureCheckbox(Checkbox)

	Checkbox.Text=Checkbox:CreateFontString(nil,"OVERLAY","GameFontNormal")
	Checkbox.Text:SetText(Text)
	Checkbox.Text:SetPoint("LEFT",Checkbox,"RIGHT",8,0)

	SavedCheckVars[#SavedCheckVars+1]={Checkbox,VarTop,VarName}

	return Checkbox
end

function me:CreateFilterRow(parent,label,header)
	local theFrame=CreateFrame("Frame",nil,parent)

	theFrame:SetWidth(196)
	theFrame:SetHeight(16)
	
	theFrame.Label=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	if not header then
		theFrame.Label:SetTextColor(1,1,1,1)
	end
	theFrame.Label:SetText(" "..label)
	theFrame.Label:SetPoint("LEFT",theFrame,"LEFT",0,0)

	theFrame.ShowData=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.ShowData)
	theFrame.ShowData:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true);  else this:SetChecked(false); end  me:SaveFilterConfig(); Recount:RefreshMainWindow() end)

	theFrame.RecordData=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.RecordData)
	theFrame.RecordData:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true);theFrame.RecordTime:Enable();theFrame.TrackDeaths:Enable();theFrame.TrackBuffs:Enable() else this:SetChecked(false);theFrame.RecordTime:Disable();theFrame.TrackDeaths:Disable();theFrame.TrackBuffs:Disable() end me:SaveFilterConfig() end)


	theFrame.RecordTime=CreateFrame("CheckButton",nil,theFrame)	
	me:ConfigureCheckbox(theFrame.RecordTime)
	theFrame.RecordTime:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true);  else this:SetChecked(false); end  me:SaveFilterConfig()  end)

	theFrame.TrackDeaths=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.TrackDeaths)
	theFrame.TrackDeaths:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true);  else this:SetChecked(false); end  me:SaveFilterConfig()  end)

	theFrame.TrackBuffs=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.TrackBuffs)
	theFrame.TrackBuffs:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true);  else this:SetChecked(false); end  me:SaveFilterConfig()  end)


	theFrame.ShowData:SetPoint("RIGHT",theFrame.RecordData,"LEFT",0,0)
	theFrame.RecordData:SetPoint("RIGHT",theFrame.RecordTime,"LEFT",0,0)
	theFrame.RecordTime:SetPoint("RIGHT",theFrame.TrackDeaths,"LEFT",0,0)
	theFrame.TrackDeaths:SetPoint("RIGHT",theFrame.TrackBuffs,"LEFT",0,0)
	theFrame.TrackBuffs:SetPoint("RIGHT",theFrame,"RIGHT",-1,0)

	theFrame.ShowData:Show()
	theFrame.RecordData:Show()
	theFrame.RecordTime:Show()
	theFrame.TrackDeaths:Show()
	theFrame.TrackBuffs:Show()

	return theFrame
end

function me:SetupFilterOptions(parent)
	me.FilterOptions=CreateFrame("Frame",nil,parent)
	local theFrame=me.FilterOptions

	theFrame:SetHeight(196)
	theFrame:SetWidth(196)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",2,-34)

	theFrame.Title_Show=me:CreateIconFrame(theFrame,"Interface/Icons/INV_Misc_Eye_01",L["Show"],L["Is this shown in the main window?"])
	theFrame.Title_Data=me:CreateIconFrame(theFrame,"Interface/Icons/INV_Misc_Note_02",L["Record Data"],L["Whether data is recorded for this type"])
	theFrame.Title_Time=me:CreateIconFrame(theFrame,"Interface/Icons/INV_Misc_PocketWatch_02",L["Record Time Data"],L["Whether time data is recorded for this type (used for graphs can be a |cffff2020memory hog|r if you are concerned about memory)"])
	theFrame.Title_Deaths=me:CreateIconFrame(theFrame,"Interface/Icons/Ability_Creature_Cursed_02",L["Record Deaths"],L["Records when deaths occur and the past few actions involving this type"])
	theFrame.Title_Buffs=me:CreateIconFrame(theFrame,"Interface/Icons/Ability_Warrior_SavageBlow",L["Record Buffs/Debuffs"],L["Records the times and applications of buff/debuffs on this type"])
	
	theFrame.Title_Show:SetPoint("RIGHT",theFrame.Title_Data,"LEFT",-2,0)
	theFrame.Title_Data:SetPoint("RIGHT",theFrame.Title_Time,"LEFT",-2,0)
	theFrame.Title_Time:SetPoint("RIGHT",theFrame.Title_Deaths,"LEFT",-2,0)
	theFrame.Title_Deaths:SetPoint("RIGHT",theFrame.Title_Buffs,"LEFT",-2,0)
	theFrame.Title_Buffs:SetPoint("TOPRIGHT",theFrame,"TOPRIGHT",-2,-2)

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["Filters"])
	theFrame.Title:SetPoint("TOPLEFT",theFrame,"TOPLEFT",2,-4)



	theFrame.Filters={}
	local Filters=theFrame.Filters

	theFrame.TitlePlayers=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.TitlePlayers:SetText(" "..L["Players"])
	theFrame.TitlePlayers:SetPoint("TOPLEFT",theFrame,"TOPLEFT",0,-26)

	Filters.Self=me:CreateFilterRow(theFrame,"  "..L["Self"])
	Filters.Self:SetPoint("TOPLEFT",theFrame.TitlePlayers,"BOTTOMLEFT",0,-1)

	Filters.Grouped=me:CreateFilterRow(theFrame,"  "..L["Grouped"])
	Filters.Grouped:SetPoint("TOPLEFT",Filters.Self,"BOTTOMLEFT",0,-1)

	Filters.Ungrouped=me:CreateFilterRow(theFrame,"  "..L["Ungrouped"])
	Filters.Ungrouped:SetPoint("TOP",Filters.Grouped,"BOTTOM",0,-1)

	Filters.Hostile=me:CreateFilterRow(theFrame,"  "..L["Hostile"])
	Filters.Hostile:SetPoint("TOP",Filters.Ungrouped,"BOTTOM",0,-1)

	Filters.Pet=me:CreateFilterRow(theFrame,L["Pets"],true)
	Filters.Pet:SetPoint("TOP",Filters.Hostile,"BOTTOM",0,-1)

	theFrame.TitleMobs=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.TitleMobs:SetText(" "..L["Mobs"])
	theFrame.TitleMobs:SetPoint("TOPLEFT",Filters.Pet,"BOTTOMLEFT",0,-1)

	Filters.Trivial=me:CreateFilterRow(theFrame,"  "..L["Trivial"])
	Filters.Trivial:SetPoint("TOPLEFT",theFrame.TitleMobs,"BOTTOMLEFT",0,-1)

	Filters.Nontrivial=me:CreateFilterRow(theFrame,"  "..L["Non-Trivial"])
	Filters.Nontrivial:SetPoint("TOP",Filters.Trivial,"BOTTOM",0,-1)

	Filters.Boss=me:CreateFilterRow(theFrame,"  "..L["Bosses"])
	Filters.Boss:SetPoint("TOP",Filters.Nontrivial,"BOTTOM",0,-1)

	Filters.Unknown=me:CreateFilterRow(theFrame,L["Unknown"],true)
	Filters.Unknown:SetPoint("TOP",Filters.Boss,"BOTTOM",0,-1)

	theFrame.MergePets=me:CreateSavedCheckbox(L["Merge Pets w/ Owners"],theFrame,"Data","MergePets")
	theFrame.MergePets:SetPoint("TOPLEFT",Filters.Unknown,"BOTTOMLEFT",0,-1)
	theFrame.MergePets:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MergePets = true; Recount.db.profile.Filters.Show["Pet"]=false else this:SetChecked(false); Recount.db.profile.MergePets = false; Recount.db.profile.Filters.Show["Pet"]=true end me.FilterOptions.Filters.Pet.ShowData:SetChecked(Recount.db.profile.Filters.Show["Pet"]); Recount:FullRefreshMainWindow(); Recount:RefreshMainWindow() end)

end


function me.SetBarTexture(this)
	local BarTextures=SM:List("statusbar")
	Recount:SetBarTextures(BarTextures[this.value])
	
	UIDropDownMenu_SetSelectedID(me.MiscOptions.StatusBarDropDown,this.value);
end

function me:BarTextureDropDown_Initialize()	
	local BarTextures=SM:List("statusbar")
	local LookingFor

	if not LookingFor then
		LookingFor=Recount.db.profile.BarTexture
	end

	if not LookingFor then
		LookingFor="BantoBar"
	end

	for k,v in pairs(BarTextures) do
		local info = {};
		info.text = v;
		info.value = k;
		info.func = me.SetBarTexture;
		UIDropDownMenu_AddButton(info);
		if v==LookingFor then
			LookingFor=k
		end
	end

	UIDropDownMenu_SetSelectedID(me.MiscOptions.StatusBarDropDown,LookingFor);
end

function me:SetSelectStatusBar(texture)
	if texture==nil then
		self:Hide()
		return
	end
	self.Text:SetText(texture)
	self.Texture:SetTexture(SM:Fetch("statusbar",texture))
	self.SetTo=texture
	self:Show()
end

function me:UpdateStatusBars()
	for _, v in pairs(me.TextureOptions.Rows) do
		if v.SetTo==Recount.db.profile.BarTexture then
			v.Texture:SetVertexColor(0.2,0.9,0.2)
		else
			v.Texture:SetVertexColor(0.9,0.2,0.2)
		end
	end
end

function me:CreateSelectStatusBar(parent)
	local frame=CreateFrame("Frame",nil,parent)
	frame:SetHeight(13)
	frame:SetWidth(180)
	frame.Text=frame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	frame.Text:SetText("Temp")
	frame.Text:SetPoint("CENTER",frame,"CENTER")
	frame.Texture=frame:CreateTexture(nil,"BACKGROUND")
	frame.Texture:SetAllPoints(frame)
	frame.SetTexture=me.SetSelectStatusBar
	frame:EnableMouse()
	frame:SetScript("OnMouseDown",function(this) Recount:SetBarTextures(this.SetTo)
						me:SetTestBarTexture(this.SetTo)
						me:UpdateStatusBars() end)
	return frame
end

function me:RefreshStatusBars()	
	local BarTextures=SM:List("statusbar")
	local size=table.getn(BarTextures)
	
	FauxScrollFrame_Update(me.TextureOptions.ScrollBar, size, 13, 12)
	local offset = FauxScrollFrame_GetOffset(me.TextureOptions.ScrollBar)
	
	for i=1,13 do
		me.TextureOptions.Rows[i]:SetTexture(BarTextures[i+offset])	
	end

	me:UpdateStatusBars()
end

function me:SetTestBarTexture(handle)
	local Texture=SM:Fetch(SM.MediaType.STATUSBAR,handle) -- "statusbar"
	me.BarOptions.TestBar.StatusBar:SetStatusBarTexture(Texture)
	me.BarOptions.TestBar.StatusBar:GetStatusBarTexture():SetHorizTile(false)
	me.BarOptions.TestBar.StatusBar:GetStatusBarTexture():SetVertTile(false)
end



function me:SetTestBar(num,left,right,value,color)

	local Row=me.BarOptions.TestBar
	Row:Show()
	Row.StatusBar:SetValue(value)
	Row.LeftText:SetText(left)
	Row.RightText:SetText(right)
	Row.Name=left

	if Recount.db.profile.BarTextColorSwap then
	   if color then
	      Row.StatusBar:SetStatusBarColor(Recount.db.profile.Colors.Bar["Bar Text"].r,Recount.db.profile.Colors.Bar["Bar Text"].g,Recount.db.profile.Colors.Bar["Bar Text"].b,Recount.db.profile.Colors.Bar["Bar Text"].a)
	   end
	   
	   Row.LeftText:SetTextColor(color.r,color.g,color.b,color.a);
	   Row.RightText:SetTextColor(color.r,color.g,color.b,color.a);
	else

	   if color then
	      Row.StatusBar:SetStatusBarColor(color.r,color.g,color.b,1)
	   end
	   
	   Row.LeftText:SetTextColor(Recount.db.profile.Colors.Bar["Bar Text"].r,Recount.db.profile.Colors.Bar["Bar Text"].g,Recount.db.profile.Colors.Bar["Bar Text"].b,1);
	   Row.RightText:SetTextColor(Recount.db.profile.Colors.Bar["Bar Text"].r,Recount.db.profile.Colors.Bar["Bar Text"].g,Recount.db.profile.Colors.Bar["Bar Text"].b,1);
	end
end

function me:RefreshTestBar()
	local lefttext = Recount.db.profile.MainWindow.BarText.RankNum and "1. "..Recount.PlayerName or Recount.PlayerName
	local righttext = Recount:FormatLongNums(37815)
	if Recount.db.profile.MainWindow.BarText.PerSec then
		righttext = righttext .. string.format(" (%s","93.2")
		if Recount.db.profile.MainWindow.BarText.Percent then
			righttext = righttext .. string.format(", %.1f%%)",100.0)
		else
			righttext = righttext .. ")"
		end
	elseif Recount.db.profile.MainWindow.BarText.Percent then
		righttext = righttext .. string.format(" (%.1f%%)",100.0)
	end
		
	local _, enClass = UnitClass("player")
	me:SetTestBar(0,lefttext,righttext,100,Recount.db.profile.Colors.Class[enClass])	
end

function me:CreateBarSelection(parent)
	me.BarOptions=CreateFrame("Frame",nil,parent)

	local theFrame=me.BarOptions

	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",000,-34)

	--[[theFrame.Background=theFrame:CreateTexture(nil,"BACKGROUND")
	theFrame.Background:SetAllPoints(theFrame)
	theFrame.Background:SetTexture(0,0,0,0.3)]]

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["Bar Text Options"])
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)
	
	local row=CreateFrame("Button","Recount_ConfigWindow_BarOptions_TestBar",theFrame)
	
	row:SetPoint("TOPLEFT",theFrame,"TOPLEFT",2,-16)
	row:SetHeight(14)
	row:SetWidth(196)
	Recount:SetupBar(row)
	local Font, Height, Flags = row.LeftText:GetFont()
	row.LeftText:SetFont(Font, 14*0.75, Flags)
	local Font, Height, Flags = row.RightText:GetFont()
	row.RightText:SetFont(Font, 14*0.75, Flags)

	Recount.Colors:RegisterFont("Bar","Bar Text",row.LeftText)
	Recount.Colors:RegisterFont("Bar","Bar Text",row.RightText)
	theFrame.TestBar = row

	me:RefreshTestBar()
	
	theFrame.RankNum=me:CreateSavedCheckbox(L["Rank Number"],theFrame,"Window","RankNum")
	theFrame.RankNum:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-23-14)
	theFrame.RankNum:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.BarText.RankNum = true; Recount:RefreshMainWindow(); me:RefreshTestBar() else this:SetChecked(false); Recount.db.profile.MainWindow.BarText.RankNum = false; Recount:RefreshMainWindow(); me:RefreshTestBar()end end)
	
	theFrame.PerSec=me:CreateSavedCheckbox(L["Per Second"],theFrame,"Window","PerSec")
	theFrame.PerSec:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-40-14)
	theFrame.PerSec:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.BarText.PerSec = true; Recount:RefreshMainWindow();me:RefreshTestBar() else this:SetChecked(false); Recount.db.profile.MainWindow.BarText.PerSec = false; Recount:RefreshMainWindow(); me:RefreshTestBar()end end)
	
	theFrame.Percent=me:CreateSavedCheckbox(L["Percent"],theFrame,"Window","Percent")
	theFrame.Percent:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-57-14)
	theFrame.Percent:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.BarText.Percent = true; Recount:RefreshMainWindow();me:RefreshTestBar() else this:SetChecked(false); Recount.db.profile.MainWindow.BarText.Percent = false; Recount:RefreshMainWindow(); me:RefreshTestBar()end end)

	theFrame.Title2=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title2:SetText(L["Number Format"])
	theFrame.Title2:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-77-14)

	theFrame.Standard=me:CreateSavedCheckbox(L["Standard"],theFrame,"Window","Standard")
	theFrame.Standard:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-91-14)
	theFrame.Standard:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); this:GetParent().Commas:SetChecked(false); this:GetParent().Short:SetChecked(false); Recount.db.profile.MainWindow.BarText.NumFormat = 1; Recount:RefreshMainWindow(); me:RefreshTestBar() else this:SetChecked(true); end end)
	
	theFrame.Commas=me:CreateSavedCheckbox(L["Commas"],theFrame,"Window","Commas")
	theFrame.Commas:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-108-14)
	theFrame.Commas:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); this:GetParent().Standard:SetChecked(false); this:GetParent().Short:SetChecked(false); Recount.db.profile.MainWindow.BarText.NumFormat = 2; Recount:RefreshMainWindow();me:RefreshTestBar() else this:SetChecked(true); end end)
	
	theFrame.Short=me:CreateSavedCheckbox(L["Short"],theFrame,"Window","Short")
	theFrame.Short:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-125-14)
	theFrame.Short:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); this:GetParent().Standard:SetChecked(false); this:GetParent().Commas:SetChecked(false); Recount.db.profile.MainWindow.BarText.NumFormat = 3; Recount:RefreshMainWindow();me:RefreshTestBar() else this:SetChecked(true); end end)

	theFrame.BarTextColorSwap=me:CreateSavedCheckbox(L["Swap Text and Bar Color"],theFrame,"Window","BarTextColorSwap")

	theFrame.BarTextColorSwap:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-159-14)
	theFrame.BarTextColorSwap:SetScript("OnClick",
		function(this)
		   if not this:GetChecked() then
		      this:SetChecked(false)
		      Recount.db.profile.BarTextColorSwap = false
		      Recount:UpdateBarTextColors()
                      Recount:RefreshMainWindow()
                      me:RefreshTestBar()
		   else
		      this:SetChecked(true)
		      Recount.db.profile.BarTextColorSwap = true
		      Recount:UpdateBarTextColors()
                      Recount:RefreshMainWindow()
                      me:RefreshTestBar()
		   end
		end)
end

function me:CreateTextureSelection(parent)
	me.TextureOptions=CreateFrame("Frame",nil,parent)

	local theFrame=me.TextureOptions
	local BarTextures=SM:List("statusbar")

	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",400,-34)

	--[[theFrame.Background=theFrame:CreateTexture(nil,"BACKGROUND")
	theFrame.Background:SetAllPoints(theFrame)
	theFrame.Background:SetTexture(0,0,0,0.3)]]

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["Bar Selection"])
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)

	theFrame.Rows={}
	for i=1,13 do
		theFrame.Rows[i]=me:CreateSelectStatusBar(theFrame)
		theFrame.Rows[i]:SetPoint("TOP",theFrame,"TOP",-8,-i*14-2)
		theFrame.Rows[i]:SetTexture(BarTextures[i])
	end
	me:UpdateStatusBars()

	if table.getn(BarTextures)<=13 then
		for i=1,13 do
			theFrame.Rows[i]:SetWidth(196)
			theFrame.Rows[i]:SetPoint("TOP",theFrame,"TOP",0,-i*14-2)
		end
	end

	theFrame.ScrollBar=CreateFrame("SCROLLFRAME","Recount_Config_StatusBar_Scrollbar",theFrame,"FauxScrollFrameTemplate")
	theFrame.ScrollBar:SetScript("OnVerticalScroll", function(self,offset) FauxScrollFrame_OnVerticalScroll(self,offset,12, me.RefreshStatusBars) end)
	theFrame.ScrollBar:SetPoint("TOPLEFT",theFrame.Rows[1],"TOPLEFT")	
	theFrame.ScrollBar:SetPoint("BOTTOMRIGHT",theFrame.Rows[13],"BOTTOMRIGHT",-5,0)

	Recount:SetupScrollbar("Recount_Config_StatusBar_Scrollbar")

	me:RefreshStatusBars()
end


function me:SetSelectFont(font)
	if font==nil then
		self:Hide()
		return
	end
	self.Text:SetText(font)
	self.Text:SetFont(SM:Fetch("font",font),12)
	self.SetTo=font
	self:Show()
end

function me:UpdateFonts()
	for _, v in pairs(me.FontOptions.Rows) do
		if v.SetTo==Recount.db.profile.Font then
			v.Texture:SetVertexColor(0.2,0.9,0.2)
		else
			v.Texture:SetVertexColor(0.9,0.2,0.2)
		end
	end
end

function me:CreateSelectFont(parent)
	local frame=CreateFrame("Frame",nil,parent)
	frame:SetHeight(13)
	frame:SetWidth(180)
	frame.Text=frame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	frame.Text:SetText("Temp")
	frame.Text:SetPoint("CENTER",frame,"CENTER")
	frame.Texture=frame:CreateTexture(nil,"BACKGROUND")
	frame.Texture:SetAllPoints(frame)
	frame.Texture:SetTexture(1,1,1,0.5)
	frame.SetFont=me.SetSelectFont
	frame:EnableMouse()
	frame:SetScript("OnMouseDown",function(this) Recount:SetFont(this.SetTo)
						me:UpdateFonts() end)
	return frame
end

function me:RefreshFonts()	
	local Fonts=SM:List("font")
	local size=table.getn(Fonts)
	
	FauxScrollFrame_Update(me.FontOptions.ScrollBar, size, 13, 12)
	local offset = FauxScrollFrame_GetOffset(me.FontOptions.ScrollBar)
	
	for i=1,13 do
		me.FontOptions.Rows[i]:SetFont(Fonts[i+offset])	
	end

	me:UpdateFonts()
end


function me:CreateFontSelection(parent)
	me.FontOptions=CreateFrame("Frame",nil,parent)

	local theFrame=me.FontOptions
	local Fonts=SM:List("font")

	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",200,-34)

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["Font Selection"])
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)

	theFrame.Rows={}
	for i=1,13 do
		theFrame.Rows[i]=me:CreateSelectFont(theFrame)
		theFrame.Rows[i]:SetPoint("TOP",theFrame,"TOP",-8,-i*14-2)
		theFrame.Rows[i]:SetFont(Fonts[i])
	end
	me:UpdateFonts()

	if table.getn(Fonts)<=13 then
		for i=1,13 do
			theFrame.Rows[i]:SetWidth(196)
			theFrame.Rows[i]:SetPoint("TOP",theFrame,"TOP",0,-i*14-2)
		end
	end

	theFrame.ScrollBar=CreateFrame("SCROLLFRAME","Recount_Config_Fonts_Scrollbar",theFrame,"FauxScrollFrameTemplate")

	theFrame.ScrollBar:SetScript("OnVerticalScroll", function(self,offset) FauxScrollFrame_OnVerticalScroll(self,offset,12, me.RefreshFonts) end)
	theFrame.ScrollBar:SetPoint("TOPLEFT",theFrame.Rows[1],"TOPLEFT")	
	theFrame.ScrollBar:SetPoint("BOTTOMRIGHT",theFrame.Rows[13],"BOTTOMRIGHT",-5,0)

	Recount:SetupScrollbar("Recount_Config_Fonts_Scrollbar")

	me:RefreshFonts()
end

function me:SetupWindowOptions(parent)
	me.WindowOptions=CreateFrame("Frame",nil,parent)
	local theFrame=me.WindowOptions

	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",200,-34)

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["General Window Options"])
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)

	theFrame.ResetWinButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.ResetWinButton:SetWidth(120)
	theFrame.ResetWinButton:SetHeight(24)
	theFrame.ResetWinButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",40,-20)
	theFrame.ResetWinButton:SetScript("OnClick",function() Recount:ResetPositions() end)
	theFrame.ResetWinButton:SetText(L["Reset Positions"])
	
	local slider = CreateFrame("Slider", "Recount_ConfigWindow_Scaling_Slider", theFrame,"OptionsSliderTemplate")
	theFrame.ScalingSlider=slider
	slider:SetOrientation("HORIZONTAL")
	slider:SetMinMaxValues(0.5, 1.5)
	slider:SetValueStep(0.05)
	slider:SetWidth(180)
	slider:SetHeight(16)
	slider:SetPoint("TOP", theFrame, "TOP", 0, -58)
	slider:SetScript("OnValueChanged",function(this) Recount.db.profile.Scaling=math.floor(this:GetValue()*100+0.5)/100;getglobal(this:GetName().."Text"):SetText(L["Window Scaling"]..": "..Recount.db.profile.Scaling);Recount:ScaleWindows(Recount.db.profile.Scaling) end)
	slider:SetScript("OnMouseUp", function() me:ScaleConfigWindow(Recount.db.profile.Scaling) end)
	getglobal(slider:GetName().."High"):SetText("1.5");
	getglobal(slider:GetName().."Low"):SetText("0.5");
	getglobal(slider:GetName().."Text"):SetText(L["Window Scaling"]..": "..Recount.db.profile.Scaling)

--[[	theFrame.ShowCurAndLast=me:CreateSavedCheckbox(L["Autoswitch Shown Fight"],theFrame,"Window","ShowCurAndLast")
	theFrame.ShowCurAndLast:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-82)
	theFrame.ShowCurAndLast:SetScript("OnClick",function () if this:GetChecked() then this:SetChecked(true); Recount.db.profile.Window.ShowCurAndLast = true; else this:SetChecked(false); Recount.db.profile.Window.ShowCurAndLast = false; end end)
]] -- Elsia: Making this default in modified form
	theFrame.LockWin=me:CreateSavedCheckbox(L["Lock Windows"],theFrame,"Window","LockWin")
	theFrame.LockWin:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-82)
	theFrame.LockWin:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.Locked = true; Recount:LockWindows(true); else this:SetChecked(false); Recount.db.profile.Locked = false; Recount:LockWindows(false); end end)

end

function me:SetupDeletionOptions(parent)
	me.DeletionOptions=CreateFrame("Frame",nil,parent)
	local theFrame=me.DeletionOptions
	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",400,-34)
	
	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["Data Deletion"])
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)
	
	theFrame.Autodelete=me:CreateSavedCheckbox(L["Autodelete Time Data"],theFrame,"Data","AutodeleteTime")
	theFrame.Autodelete:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-21)
	theFrame.Autodelete:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.AutoDelete = true; else this:SetChecked(false); Recount.db.profile.AutoDelete = false; end end)


	theFrame.TitleInstance=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.TitleInstance:SetText(L["Instance Based Deletion"])
	theFrame.TitleInstance:SetPoint("TOP",theFrame,"TOP",0,-44)
	
	theFrame.AutodeleteI=me:CreateSavedCheckbox(L["Delete on Entry"],theFrame,"Data","AutodeleteInstance") -- Elsia: Bye Autodeletecombatants
	theFrame.AutodeleteI:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-61)	
	theFrame.AutodeleteI:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.AutoDeleteNewInstance = true; theFrame.AutodeleteINew:Enable(); theFrame.AutodeleteIConf:Enable() else this:SetChecked(false); Recount.db.profile.AutoDeleteNewInstance = false; theFrame.AutodeleteINew:Disable(); theFrame.AutodeleteIConf:Disable() end Recount:DetectInstanceChange() end)
	theFrame.AutodeleteINew=me:CreateSavedCheckbox(L["New"],theFrame,"Data","AutodeleteInstanceNew") -- Elsia: Bye Autodeletecombatants
	theFrame.AutodeleteINew:SetPoint("TOPLEFT",theFrame,"TOPLEFT",132,-61)	
	theFrame.AutodeleteINew:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.DeleteNewInstanceOnly = true; else this:SetChecked(false); Recount.db.profile.DeleteNewInstanceOnly = false; end end)

	theFrame.AutodeleteIConf=me:CreateSavedCheckbox(L["Confirmation"],theFrame,"Data","AutodeleteInstanceConf") -- Elsia: Bye Autodeletecombatants
	theFrame.AutodeleteIConf:SetPoint("TOPLEFT",theFrame,"TOPLEFT",36,-78)	
	theFrame.AutodeleteIConf:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.ConfirmDeleteInstance = true; else this:SetChecked(false); Recount.db.profile.ConfirmDeleteInstance = false; end end)

	theFrame.TitleInstance=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.TitleInstance:SetText(L["Group Based Deletion"])
	theFrame.TitleInstance:SetPoint("TOP",theFrame,"TOP",0,-101)
	
	theFrame.AutodeleteG=me:CreateSavedCheckbox(L["Delete on New Group"],theFrame,"Data","AutodeleteGroup") -- Elsia: Bye Autodeletecombatants
	theFrame.AutodeleteG:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-118)	
	theFrame.AutodeleteG:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.DeleteJoinGroup = true; theFrame.AutodeleteGConf:Enable(); Recount:InitPartyBasedDeletion() else this:SetChecked(false); Recount.db.profile.DeleteJoinGroup= false; theFrame.AutodeleteGConf:Disable(); Recount:ReleasePartyBasedDeletion() end end)

	theFrame.AutodeleteGConf=me:CreateSavedCheckbox(L["Confirmation"],theFrame,"Data","AutodeleteGroupConf") -- Elsia: Bye Autodeletecombatants
	theFrame.AutodeleteGConf:SetPoint("TOPLEFT",theFrame,"TOPLEFT",36,-137)	
	theFrame.AutodeleteGConf:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.ConfirmDeleteGroup = true; else this:SetChecked(false); Recount.db.profile.ConfirmDeleteGroup = false; end end)

	theFrame.AutodeleteR=me:CreateSavedCheckbox(L["Delete on New Raid"],theFrame,"Data","AutodeleteRaid") -- Elsia: Bye Autodeletecombatants
	theFrame.AutodeleteR:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-152)	
	theFrame.AutodeleteR:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.DeleteJoinRaid = true; theFrame.AutodeleteRConf:Enable(); Recount:InitPartyBasedDeletion() else this:SetChecked(false); Recount.db.profile.DeleteJoinRaid= false; theFrame.AutodeleteRConf:Disable(); Recount:ReleasePartyBasedDeletion() end end)

	theFrame.AutodeleteRConf=me:CreateSavedCheckbox(L["Confirmation"],theFrame,"Data","AutodeleteRaidConf") -- Elsia: Bye Autodeletecombatants
	theFrame.AutodeleteRConf:SetPoint("TOPLEFT",theFrame,"TOPLEFT",36,-169)	
	theFrame.AutodeleteRConf:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.ConfirmDeleteRaid = true; else this:SetChecked(false); Recount.db.profile.ConfirmDeleteRaid = false; end end)

	i=6

	theFrame.Title3=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title3:SetText(L["Fight Segmentation"])
	theFrame.Title3:SetPoint("TOP",theFrame,"TOP",0,-88-i*16-10)

	i = i+1

	theFrame.SegmentBosses=me:CreateSavedCheckbox(L["Keep Only Boss Segments"],theFrame,"Data","SegmentBosses")
	theFrame.SegmentBosses:SetPoint("TOPLEFT",theFrame,"TOPLEFT",10,-88-i*16-8)
	theFrame.SegmentBosses:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.SegmentBosses = true; else this:SetChecked(false); Recount.db.profile.SegmentBosses = false; end end)

end

function me:SetupRealtimeOptions(parent)
	me.RealtimeOptions=CreateFrame("Frame",nil,parent)
	local theFrame=me.RealtimeOptions
	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",400,-34)
	
	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["Global Realtime Windows"])
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)

	theFrame.TitleRaid=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.TitleRaid:SetText(L["Raid"])
	theFrame.TitleRaid:SetPoint("TOP",theFrame,"TOP",0,-26)
	
	theFrame.RDPSButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.RDPSButton:SetWidth(90)
	theFrame.RDPSButton:SetHeight(24)
	theFrame.RDPSButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",7,-40)
	theFrame.RDPSButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("!RAID","DAMAGE","Raid DPS") end)
	theFrame.RDPSButton:SetText(L["DPS"])

	theFrame.RDTPSButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.RDTPSButton:SetWidth(90)
	theFrame.RDTPSButton:SetHeight(24)
	theFrame.RDTPSButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",102,-40)
	theFrame.RDTPSButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("!RAID","DAMAGETAKEN","Raid DTPS") end)
	theFrame.RDTPSButton:SetText(L["DTPS"])

	theFrame.RHPSButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.RHPSButton:SetWidth(90)
	theFrame.RHPSButton:SetHeight(24)
	theFrame.RHPSButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",7,-66)
	theFrame.RHPSButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("!RAID","HEALING","Raid HPS") end)
	theFrame.RHPSButton:SetText(L["HPS"])

	theFrame.RHTPSButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.RHTPSButton:SetWidth(90)
	theFrame.RHTPSButton:SetHeight(24)
	theFrame.RHTPSButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",102,-66)
	theFrame.RHTPSButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("!RAID","HEALINGTAKEN","Raid HTPS") end)
	theFrame.RHTPSButton:SetText(L["HTPS"])

	theFrame.TitleRaid=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.TitleRaid:SetText(L["Network"])
	theFrame.TitleRaid:SetPoint("TOP",theFrame,"TOP",0,-106)

	theFrame.FPSButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.FPSButton:SetWidth(90)
	theFrame.FPSButton:SetHeight(24)
	theFrame.FPSButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",7,-120)
	theFrame.FPSButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("FPS","FPS","") end)
	theFrame.FPSButton:SetText(L["FPS"])

	theFrame.LATButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.LATButton:SetWidth(90)
	theFrame.LATButton:SetHeight(24)
	theFrame.LATButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",102,-120)
	theFrame.LATButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("Latency","LAG","") end)
	theFrame.LATButton:SetText(L["Latency"])

	theFrame.UPTButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.UPTButton:SetWidth(90)
	theFrame.UPTButton:SetHeight(24)
	theFrame.UPTButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",7,-146)
	theFrame.UPTButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("Upstream Traffic","UP_TRAFFIC","") end)
	theFrame.UPTButton:SetText(L["Up Traffic"])

	theFrame.DOTButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.DOTButton:SetWidth(90)
	theFrame.DOTButton:SetHeight(24)
	theFrame.DOTButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",102,-146)
	theFrame.DOTButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("Downstream Traffic","DOWN_TRAFFIC","") end)
	theFrame.DOTButton:SetText(L["Down Traffic"])

	theFrame.BWButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.BWButton:SetWidth(90)
	theFrame.BWButton:SetHeight(24)
	theFrame.BWButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",55,-172)
	theFrame.BWButton:SetScript("OnClick",function() Recount:CreateRealtimeWindow("Bandwidth Available","AVAILABLE_BANDWIDTH","") end)
	theFrame.BWButton:SetText(L["Bandwidth"])
end

local ZoneLabels = 
{
	["none"] = L["Outside Instances"],
	["party"] = L["Party Instances"],
	["raid"] = L["Raid Instances"],
	["pvp"] = L["Battlegrounds"],
	["arena"] = L["Arenas"]
}

local GroupLabels =
{
	[1] = L["Solo"],
	[2] = L["Party"],
	[3] = L["Raid"],
}

local ZoneOrder = 
{
	"none", "party", "raid", "pvp", "arena"
}

function me:SetupMiscOptions(parent)
	me.MiscOptions=CreateFrame("Frame",nil,parent)
	local theFrame=me.MiscOptions

	theFrame:SetHeight(200)
	theFrame:SetWidth(200)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",200,-34)

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["Recount Version"])
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",-20,-2)
	
	theFrame.VersionText=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.VersionText:SetTextColor(1,1,1,1)
	theFrame.VersionText:SetText(Recount.Version)
	theFrame.VersionText:SetPoint("LEFT",theFrame.Title,"RIGHT",4,0) -- TOP theFrame TOP -20
	
	theFrame.VerChkButton=CreateFrame("Button",nil,theFrame,"OptionsButtonTemplate")
	theFrame.VerChkButton:SetWidth(120)
	theFrame.VerChkButton:SetHeight(24)
	theFrame.VerChkButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",40,-18)
	theFrame.VerChkButton:SetScript("OnClick",function() Recount.ReportVersions() end)
	theFrame.VerChkButton:SetText(L["Check Versions"])

	theFrame.Title2=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title2:SetText(L["Content-based Filters"])
	theFrame.Title2:SetPoint("TOP",theFrame,"TOP",0,-45)

	local i = 0
	for _,k in pairs(ZoneOrder) do
		theFrame[k]=me:CreateSavedCheckbox(ZoneLabels[k],theFrame,"Data",k)
		theFrame[k]:SetPoint("TOPLEFT",theFrame,"TOPLEFT",10,-59-i*16)
		theFrame[k]:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.ZoneFilters[k] = true; local _,inst=IsInInstance(); Recount:SetZoneFilter(inst); Recount:RefreshMainWindow(); else this:SetChecked(false); Recount.db.profile.ZoneFilters[k] = false; local _,inst=IsInInstance(); Recount:SetZoneFilter(inst); Recount:RefreshMainWindow() end end)
		i = i+1
	end

	for k,v in ipairs(GroupLabels) do
		theFrame[k]=me:CreateSavedCheckbox(v,theFrame,"Data",k)
		theFrame[k]:SetPoint("TOPLEFT",theFrame,"TOPLEFT",10,-59-i*16)
		theFrame[k]:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.GroupFilters[k] = true; Recount:UpdateZoneGroupFilter(); Recount:RefreshMainWindow(); else this:SetChecked(false); Recount.db.profile.GroupFilters[k] = false; Recount:UpdateZoneGroupFilter(); Recount:RefreshMainWindow() end end)
		i = i+1
	end


	theFrame.GlobalData=me:CreateSavedCheckbox(L["Global Data Collection"],theFrame,"Data","GlobalData")
	theFrame.GlobalData:SetPoint("TOPLEFT",theFrame,"TOPLEFT",10,-59-i*16-3)
	theFrame.GlobalData:SetScript("OnClick",function(this) Recount:SetGlobalDataCollect(this:GetChecked()) end)

	i = i+1
	
	theFrame.HideCollect=me:CreateSavedCheckbox(L["Hide When Not Collecting"],theFrame,"Data","HideCollect")
	theFrame.HideCollect:SetPoint("TOPLEFT",theFrame,"TOPLEFT",10,-59-i*16-6)
	theFrame.HideCollect:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.HideCollect = true; local _,inst=IsInInstance(); Recount:SetZoneFilter(inst) else this:SetChecked(false); Recount.db.profile.HideCollect = false; local _,inst=IsInInstance(); Recount:SetZoneFilter(inst) end end)

end

function me:SetupButtonOptions(parent)
	me.ButtonOptions=CreateFrame("Frame",nil,parent)
	local theFrame=me.ButtonOptions

	theFrame:SetHeight(196)
	theFrame:SetWidth(196)
	theFrame:SetPoint("TOPLEFT",parent,"TOPLEFT",0,-34)
	--Reset
	--File
	--Config
	--Report

	theFrame.Title=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Title:SetText(L["Main Window Options"])
	theFrame.Title:SetPoint("TOP",theFrame,"TOP",0,-2)

	theFrame.ButtonsTitle=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.ButtonsTitle:SetText(L["Show Buttons"])
	theFrame.ButtonsTitle:SetPoint("TOP",theFrame,"TOPLEFT",100,-16)
	
	theFrame.ReportButton=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.ReportButton)
	theFrame.ReportButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",8,-15-16)
	theFrame.ReportButton:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.Buttons.ReportButton = true; Recount:SetupMainWindowButtons() else this:SetChecked(false); Recount.db.profile.MainWindow.Buttons.ReportButton = false; Recount:SetupMainWindowButtons() end end)

	theFrame.Report_Icon=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.Report_Icon:SetWidth(16)
	theFrame.Report_Icon:SetHeight(16)
	theFrame.Report_Icon:SetTexture("Interface\\Buttons\\UI-GuildButton-MOTD-Up.blp")
	theFrame.Report_Icon:SetPoint("LEFT",theFrame.ReportButton,"RIGHT",2,0)

	theFrame.Report_Text=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Report_Text:SetText(L["Report"])
	theFrame.Report_Text:SetPoint("LEFT",theFrame.Report_Icon,"RIGHT",2,0)

	theFrame.ConfigButton=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.ConfigButton)
	theFrame.ConfigButton:SetPoint("TOPLEFT",theFrame,"TOPLEFT",100,-15-16)
	theFrame.ConfigButton:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.Buttons.ConfigButton = true; Recount:SetupMainWindowButtons() else this:SetChecked(false); Recount.db.profile.MainWindow.Buttons.ConfigButton = false; Recount:SetupMainWindowButtons() end end)

	theFrame.Config_Icon=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.Config_Icon:SetWidth(16)
	theFrame.Config_Icon:SetHeight(16)
	theFrame.Config_Icon:SetTexture("Interface\\Addons\\Recount\\Textures\\icon-config")
	theFrame.Config_Icon:SetPoint("LEFT",theFrame.ConfigButton,"RIGHT",2,0)

	theFrame.Config_Text=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Config_Text:SetText(L["Config"])
	theFrame.Config_Text:SetPoint("LEFT",theFrame.Config_Icon,"RIGHT",2,0)

	theFrame.FileButton=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.FileButton)
	theFrame.FileButton:SetPoint("TOP",theFrame.ReportButton,"BOTTOM",0,3)
	theFrame.FileButton:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.Buttons.FileButton = true; Recount:SetupMainWindowButtons() else this:SetChecked(false); Recount.db.profile.MainWindow.Buttons.FileButton = false; Recount:SetupMainWindowButtons() end end)

	theFrame.File_Icon=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.File_Icon:SetWidth(16)
	theFrame.File_Icon:SetHeight(16)
	theFrame.File_Icon:SetTexture("Interface\\Buttons\\UI-GuildButton-PublicNote-Up.blp")
	theFrame.File_Icon:SetPoint("LEFT",theFrame.FileButton,"RIGHT",2,0)

	theFrame.File_Text=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.File_Text:SetText(L["File"])
	theFrame.File_Text:SetPoint("LEFT",theFrame.File_Icon,"RIGHT",2,0)

	theFrame.ResetButton=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.ResetButton)
	theFrame.ResetButton:SetPoint("TOP",theFrame.ConfigButton,"BOTTOM",0,3)
	theFrame.ResetButton:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.Buttons.ResetButton = true; Recount:SetupMainWindowButtons() else this:SetChecked(false); Recount.db.profile.MainWindow.Buttons.ResetButton = false; Recount:SetupMainWindowButtons() end end)

	theFrame.Reset_Icon=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.Reset_Icon:SetWidth(16)
	theFrame.Reset_Icon:SetHeight(16)
	theFrame.Reset_Icon:SetTexture("Interface\\Addons\\Recount\\Textures\\icon-reset")
	theFrame.Reset_Icon:SetPoint("LEFT",theFrame.ResetButton,"RIGHT",2,0)

	theFrame.Reset_Text=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Reset_Text:SetText(L["Reset"])
	theFrame.Reset_Text:SetPoint("LEFT",theFrame.Reset_Icon,"RIGHT",2,0)

	theFrame.LeftButton=CreateFrame("CheckButton",nil,theFrame) -- Elsia: Added paging icon toggle support
	me:ConfigureCheckbox(theFrame.LeftButton)
	theFrame.LeftButton:SetPoint("TOP",theFrame.FileButton,"BOTTOM",0,3)
	theFrame.LeftButton:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.Buttons.LeftButton = true; Recount:SetupMainWindowButtons() else this:SetChecked(false); Recount.db.profile.MainWindow.Buttons.LeftButton = false; Recount:SetupMainWindowButtons() end end)

	theFrame.Left_Icon=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.Left_Icon:SetWidth(16)
	theFrame.Left_Icon:SetHeight(16)
	theFrame.Left_Icon:SetTexture("Interface\\Buttons\\UI-SpellbookIcon-PrevPage-Up.blp")
	theFrame.Left_Icon:SetPoint("LEFT",theFrame.LeftButton,"RIGHT",2,0)

	theFrame.Left_Text=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Left_Text:SetText(L["Previous"])
	theFrame.Left_Text:SetPoint("LEFT",theFrame.Left_Icon,"RIGHT",2,0)

	theFrame.RightButton=CreateFrame("CheckButton",nil,theFrame) -- Elsia: Added paging icon toggle support
	me:ConfigureCheckbox(theFrame.RightButton)
	theFrame.RightButton:SetPoint("TOP",theFrame.ResetButton,"BOTTOM",0,3)
	theFrame.RightButton:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.Buttons.RightButton = true; Recount:SetupMainWindowButtons() else this:SetChecked(false); Recount.db.profile.MainWindow.Buttons.RightButton = false; Recount:SetupMainWindowButtons() end end)

	theFrame.Right_Icon=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.Right_Icon:SetWidth(16)
	theFrame.Right_Icon:SetHeight(16)
	theFrame.Right_Icon:SetTexture("Interface\\Buttons\\UI-SpellbookIcon-NextPage-Up.blp")
	theFrame.Right_Icon:SetPoint("LEFT",theFrame.RightButton,"RIGHT",2,0)

	theFrame.Right_Text=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Right_Text:SetText(L["Next"])
	theFrame.Right_Text:SetPoint("LEFT",theFrame.Right_Icon,"RIGHT",2,0)

	theFrame.CloseButton=CreateFrame("CheckButton",nil,theFrame) -- Elsia: Added paging icon toggle support
	me:ConfigureCheckbox(theFrame.CloseButton)
	theFrame.CloseButton:SetPoint("TOP",theFrame.LeftButton,"BOTTOM",0,3)
	theFrame.CloseButton:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.Buttons.CloseButton = true; Recount:SetupMainWindowButtons() else this:SetChecked(false); Recount.db.profile.MainWindow.Buttons.CloseButton = false; Recount:SetupMainWindowButtons() end end)

	theFrame.Close_Icon=theFrame:CreateTexture(nil,"OVERLAY")
	theFrame.Close_Icon:SetWidth(16)
	theFrame.Close_Icon:SetHeight(16)
	theFrame.Close_Icon:SetTexture("Interface\\Buttons\\UI-Panel-MinimizeButton-Up.blp")
	theFrame.Close_Icon:SetPoint("LEFT",theFrame.CloseButton,"RIGHT",2,0)

	theFrame.Close_Text=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.Close_Text:SetText(L["Close"])
	theFrame.Close_Text:SetPoint("LEFT",theFrame.Close_Icon,"RIGHT",2,0)

	local slider = CreateFrame("Slider", "Recount_ConfigWindow_RowHeight_Slider", theFrame,"OptionsSliderTemplate")
	theFrame.RowHeightSlider=slider
	slider:SetOrientation("HORIZONTAL")
	slider:SetMinMaxValues(8, 35)
	slider:SetValueStep(1)
	slider:SetWidth(180)
	slider:SetHeight(16)
	slider:SetPoint("TOP", theFrame, "TOP", 0, -96-16) -- Elsia: TODO this number will need adjusting to accommodate the paging config change
	slider:SetScript("OnValueChanged",function(this) getglobal(this:GetName().."Text"):SetText(L["Row Height"]..": "..this:GetValue());Recount.db.profile.MainWindow.RowHeight=this:GetValue();Recount:BarsChanged() end)
	getglobal(slider:GetName().."High"):SetText("35");
	getglobal(slider:GetName().."Low"):SetText("8");
	getglobal(slider:GetName().."Text"):SetText(L["Row Height"]..": "..slider:GetValue())

	slider = CreateFrame("Slider", "Recount_ConfigWindow_RowSpacing_Slider", theFrame,"OptionsSliderTemplate")
	theFrame.RowSpacingSlider=slider
	slider:SetOrientation("HORIZONTAL")
	slider:SetMinMaxValues(0, 4)
	slider:SetValueStep(1)
	slider:SetWidth(180)
	slider:SetHeight(16)
	slider:SetPoint("TOP", theFrame, "TOP", 0, -130-16)
	slider:SetScript("OnValueChanged",function(this) getglobal(this:GetName().."Text"):SetText(L["Row Spacing"]..": "..this:GetValue());Recount.db.profile.MainWindow.RowSpacing=this:GetValue();Recount:BarsChanged() end)
	getglobal(slider:GetName().."High"):SetText("4");
	getglobal(slider:GetName().."Low"):SetText("0");
	getglobal(slider:GetName().."Text"):SetText(L["Row Spacing"]..": "..slider:GetValue())

	theFrame.TotalBar=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.TotalBar)
	theFrame.TotalBar:SetPoint("TOPLEFT",theFrame,"TOPLEFT",12,-158-16)
	theFrame.TotalBar:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.HideTotalBar = false; Recount:RefreshMainWindow(); Recount:BarsChanged(); else this:SetChecked(false); Recount.db.profile.MainWindow.HideTotalBar = true; Recount:RefreshMainWindow(); Recount:BarsChanged(); end end)

	theFrame.TotalBarText=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.TotalBarText:SetText(L["Show Total Bar"])
	theFrame.TotalBarText:SetPoint("LEFT",theFrame.TotalBar,"RIGHT",8,0)

	theFrame.ShowSB=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.ShowSB)
	theFrame.ShowSB:SetPoint("TOPLEFT",theFrame,"TOPLEFT",12,-175-16)
	theFrame.ShowSB:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.ShowScrollbar = true; Recount:ShowScrollbarElements("Recount_MainWindow_ScrollBar") else this:SetChecked(false); Recount.db.profile.MainWindow.ShowScrollbar = false; Recount:HideScrollbarElements("Recount_MainWindow_ScrollBar") end Recount:RefreshMainWindow() end)

	theFrame.ShowSBText=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.ShowSBText:SetText(L["Show Scrollbar"])
	theFrame.ShowSBText:SetPoint("LEFT",theFrame.ShowSB,"RIGHT",8,0)
	
	theFrame.AutoHide=CreateFrame("CheckButton",nil,theFrame)
	me:ConfigureCheckbox(theFrame.AutoHide)
	theFrame.AutoHide:SetPoint("TOPLEFT",theFrame,"TOPLEFT",12,-192-16)
	theFrame.AutoHide:SetScript("OnClick",function(this) if this:GetChecked() then this:SetChecked(true); Recount.db.profile.MainWindow.AutoHide = true; else this:SetChecked(false); Recount.db.profile.MainWindow.AutoHide = false; end end)
	theFrame.AutohideText=theFrame:CreateFontString(nil,"OVERLAY","GameFontNormal")
	theFrame.AutohideText:SetText(L["Autohide On Combat"])
	theFrame.AutohideText:SetPoint("LEFT",theFrame.AutoHide,"RIGHT",8,0)

end




function me:ScaleConfigWindow(scale)
	local pointNum=me.ConfigWindow:GetNumPoints()
	local curScale=me.ConfigWindow:GetScale();
	local points={}
	for i=1,pointNum,1 do
		points[i]={};
		points[i][1], points[i][2], points[i][3], points[i][4], points[i][5]=me.ConfigWindow:GetPoint(i)
		points[i][4]=points[i][4]*curScale/scale;
		points[i][5]=points[i][5]*curScale/scale;
	end

	me.ConfigWindow:ClearAllPoints()
	for i=1,pointNum,1 do
		me.ConfigWindow:SetPoint(points[i][1],points[i][2],points[i][3],points[i][4],points[i][5]);
	end

	me.ConfigWindow:SetScale(scale)
end

function me:HideOptions()
	me.ConfigWindow.Data:Hide()
	me.ConfigWindow.Data.Tab.Background:SetVertexColor(1.0,0.2,0.2)
	me.ConfigWindow.Appearance:Hide()
	me.ConfigWindow.Appearance.Tab.Background:SetVertexColor(1.0,0.2,0.2)
	me.ConfigWindow.Window:Hide()
	me.ConfigWindow.Window.Tab.Background:SetVertexColor(1.0,0.2,0.2)
	me.ConfigWindow.ColorOpt:Hide()
	me.ConfigWindow.ColorOpt.Tab.Background:SetVertexColor(1.0,0.2,0.2)
end


function me:CreateDataOptions(parent)
	local theFrame=CreateFrame("FRAME",nil,parent)
	parent.Data=theFrame

	theFrame:SetWidth(600)
	theFrame:SetHeight(200)
	theFrame:SetPoint("TOP",parent,"TOP",0,-22)

	local Tab=CreateFrame("FRAME",nil,parent)
	parent.Data.Tab=Tab

	Tab:SetWidth(100)
	Tab:SetHeight(18)
	Tab:SetPoint("TOPLEFT", parent, "TOPLEFT",4,-35)
	Tab:EnableMouse(true)
	Tab:SetScript("OnMouseDown",function(this) me:HideOptions();theFrame:Show();this.Background:SetVertexColor(0.2,1.0,0.2) end)
	Tab.Text=Tab:CreateFontString(nil,"OVERLAY","GameFontNormal")
	Tab.Text:SetPoint("CENTER",Tab,"CENTER")
	Tab.Text:SetText(L["Data"])
	Tab.Background=Tab:CreateTexture(nil,"BACKGROUND")
	Tab.Background:SetTexture(1,1,1,0.3)
	Tab.Background:SetVertexColor(0.2,1.0,0.2)
	Tab.Background:SetAllPoints(Tab)


	me:SetupFilterOptions(theFrame)
	me:SetupMiscOptions(theFrame)
	me:SetupDeletionOptions(theFrame)
end

function me:CreateAppearanceOptions(parent)
	local theFrame=CreateFrame("FRAME",nil,parent)
	parent.Appearance=theFrame

	theFrame:SetWidth(600)
	theFrame:SetHeight(200)
	theFrame:SetPoint("TOP",parent,"TOP",0,-22)

	local Tab=CreateFrame("FRAME",nil,parent)
	parent.Appearance.Tab=Tab

	Tab:SetWidth(100)
	Tab:SetHeight(18)
	Tab:SetPoint("TOPLEFT", parent, "TOPLEFT",208,-35)
	Tab:EnableMouse(true)
	Tab:SetScript("OnMouseDown",function(this) me:HideOptions();theFrame:Show();this.Background:SetVertexColor(0.2,1.0,0.2) end)
	Tab.Text=Tab:CreateFontString(nil,"OVERLAY","GameFontNormal")
	Tab.Text:SetPoint("CENTER",Tab,"CENTER")
	Tab.Text:SetText(L["Appearance"])
	Tab.Background=Tab:CreateTexture(nil,"BACKGROUND")
	Tab.Background:SetTexture(1,1,1,0.3)
	Tab.Background:SetVertexColor(1.0,0.2,0.2)
	Tab.Background:SetAllPoints(Tab)

	me:CreateBarSelection(theFrame)
	me:CreateTextureSelection(theFrame)
	me:CreateFontSelection(theFrame)
	theFrame:Hide()
end

function me:CreateColorOptions(parent)
	local theFrame=CreateFrame("FRAME",nil,parent)
	parent.ColorOpt=theFrame

	theFrame:SetWidth(600)
	theFrame:SetHeight(200)
	theFrame:SetPoint("TOP",parent,"TOP",0,-22)

	local Tab=CreateFrame("FRAME",nil,parent)
	parent.ColorOpt.Tab=Tab

	Tab:SetWidth(100)
	Tab:SetHeight(18)
	Tab:SetPoint("TOPLEFT", parent, "TOPLEFT",310,-35) -- Elsia: Check tab offset
	Tab:EnableMouse(true)
	Tab:SetScript("OnMouseDown",function(this) me:HideOptions();theFrame:Show();this.Background:SetVertexColor(0.2,1.0,0.2) end)
	Tab.Text=Tab:CreateFontString(nil,"OVERLAY","GameFontNormal")
	Tab.Text:SetPoint("CENTER",Tab,"CENTER")
	Tab.Text:SetText(L["Color"])
	Tab.Background=Tab:CreateTexture(nil,"BACKGROUND")
	Tab.Background:SetTexture(1,1,1,0.3)
	Tab.Background:SetVertexColor(1.0,0.2,0.2)
	Tab.Background:SetAllPoints(Tab)

	me:CreateWindowColorSelection(theFrame)
	me:CreateClassColorSelection(theFrame)
	theFrame:Hide()
end



function me:CreateWindowOptions(parent)
	local theFrame=CreateFrame("FRAME",nil,parent)
	parent.Window=theFrame

	local Tab=CreateFrame("FRAME",nil,parent)
	parent.Window.Tab=Tab

	Tab:SetWidth(100)
	Tab:SetHeight(18)
	Tab:SetPoint("TOPLEFT", parent, "TOPLEFT",106,-35)
	Tab:EnableMouse(true)
	Tab:SetScript("OnMouseDown",function(this) me:HideOptions();theFrame:Show();this.Background:SetVertexColor(0.2,1.0,0.2) end)
	Tab.Text=Tab:CreateFontString(nil,"OVERLAY","GameFontNormal")
	Tab.Text:SetPoint("CENTER",Tab,"CENTER")
	Tab.Text:SetText(L["Window"])
	Tab.Background=Tab:CreateTexture(nil,"BACKGROUND")
	Tab.Background:SetTexture(1,1,1,0.3)
	Tab.Background:SetVertexColor(1.0,0.2,0.2)
	Tab.Background:SetAllPoints(Tab)

	theFrame:SetWidth(600)
	theFrame:SetHeight(200)
	theFrame:SetPoint("TOP",parent,"TOP",0,-22)

	me:SetupButtonOptions(theFrame)
	me:SetupWindowOptions(theFrame)
	me:SetupRealtimeOptions(theFrame)
	theFrame:Hide()
end

function me:CreateConfigWindow()
	me.ConfigWindow=Recount:CreateFrame("Recount_ConfigWindow",L["Config Recount"],286,600)

	local theFrame=me.ConfigWindow
	
	Recount.Colors:RegisterTexture("Other Windows","Title",Graph:DrawLine(theFrame,200,12,200,233,24,{0.5,0.0,0.0,1.0},"ARTWORK"),{r=0.5,g=0.5,b=0.5,a=1}) -- Elsia: Changed 32->12 for longer separators given no save/revert
	Recount.Colors:RegisterTexture("Other Windows","Title",Graph:DrawLine(theFrame,400,12,400,233,24,{0.5,0.0,0.0,1.0},"ARTWORK"),{r=0.5,g=0.5,b=0.5,a=1})
	Recount.Colors:RegisterTexture("Other Windows","Title",Graph:DrawLine(theFrame,2,233,598,233,24,{0.5,0.0,0.0,1.0},"ARTWORK"),{r=0.5,g=0.5,b=0.5,a=1})

	theFrame:Hide()

	me:CreateDataOptions(theFrame)
	me:CreateAppearanceOptions(theFrame)
	me:CreateWindowOptions(theFrame)
	me:CreateColorOptions(theFrame)
	
	--Need to add it to our window ordering system
	Recount:AddWindow(theFrame)
	Recount:LockWindows(Recount.db.profile.Locked)
	Recount.ConfigWindow = theFrame
end

function me:LoadConfig()
	for k, v in pairs(me.FilterOptions.Filters) do
		v.ShowData:SetChecked(Recount.db.profile.Filters.Show[k])
		v.RecordData:SetChecked(Recount.db.profile.Filters.Data[k])
		v.RecordTime:SetChecked(Recount.db.profile.Filters.TimeData[k])
		v.TrackDeaths:SetChecked(Recount.db.profile.Filters.TrackDeaths[k])		
	end

	me.MiscOptions.GlobalData:SetChecked(Recount.db.profile.GlobalDataCollect)
	me.MiscOptions.HideCollect:SetChecked(Recount.db.profile.HideCollect)
	me.DeletionOptions.SegmentBosses:SetChecked(Recount.db.profile.SegmentBosses)
	
	for k, v in pairs(ZoneLabels) do
		me.MiscOptions[k]:SetChecked(Recount.db.profile.ZoneFilters[k])
		if Recount.db.profile.GlobalDataCollect then
		   me.MiscOptions[k]:Enable()
		else				
		   me.MiscOptions[k]:Disable()
		end
	end
	
	for k, v in ipairs(GroupLabels) do
		me.MiscOptions[k]:SetChecked(Recount.db.profile.GroupFilters[k])
		if Recount.db.profile.GlobalDataCollect then
		   me.MiscOptions[k]:Enable()
		else				
		   me.MiscOptions[k]:Disable()
		end
	end

	for k, v in pairs(Recount.db.profile.MainWindow.Buttons) do
		me.ButtonOptions[k]:SetChecked(v)
	end

	me.ButtonOptions.RowHeightSlider:SetValue(Recount.db.profile.MainWindow.RowHeight)
	me.ButtonOptions.RowSpacingSlider:SetValue(Recount.db.profile.MainWindow.RowSpacing)
	me.ButtonOptions.AutoHide:SetChecked(Recount.db.profile.MainWindow.AutoHide)
	me.ButtonOptions.TotalBar:SetChecked(not Recount.db.profile.MainWindow.HideTotalBar)
	me.ButtonOptions.ShowSB:SetChecked(Recount.db.profile.MainWindow.ShowScrollbar)
	
	me.WindowOptions.ScalingSlider:SetValue(Recount.db.profile.Scaling)
--	me.WindowOptions.ShowCurAndLast:SetChecked(Recount.db.profile.Window.ShowCurAndLast)
	me.WindowOptions.LockWin:SetChecked(Recount.db.profile.Locked)

--	me.MiscOptions.Sync:SetChecked(Recount.db.profile.EnableSync)

	me.DeletionOptions.Autodelete:SetChecked(Recount.db.profile.AutoDelete)
	me.DeletionOptions.AutodeleteI:SetChecked(Recount.db.profile.AutoDeleteNewInstance)
	me.DeletionOptions.AutodeleteIConf:SetChecked(Recount.db.profile.ConfirmDeleteInstance)
	me.DeletionOptions.AutodeleteINew:SetChecked(Recount.db.profile.DeleteNewInstanceOnly)
	me.DeletionOptions.AutodeleteG:SetChecked(Recount.db.profile.DeleteJoinGroup)
	me.DeletionOptions.AutodeleteGConf:SetChecked(Recount.db.profile.ConfirmDeleteGroup)
	me.DeletionOptions.AutodeleteR:SetChecked(Recount.db.profile.DeleteJoinRaid)
	me.DeletionOptions.AutodeleteRConf:SetChecked(Recount.db.profile.ConfirmDeleteRaid)

	
	me.FilterOptions.MergePets:SetChecked(Recount.db.profile.MergePets)

	me:ScaleConfigWindow(Recount.db.profile.Scaling)
	
	me.BarOptions.RankNum:SetChecked(Recount.db.profile.MainWindow.BarText.RankNum)
	me.BarOptions.PerSec:SetChecked(Recount.db.profile.MainWindow.BarText.PerSec)
	me.BarOptions.Percent:SetChecked(Recount.db.profile.MainWindow.BarText.Percent)

	me.BarOptions.Standard:SetChecked(Recount.db.profile.MainWindow.BarText.NumFormat == 1)
	me.BarOptions.Commas:SetChecked(Recount.db.profile.MainWindow.BarText.NumFormat == 2)
	me.BarOptions.Short:SetChecked(Recount.db.profile.MainWindow.BarText.NumFormat == 3)
end

function me:SaveFilterConfig()
	for k, v in pairs(me.FilterOptions.Filters) do
		Recount.db.profile.Filters.Show[k]=v.ShowData:GetChecked()==1
		Recount.db.profile.Filters.Data[k]=v.RecordData:GetChecked()==1
		Recount.db.profile.Filters.TimeData[k]=v.RecordTime:GetChecked()==1
		Recount.db.profile.Filters.TrackDeaths[k]=v.TrackDeaths:GetChecked()==1
	end
	Recount:IsTimeDataActive()
	Recount:FullRefreshMainWindow()
end

function Recount:ShowConfig()
	if type(me.ConfigWindow)=="nil" then
		me:CreateConfigWindow()
	end
	me:LoadConfig()
	me.ConfigWindow:Show()
end


function Recount:ConfigWindowStatus()
	local below
	local above

	if me.ConfigWindow.Below then
		below = me.ConfigWindow.Below:GetName()
	else
		below = "(nil)"
	end

	if me.ConfigWindow.Above then
		above = me.ConfigWindow.Above:GetName()
	else
		above = "(nil)"
	end

	Recount:Print(below.." Config "..above)
end

function Recount:SetGlobalDataCollect(checked)

	 local this
	 local theFrame

	 if me.MiscOptions then
	    this = me.MiscOptions.GlobalData
	    theFrame = me.MiscOptions
	 end

	 if checked then
	    if this then
	       this:SetChecked(true)
	       for k,_ in pairs(ZoneLabels) do
	       	   theFrame[k]:Enable()
	       end
	       for k,_ in ipairs(GroupLabels) do
	       	   theFrame[k]:Enable()
	       end
	    end
	    Recount.db.profile.GlobalDataCollect = true

	    if Recount.db.profile.HideCollect then
	       Recount.MainWindow:Show()
	       Recount:RefreshMainWindow()
	    end
	 else
	    if this then
	       this:SetChecked(false)
	       for k,_ in pairs(ZoneLabels) do
		  theFrame[k]:Disable()
	       end
	       for k,_ in ipairs(GroupLabels) do
	       	   theFrame[k]:Disable()
	       end
	    end
	    Recount.db.profile.GlobalDataCollect = false;

	    if Recount.db.profile.HideCollect then
	       Recount.MainWindow:Hide()
	    end
	 end
end
