---------------------------------------------------------------------------------
--
-- Prat - A framework for World of Warcraft chat mods
--
-- Copyright (C) 2006-2018  Prat Development Team
--
-- This program is free software; you can redistribute it and/or
-- modify it under the terms of the GNU General Public License
-- as published by the Free Software Foundation; either version 2
-- of the License, or (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program; if not, write to:
--
-- Free Software Foundation, Inc.,
-- 51 Franklin Street, Fifth Floor,
-- Boston, MA  02110-1301, USA.
--
--
-------------------------------------------------------------------------------




Prat:AddModuleToLoad(function()

  local PRAT_MODULE = Prat:RequestModuleName("History")

  if PRAT_MODULE == nil then
    return
  end

  local module = Prat:NewModule(PRAT_MODULE, "AceHook-3.0")

  local PL = module.PL

  --[==[@debug@
  PL:AddLocale(PRAT_MODULE, "enUS", {
    ["History"] = true,
    ["Chat history options."] = true,
    ["Set Chat Lines"] = true,
    ["Set the number of lines of chat history for each window."] = true,
    ["Set Command History"] = true,
    ["Maximum number of lines of command history to save."] = true,
    ["Save Command History"] = true,
    ["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = true,
    ["Scrollback"] = true,
    ["Store the chat lines between sessions"] = true,
    ["Scrollback Options"] = true,
    ["Command History Options"] = true,
    divider = "========== End of Scrollback ==========",
    scrollbackduration_name = "Scrollback Duration",
    scrollbackduration_desc = "How many hours to keep the saved messages.",
    ["Colors the GMOTD label"] = true,
    ["Color GMOTD"] = true,
    delaygmotd_name = "Delay GMOTD",
    delaygmotd_desc = "Delay GMOTD until after all the startup spam",
    bnet_removed = "<BNET REMOVED>",
    removespam_name = "Remove Spam",
    removespam_desc = "Remove addon spam messages when restoring the chat history"
  })
  --@end-debug@]==]

  -- These Localizations are auto-generated. To help with localization
  -- please go to http://www.wowace.com/projects/prat-3-0/localization/
  --@non-debug@
 do
     local L


L = {
	["History"] = {
		["bnet_removed"] = "<BNET REMOVED>",
		["Chat history options."] = true,
		["Color GMOTD"] = true,
		["Colors the GMOTD label"] = true,
		["Command History Options"] = true,
		["delaygmotd_desc"] = "Delay GMOTD until after all the startup spam",
		["delaygmotd_name"] = "Delay GMOTD",
		["divider"] = "========== End of Scrollback ==========",
		["History"] = true,
		["Maximum number of lines of command history to save."] = true,
		["removespam_desc"] = "Remove addon spam messages when restoring the chat history",
		["removespam_name"] = "Remove Spam",
		["Save Command History"] = true,
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = true,
		["Scrollback"] = true,
		["Scrollback Options"] = true,
		["scrollbackduration_desc"] = "How many hours to keep the saved messages.",
		["scrollbackduration_name"] = "Scrollback Duration",
		["scrollbacklen_desc"] = "Number of chatlines to save in the scrollback buffer.",
		["scrollbacklen_name"] = "Scrollback Length",
		["Set Chat Lines"] = true,
		["Set Command History"] = true,
		["Set the number of lines of chat history for each window."] = true,
		["storage_char"] = "Character",
		["storage_desc"] = "Which location should the history be saved to.",
		["storage_name"] = "Save To",
		["storage_server"] = "Server",
		["Store the chat lines between sessions"] = true,
	}
}


   PL:AddLocale(PRAT_MODULE, "enUS",L)


L = {
	["History"] = {
		--[[Translation missing --]]
		["bnet_removed"] = "<BNET REMOVED>",
		["Chat history options."] = "Option de l'historique.",
		--[[Translation missing --]]
		["Color GMOTD"] = "Color GMOTD",
		--[[Translation missing --]]
		["Colors the GMOTD label"] = "Colors the GMOTD label",
		--[[Translation missing --]]
		["Command History Options"] = "Command History Options",
		["delaygmotd_desc"] = "Afficher le message du jour de la guilde après tous les autres messages lors de la connexion.",
		--[[Translation missing --]]
		["delaygmotd_name"] = "Delay GMOTD",
		["divider"] = "========== Fin de l'historique ==========",
		["History"] = "Historique",
		["Maximum number of lines of command history to save."] = "Nombre maximum de lignes de commande à sauvegarder dans l'historique.",
		--[[Translation missing --]]
		["removespam_desc"] = "Remove addon spam messages when restoring the chat history",
		--[[Translation missing --]]
		["removespam_name"] = "Remove Spam",
		["Save Command History"] = "Historique de commandes",
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = "Sauvegarde l'historique des commandes entre les sessions (à utiliser avec alt+haut ou juste haut)",
		--[[Translation missing --]]
		["Scrollback"] = "Scrollback",
		--[[Translation missing --]]
		["Scrollback Options"] = "Scrollback Options",
		--[[Translation missing --]]
		["scrollbackduration_desc"] = "How many hours to keep the saved messages.",
		--[[Translation missing --]]
		["scrollbackduration_name"] = "Scrollback Duration",
		["scrollbacklen_desc"] = "Nombre de lignes de discussions à sauvegarder dans l'historique.",
		["scrollbacklen_name"] = "Taille de l'historique",
		["Set Chat Lines"] = "Historique de discussions",
		["Set Command History"] = "Historique de commandes",
		["Set the number of lines of chat history for each window."] = "Définit le nombre de lignes dans l'historique pour chaque fenêtre.",
		--[[Translation missing --]]
		["storage_char"] = "Character",
		--[[Translation missing --]]
		["storage_desc"] = "Which location should the history be saved to.",
		--[[Translation missing --]]
		["storage_name"] = "Save To",
		--[[Translation missing --]]
		["storage_server"] = "Server",
		["Store the chat lines between sessions"] = "Sauvegarder l'historique des discussions entre les sessions.",
	}
}


   PL:AddLocale(PRAT_MODULE, "frFR",L)


L = {
	["History"] = {
		["bnet_removed"] = "<BNET ENTFERNT>",
		["Chat history options."] = "Optionen zum Chatverlauf.",
		["Color GMOTD"] = "Farbe der Gildennachricht des Tages",
		["Colors the GMOTD label"] = "Färbt die Gildennachricht des Tages-Beschriftung",
		["Command History Options"] = "Befehlsverlaufsoptionen",
		["delaygmotd_desc"] = "GMOTD verzögern, bis die Ausgabe aller Mitteilungen nach dem Einloggen vollendet ist.",
		["delaygmotd_name"] = "GMOTD verzögern",
		["divider"] = "========== Ende des Zurückblättern ==========",
		["History"] = "Verlauf",
		["Maximum number of lines of command history to save."] = "Maximal zu speichernde Zeilenanzahl des Befehlsverlaufs.",
		["removespam_desc"] = "Entfernt Addon Spam-Nachrichten, wenn du den Chat-Verlauf wiederherstellst",
		["removespam_name"] = "Spam entfernen",
		["Save Command History"] = "Befehlsverlauf speichern",
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = "Speichert Befehlsverlauf zwischen Sitzungen (um mit Alt + \"Pfeil nach oben\" oder nur \"Pfeil nach oben\" verwendet zu werden).",
		["Scrollback"] = "Zurückblättern",
		["Scrollback Options"] = "Optionen für das Zurückblättern",
		["scrollbackduration_desc"] = "Wie viele Stunden, um die gespeicherten Nachrichten zu speichern.",
		["scrollbackduration_name"] = "Dauer vom Zurückblättern",
		["scrollbacklen_desc"] = "Anzahl der Chat-Zeilen, die im Zurückblättern Puffer gespeichert werden sollen.",
		["scrollbacklen_name"] = "Länge vom Zurückblättern",
		["Set Chat Lines"] = "Chatzeilen einstellen",
		["Set Command History"] = "Befehlsverlauf einstellen",
		["Set the number of lines of chat history for each window."] = "Die Zeilenanzahl des Chatverlaufs für jedes Fenster einstellen.",
		["storage_char"] = "Charakter",
		["storage_desc"] = "An welchem Ort soll der Verlauf gespeichert werden?",
		["storage_name"] = "Speichern unter",
		["storage_server"] = "Server",
		["Store the chat lines between sessions"] = "Speichert die Chat-Zeilen zwischen den Sitzungen",
	}
}


   PL:AddLocale(PRAT_MODULE, "deDE",L)


L = {
	["History"] = {
		["bnet_removed"] = "<베틀넷 제거됨>",
		["Chat history options."] = "대화 내역 옵션입니다.",
		["Color GMOTD"] = "오늘의 길드 메시지에 색상입히기",
		["Colors the GMOTD label"] = "오늘의 길드 메시지 제목에 색상입히기",
		["Command History Options"] = "명령어 내역 옵션",
		["delaygmotd_desc"] = "모든 시작 스팸이 표시 될때까지 오늘의 길드 메시지 지연시키기",
		["delaygmotd_name"] = "오늘의 길드 메시지 지연",
		["divider"] = "========== 이전 대화 목록의 끝 ==========",
		["History"] = "내역 [History]",
		["Maximum number of lines of command history to save."] = "저장할 명령어 내역의 최대 갯수입니다.",
		["removespam_desc"] = "채팅 기록을 복원 할 때 애드온 스팸 메시지 제거",
		["removespam_name"] = "스팸 제거",
		["Save Command History"] = "명령어 내역 저장",
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = "세션 간 명령어 내역을 저장합니다 (Alt+위 화살표나 위 화살표로 사용하는)",
		["Scrollback"] = "스크롤백",
		["Scrollback Options"] = "스크롤백 옵션",
		["scrollbackduration_desc"] = "저장된 메시지를 보관할 시간.",
		["scrollbackduration_name"] = "스크롤백 구간",
		["scrollbacklen_desc"] = "스크롤백 저장소에 저장할 대화 줄의 숫자입니다.",
		["scrollbacklen_name"] = "스크롤백 길이",
		["Set Chat Lines"] = "대화 내역 설정",
		["Set Command History"] = "명령어 내역 설정",
		["Set the number of lines of chat history for each window."] = "각 대화창 별로 대화 내역의 줄의 갯수를 설정합니다.",
		["storage_char"] = "캐릭터",
		["storage_desc"] = "기록을 저장할 위치",
		["storage_name"] = "저장",
		["storage_server"] = "서버",
		["Store the chat lines between sessions"] = "세션 간 대화 내용 저장하기",
	}
}


   PL:AddLocale(PRAT_MODULE, "koKR",L)


L = {
	["History"] = {
		--[[Translation missing --]]
		["bnet_removed"] = "<BNET REMOVED>",
		--[[Translation missing --]]
		["Chat history options."] = "Chat history options.",
		--[[Translation missing --]]
		["Color GMOTD"] = "Color GMOTD",
		--[[Translation missing --]]
		["Colors the GMOTD label"] = "Colors the GMOTD label",
		--[[Translation missing --]]
		["Command History Options"] = "Command History Options",
		--[[Translation missing --]]
		["delaygmotd_desc"] = "Delay GMOTD until after all the startup spam",
		--[[Translation missing --]]
		["delaygmotd_name"] = "Delay GMOTD",
		--[[Translation missing --]]
		["divider"] = "========== End of Scrollback ==========",
		--[[Translation missing --]]
		["History"] = "History",
		--[[Translation missing --]]
		["Maximum number of lines of command history to save."] = "Maximum number of lines of command history to save.",
		--[[Translation missing --]]
		["removespam_desc"] = "Remove addon spam messages when restoring the chat history",
		--[[Translation missing --]]
		["removespam_name"] = "Remove Spam",
		--[[Translation missing --]]
		["Save Command History"] = "Save Command History",
		--[[Translation missing --]]
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = "Saves command history between sessions (for use with alt+up arrow or just the up arrow)",
		--[[Translation missing --]]
		["Scrollback"] = "Scrollback",
		--[[Translation missing --]]
		["Scrollback Options"] = "Scrollback Options",
		--[[Translation missing --]]
		["scrollbackduration_desc"] = "How many hours to keep the saved messages.",
		--[[Translation missing --]]
		["scrollbackduration_name"] = "Scrollback Duration",
		--[[Translation missing --]]
		["scrollbacklen_desc"] = "Number of chatlines to save in the scrollback buffer.",
		--[[Translation missing --]]
		["scrollbacklen_name"] = "Scrollback Length",
		--[[Translation missing --]]
		["Set Chat Lines"] = "Set Chat Lines",
		--[[Translation missing --]]
		["Set Command History"] = "Set Command History",
		--[[Translation missing --]]
		["Set the number of lines of chat history for each window."] = "Set the number of lines of chat history for each window.",
		--[[Translation missing --]]
		["storage_char"] = "Character",
		--[[Translation missing --]]
		["storage_desc"] = "Which location should the history be saved to.",
		--[[Translation missing --]]
		["storage_name"] = "Save To",
		--[[Translation missing --]]
		["storage_server"] = "Server",
		--[[Translation missing --]]
		["Store the chat lines between sessions"] = "Store the chat lines between sessions",
	}
}


   PL:AddLocale(PRAT_MODULE, "esMX",L)


L = {
	["History"] = {
		["bnet_removed"] = "<BNET УДАЛЕН>",
		["Chat history options."] = "Настройки истории чата.",
		["Color GMOTD"] = "Цвет  GMOTD",
		["Colors the GMOTD label"] = "Цвета названия СДГ",
		["Command History Options"] = "Параметры истории команд",
		["delaygmotd_desc"] = "Задерживать отображение СДГ вплоть до окончания спама при входе в игру",
		["delaygmotd_name"] = "задержка GMOTD",
		["divider"] = "========== Конец истории сообщений ==========",
		["History"] = "История",
		["Maximum number of lines of command history to save."] = "Максимальное число строк сохранённых в истории команд.",
		["removespam_desc"] = "Удалять спам-сообщения аддона при восстановлении истории чата",
		["removespam_name"] = "Удалить спам",
		["Save Command History"] = "Сохранять историю команд",
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = "Сохранять историю команд между сеансами (для использования используйте alt+ стрелка вверх или просто стрелку вверх)",
		["Scrollback"] = "История сообщений",
		["Scrollback Options"] = "Вернуть опции",
		["scrollbackduration_desc"] = "Сколько часов хранить сохраненные сообщения.",
		["scrollbackduration_name"] = "Длительность прокрутки",
		["scrollbacklen_desc"] = "Количество строк чата, которое надо сохранять в буфере истории сообщений.",
		["scrollbacklen_name"] = "Длина истории сообщений",
		["Set Chat Lines"] = "Задать число строк чата",
		["Set Command History"] = "История команд",
		["Set the number of lines of chat history for each window."] = "Установите число строк истории чата для всех окон чата.",
		["storage_char"] = "Персонаж",
		["storage_desc"] = "В какое место следует сохранять историю.",
		["storage_name"] = "Сохранить В",
		["storage_server"] = "Сервер ",
		["Store the chat lines between sessions"] = "Сохранять строки чата между сессиями",
	}
}


   PL:AddLocale(PRAT_MODULE, "ruRU",L)


L = {
	["History"] = {
		--[[Translation missing --]]
		["bnet_removed"] = "<BNET REMOVED>",
		["Chat history options."] = "历史聊天记录选项",
		["Color GMOTD"] = "每日公会信息颜色",
		["Colors the GMOTD label"] = "为每日公会信息标签着色",
		--[[Translation missing --]]
		["Command History Options"] = "Command History Options",
		["delaygmotd_desc"] = "延迟每日公会信息直到起始垃圾信息显示完毕为止",
		["delaygmotd_name"] = "延迟 GMOTD",
		["divider"] = "========== 回卷结束 ==========",
		["History"] = "历史记录",
		["Maximum number of lines of command history to save."] = "存储命令记录最大行数",
		--[[Translation missing --]]
		["removespam_desc"] = "Remove addon spam messages when restoring the chat history",
		--[[Translation missing --]]
		["removespam_name"] = "Remove Spam",
		["Save Command History"] = "命令记录存储",
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = "存储会话之间命令的历史记录(使用alt+上箭头键或仅上箭头键)",
		["Scrollback"] = "回卷",
		["Scrollback Options"] = "回滚选项",
		--[[Translation missing --]]
		["scrollbackduration_desc"] = "How many hours to keep the saved messages.",
		--[[Translation missing --]]
		["scrollbackduration_name"] = "Scrollback Duration",
		["scrollbacklen_desc"] = "聊天内容回滚缓冲数量",
		["scrollbacklen_name"] = "回卷长度",
		["Set Chat Lines"] = "聊天行设置",
		["Set Command History"] = "命令历史记录",
		["Set the number of lines of chat history for each window."] = "为每个聊天窗口设置聊天历史记录行数",
		--[[Translation missing --]]
		["storage_char"] = "Character",
		--[[Translation missing --]]
		["storage_desc"] = "Which location should the history be saved to.",
		--[[Translation missing --]]
		["storage_name"] = "Save To",
		--[[Translation missing --]]
		["storage_server"] = "Server",
		["Store the chat lines between sessions"] = "在会话之间存储聊天内容",
	}
}


   PL:AddLocale(PRAT_MODULE, "zhCN",L)


L = {
	["History"] = {
		--[[Translation missing --]]
		["bnet_removed"] = "<BNET REMOVED>",
		["Chat history options."] = "Opciones del historial del chat.",
		--[[Translation missing --]]
		["Color GMOTD"] = "Color GMOTD",
		--[[Translation missing --]]
		["Colors the GMOTD label"] = "Colors the GMOTD label",
		--[[Translation missing --]]
		["Command History Options"] = "Command History Options",
		--[[Translation missing --]]
		["delaygmotd_desc"] = "Delay GMOTD until after all the startup spam",
		--[[Translation missing --]]
		["delaygmotd_name"] = "Delay GMOTD",
		["divider"] = "========== Fin del Registro ==========",
		["History"] = "Historial",
		["Maximum number of lines of command history to save."] = "Máximo número de líneas a guardar por el comando historial.",
		--[[Translation missing --]]
		["removespam_desc"] = "Remove addon spam messages when restoring the chat history",
		--[[Translation missing --]]
		["removespam_name"] = "Remove Spam",
		["Save Command History"] = "Comando Guardar Historial",
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = "Guarda el historial de comandos entre sesiones (para utilizar con alt+flecha arriba o sólo la flecha arriba)",
		--[[Translation missing --]]
		["Scrollback"] = "Scrollback",
		--[[Translation missing --]]
		["Scrollback Options"] = "Scrollback Options",
		--[[Translation missing --]]
		["scrollbackduration_desc"] = "How many hours to keep the saved messages.",
		--[[Translation missing --]]
		["scrollbackduration_name"] = "Scrollback Duration",
		--[[Translation missing --]]
		["scrollbacklen_desc"] = "Number of chatlines to save in the scrollback buffer.",
		--[[Translation missing --]]
		["scrollbacklen_name"] = "Scrollback Length",
		["Set Chat Lines"] = "Establecer Líneas de Chat",
		["Set Command History"] = "Establecer Historial de Comandos",
		["Set the number of lines of chat history for each window."] = "Establece el número de líneas del historial de chat para cada ventana.",
		--[[Translation missing --]]
		["storage_char"] = "Character",
		--[[Translation missing --]]
		["storage_desc"] = "Which location should the history be saved to.",
		--[[Translation missing --]]
		["storage_name"] = "Save To",
		--[[Translation missing --]]
		["storage_server"] = "Server",
		--[[Translation missing --]]
		["Store the chat lines between sessions"] = "Store the chat lines between sessions",
	}
}


   PL:AddLocale(PRAT_MODULE, "esES",L)


L = {
	["History"] = {
		--[[Translation missing --]]
		["bnet_removed"] = "<BNET REMOVED>",
		["Chat history options."] = "歷史訊息選項。",
		["Color GMOTD"] = "顏色 GMOTD",
		["Colors the GMOTD label"] = "顏色 GMOTD 標籤",
		--[[Translation missing --]]
		["Command History Options"] = "Command History Options",
		--[[Translation missing --]]
		["delaygmotd_desc"] = "Delay GMOTD until after all the startup spam",
		["delaygmotd_name"] = "延遲 GMOTD",
		["divider"] = "========== 捲動結束 ==========",
		["History"] = "歷史訊息",
		["Maximum number of lines of command history to save."] = "最大行數的指令記錄儲存。",
		--[[Translation missing --]]
		["removespam_desc"] = "Remove addon spam messages when restoring the chat history",
		--[[Translation missing --]]
		["removespam_name"] = "Remove Spam",
		["Save Command History"] = "儲存指令歷史",
		--[[Translation missing --]]
		["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"] = "Saves command history between sessions (for use with alt+up arrow or just the up arrow)",
		["Scrollback"] = "捲動",
		["Scrollback Options"] = "捲動選項",
		--[[Translation missing --]]
		["scrollbackduration_desc"] = "How many hours to keep the saved messages.",
		--[[Translation missing --]]
		["scrollbackduration_name"] = "Scrollback Duration",
		--[[Translation missing --]]
		["scrollbacklen_desc"] = "Number of chatlines to save in the scrollback buffer.",
		["scrollbacklen_name"] = "捲動長度",
		["Set Chat Lines"] = "設定聊天行數",
		["Set Command History"] = "設定指令歷史",
		["Set the number of lines of chat history for each window."] = "設定行數的聊天記錄每個視窗。",
		--[[Translation missing --]]
		["storage_char"] = "Character",
		--[[Translation missing --]]
		["storage_desc"] = "Which location should the history be saved to.",
		--[[Translation missing --]]
		["storage_name"] = "Save To",
		--[[Translation missing --]]
		["storage_server"] = "Server",
		--[[Translation missing --]]
		["Store the chat lines between sessions"] = "Store the chat lines between sessions",
	}
}


   PL:AddLocale(PRAT_MODULE, "zhTW",L)
 end
 --@end-non-debug@

  Prat:SetModuleDefaults(module.name, {
    profile = {
      on = true,
      chatlinesframes = {},
      chatlines = 384,
      maxlines = 50,
      scrollbackduration = 24,
      savehistory = false,
      scrollback = true,
      removespam = true,
      colorgmotd = true,
      delaygmotd = true,
    }
  })

  module.pluginopts = {}

  Prat:SetModuleOptions(module.name, {
    name = PL["History"],
    desc = PL["Chat history options."],
    type = "group",
    plugins = module.pluginopts,
    args = {
      chatlinesframes = {
        name = PL["Set Chat Lines"],
        desc = PL["Set the number of lines of chat history for each window."],
        type = "multiselect",
        values = Prat.HookedFrameList,
        get = "GetSubValue",
        set = "SetSubValue"
      },
      chatlines = {
        name = PL["Set Chat Lines"],
        desc = PL["Set the number of lines of chat history for each window."],
        type = "range",
        order = 120,
        min = 300,
        max = 5000,
        step = 10,
        bigStep = 50,
      },
      cmdhistheader = {
        name = PL["Command History Options"],
        type = "header",
        order = 130,
      },
      maxlines = {
        name = PL["Set Command History"],
        desc = PL["Maximum number of lines of command history to save."],
        type = "range",
        order = 132,
        min = 0,
        max = 500,
        step = 10,
        bigStep = 50,
        disabled = function() return not module.db.profile.savehistory end
      },
      savehistory = {
        name = PL["Save Command History"],
        desc = PL["Saves command history between sessions (for use with alt+up arrow or just the up arrow)"],
        type = "toggle",
        order = 131,
      },
--      colorgmotd = {
--        name = PL["Color GMOTD"],
--        desc = PL["Colors the GMOTD label"],
--        type = "toggle",
--        order = 150,
--      },
--      delaygmotd = {
--        name = PL.delaygmotd_name,
--        desc = PL.delaygmotd_desc,
--        type = "toggle",
--        order = 151
--      }
    }
  })


  local function applyEditBox(func)
    for i = 1, NUM_CHAT_WINDOWS do
      local f = _G["ChatFrame" .. i .. "EditBox"]
      func(f)
    end
  end

  --[[------------------------------------------------
      Module Event Functions
  ------------------------------------------------]] --

  -- things to do when the module is enabled
  function module:OnModuleEnable()


    Prat3CharDB = Prat3CharDB or {}
    Prat3CharDB.history = Prat3CharDB.history or {}
    Prat3CharDB.history.cmdhistory = Prat3CharDB.history.cmdhistory or {}


    --                if self.db.profile.cmdhistory then
    --                    Prat3CharDB.history.cmdhistory = self.db.profile.cmdhistory
    --                    self.db.profile.cmdhistory = nil
    --                end



    for i, v in ipairs(Prat3CharDB.history.cmdhistory) do
      if (type(v) == "string" and v:sub(1, 9) ~= "ChatFrame") then
        Prat3CharDB.history.cmdhistory[i] = nil
      end
    end

    applyEditBox(function(edit)
      local name = edit:GetName()
      Prat3CharDB.history.cmdhistory[name] = Prat3CharDB.history.cmdhistory[name] or {}
    end)


    self:ConfigureAllChatFrames()


    for k in pairs(Prat3CharDB.history.cmdhistory) do
      local edit = _G[k]
      if (edit) then
        self:SecureHook(edit, "AddHistoryLine")
        if self.db.profile.savehistory then
          self:addSavedHistory(edit)
        end
        self:SecureHook(edit, "ClearHistory")
      end
    end


    -- Clean out any old data
    if self.db.profile.cmdhistory then
      self.db.profile.cmdhistory = nil
    end



--    if IsInGuild() then
--      self.frame = self.frame or CreateFrame("Frame")
--
--      if self.db.profile.delaygmotd then
--        self:DelayGMOTD(self.frame)
--      end
--
--      if self.db.profile.colorgmotd then
--        local a, b = strsplit(":", GUILD_MOTD_TEMPLATE)
--        if a and b then
--          GUILD_MOTD_TEMPLATE = "|cffffffff" .. a .. "|r:" .. b
--        end
--      end
--    end
  end


  function module:GetDescription()
    return PL["Chat history options."]
  end

  -- things to do when the module is enabled
  function module:OnModuleDisable()
    self:ConfigureAllChatFrames(384)
  end

  function module:ConfigureAllChatFrames(lines)
    local lines = lines or self.db.profile.chatlines

    for k, v in pairs(self.db.profile.chatlinesframes) do
      self:SetHistory(_G[k], lines)
    end

    for k in pairs(Prat3CharDB.history.cmdhistory) do
      local edit = _G[k]
      if (edit) then
        if self.db.profile.savehistory then
          edit:SetHistoryLines(self.db.profile.maxlines)
          edit.history_lines = Prat3CharDB.history.cmdhistory[k]
        else
          edit.history_lines = {}
        end
        edit.history_index = 0
      end
    end
  end

  function module:OnSubvalueChanged()
    self:ConfigureAllChatFrames()
  end

  function module:OnValueChanged()
    self:ConfigureAllChatFrames()
  end


--  function module:DelayGMOTD(frame)
--    local delay = 2.5
--    local maxtime = 60
--    ChatFrame1:UnregisterEvent("GUILD_MOTD")
--    frame:SetScript("OnUpdate", function(this, expired)
--      delay = delay - expired
--      if delay < 0 then
--        local msg = GetGuildRosterMOTD()
--        if maxtime < 0 or (msg and msg:len() > 0) then
--          ChatFrame1:RegisterEvent("GUILD_MOTD")
--
--          for _, f in pairs(Prat.Frames) do
--            if f:IsEventRegistered("GUILD_MOTD") then
--              ChatFrame_SystemEventHandler(f, "GUILD_MOTD", msg)
--            end
--          end
--          this:Hide()
--        else
--          delay = 2.5
--          maxtime = maxtime - 2.5
--        end
--      end
--    end)
--  end


  --[[------------------------------------------------
      Core Functions
  ------------------------------------------------]] --
  function module:SetHistory(f, lines)
    if f == nil then return end

    f:SetMaxLines(lines)
  end

  function module:addSavedHistory(editBox)
    local editBox = editBox or ChatFrame1EditBox
    local cmdhistory = Prat3CharDB.history.cmdhistory[editBox:GetName()] or {}
    local cmdindex = #cmdhistory

    -- where there"s a while, there"s a way
    while cmdindex > 0 do
      editBox:AddHistoryLine(cmdhistory[cmdindex])
      cmdindex = cmdindex - 1
      -- way
    end
  end

  function module:saveLine(text, editBox)
    if not text or (text == "") then
      return false
    end

    local maxlines = self.db.profile.maxlines
    local cmdhistory = editBox.history_lines or {}

    if cmdhistory[1] == text then return end
    
    table.insert(cmdhistory, 1, text)

    local cmdcount = #cmdhistory - maxlines
    while cmdcount > 0 do
      table.remove(cmdhistory)
      cmdcount = cmdcount - 1
    end
  end

  function module:ClearHistory(editBox)
    editBox = editBox or ChatFrame1EditBox

    local cmdhistory = editBox.history_lines or {}
    local cmdcount = #cmdhistory
    while cmdcount > 0 do
      table.remove(cmdhistory)
      cmdcount = cmdcount - 1
    end
  end

  function module:AddHistoryLine(editBox)
    editBox = editBox or ChatFrame1EditBox

    -- following code mostly ripped off from Blizzard, but at least I understand it now
    local text = ""
    local type = editBox:GetAttribute("chatType")
    local header = _G["SLASH_" .. type .. "1"]

    if (header) then
      text = header
    end

    if (type == "WHISPER") and editBox:GetAttribute("tellTarget") ~= nil then
      text = text .. " " .. editBox:GetAttribute("tellTarget")
    elseif (type == "CHANNEL") and editBox:GetAttribute("channelTarget") ~= nil then
      text = "/" .. editBox:GetAttribute("channelTarget")
    end

    local editBoxText = editBox:GetText();
    if (strlen(editBoxText) > 0 and not IsSecureCmd(editBoxText:match("^/[%a%d_]+") or "")) then
      text = (header and (text .. " ") or "") .. editBoxText;
      self:saveLine(text, editBox)
    end
  end


  return
end) -- Prat:AddModuleToLoad
