vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-- Purge entrys not seen since X weeks
SCCN_PURGEWEEKS = 4;

-------------------------------------------------
-- DEFAULT VARIABLES
-------------------------------------------------

        if( not SCCN_storage ) then SCCN_storage = { Skyhawk = { c=7, t=123} }; end;
        if( not SCCN_mousescroll ) then SCCN_mousescroll   = 1; end;
        if( not SCCN_hidechanname ) then SCCN_hidechanname = 0; end;
        if( not SCCN_shortchanname ) then SCCN_shortchanname = 0; end;
        if( not SCCN_colornicks ) then SCCN_colornicks   = 1; end;
        if( not SCCN_topeditbox ) then SCCN_topeditbox   = 0; end;
        if( not SCCN_timestamp ) then SCCN_timestamp     = 1; end;
        if( not SCCN_colormap )  then SCCN_colormap      = 1; end;
        if( not SCCN_hyperlinker )  then SCCN_hyperlinker = 1; end;
        if( not SCCN_selfhighlight )  then SCCN_selfhighlight = 1; end;
        if( not SCCN_clickinvite )  then SCCN_clickinvite = 1; end;
        if( not SCCN_editboxkeys )  then SCCN_editboxkeys = 1; end;
        if( not SCCN_chatstring )  then SCCN_chatstring = 1; end;
        if( not SCCN_selfhighlightmsg )  then SCCN_selfhighlightmsg = 1; end;
        if( not SCCN_ts_format ) then SCCN_ts_format     = "#33CCFF[$h:$m]"; end;
        if( not SCCN_HideChatButtons )  then SCCN_HideChatButtons = 0; end;
        if( not SCCN_Highlight_Text ) then SCCN_Highlight_Text = {}; end;
        if( not SCCN_Highlight ) then SCCN_Highlight = 0; end;
        if( not SCCN_AutoBGMap ) then SCCN_AutoBGMap = 1; end;  
        if( not SCCN_AutoGossipSkip ) then SCCN_AutoGossipSkip = 0; end;
        if( not SCCN_AutoDismount ) then SCCN_AutoDismount = 0; end;
        if( not SCCN_Chan_Replace ) then SCCN_Chan_Replace = {}; end;
        if( not SCCN_Chan_ReplaceWith ) then SCCN_Chan_ReplaceWith = {}; end;
        
        -- welcome dialog
        if( not SCCN_WELCOMESHOWED ) then SCCN_WELCOMESHOWED = 0; end;
        
        --

        
        local ChatFrame_OnEvent_Org;
        local ORG_AddMessage = nil;
        SCCN_EntrysConverted = 0;
        SCCN_INVITEFOUND = nil;
        
-- because RAID_CLASS_COLORS is not working always as intended (dont figured out why exactly) I using this.
        local SCCN_RAID_COLORS = {
          HUNTER        = "|cffaad372",
          WARLOCK       = "|cff9382C9",
          PRIEST        = "|cffffffff",
          PALADIN       = "|cfff48cba",
          MAGE          = "|cff68ccef",
          ROGUE         = "|cfffff468",
          DRUID         = "|cffff7c0a",
          SHAMAN        = "|cfff48cba",
          WARRIOR       = "|cffc69b6d",
          DEFAULT       = "|cffa0a0a0"};
-- Some Colors
        local COLOR = { 
                RED     = "|cffff0000",
                GREEN   = "|cff10ff10",
                BLUE    = "|cff0000ff",
                MAGENTA = "|cffff00ff",
                YELLOW  = "|cffffff00",
                ORANGE  = "|cffff9c00",
                CYAN    = "|cff00ffff",
                WHITE   = "|cffffffff",
                SILVER  = "|ca0a0a0a0"
        }
-------------------------------------------------
-- DEFAULT FUNCTIONS
-------------------------------------------------
function solColorChatNicks_OnLoad()
        this:RegisterEvent("VARIABLES_LOADED");
        this:RegisterEvent("PLAYER_LEAVING_WORLD");
        this:RegisterEvent("FRIENDLIST_UPDATE");
        this:RegisterEvent("RAID_ROSTER_UPDATE");
        this:RegisterEvent("GUILD_ROSTER_UPDATE");
        this:RegisterEvent("PARTY_MEMBERS_CHANGED");
        this:RegisterEvent("UPDATE_WORLD_STATES"); 
        this:RegisterEvent("ZONE_CHANGED_NEW_AREA");
        this:RegisterEvent("GOSSIP_SHOW");

  -- Setting Slash commands  
  SlashCmdList["SCCN"] = solColorChatNicks_SlashCommand;
  SLASH_SCCN1 = "/sccn";
  SlashCmdList["TT"] = SCCN_CMD_TT;
  SLASH_TT1 = "/wt";  
end

function solColorChatNicks_OnEvent(event)
 if strsub(event, 1, 16) == "VARIABLES_LOADED" then
                -- confab compatibility
                if ( CONFAB_VERSION ) then
                        SCCN_write(SCCN_CONFAB);
                        SCCN_topeditbox   = 9;
                else
                        -- top editbox
                        SCCN_EditBox(SCCN_topeditbox);
                end
                -- chat hooks
                if ChatFrame_OnEvent_Org == nil then
                        ChatFrame_OnEvent_Org = ChatFrame_OnEvent;
                        ChatFrame_OnEvent = solColorChatNicks_ChatFrame_OnEvent;
                end
                if( SCCN_hyperlinker == 1 ) then
                        -- catches URL's
                        SCCN_Org_SetItemRef = SetItemRef;
                        SetItemRef = SCCN_SetItemRef;
                end
                if( CHRONOS_REV ~= nil ) then
                        Chronos.schedule(3,SCCN_write,"sOLARiZ Color Chat Nicks. v"..SCCN_VER.." loaded!");
                        -- doing auto purge event 30 sec delayed
                        Chronos.schedule(5,solColorChatNicks_PurgeDB);
                        -- map pins
                        Chronos.schedule(15,SCCN_RefreshIcons);
                        -- URL ADD
                        Chronos.schedule(10,SCCN_write,"Check out www.solariz.de/sccn for updates.");
                else
                        -- no chronos, direct purge
                        SCCN_write("sol's Color Chat Nicks. v"..SCCN_VER.." loaded!");
                        -- doing auto purge event
                        solColorChatNicks_PurgeDB();
                        -- map pins
                        SCCN_RefreshIcons();
                end
                -- refill
                if IsInGuild() then GuildRoster(); end
                if GetNumFriends() > 0 then ShowFriends(); end
                -- store original chat Editbox history buffer size
                SCCN_EditBoxKeysToggle(SCCN_editboxkeys);
                -- replacing chat some customized strings
                SCCN_CustomizeChatString(SCCN_chatstring);
                -- config dialog fillin
                SCCN_Config_OnLoad();
                -- Welcome Screen Fill in
                if( SCCN_WELCOMESHOWED ~= SCCN_VER ) then
                        SCCN_WELCOMESCREEN:Show();
                end             

                
 elseif strsub(event, 1, 17) == "FRIENDLIST_UPDATE" then
        solColorChatNicks_InsertFriends();      
 elseif strsub(event, 1, 19) == "GUILD_ROSTER_UPDATE" then
        solColorChatNicks_InsertGuildMembers();
 elseif strsub(event, 1, 18) == "RAID_ROSTER_UPDATE" then
        solColorChatNicks_InsertRaidMembers();
        SCCN_RefreshIcons();
 elseif strsub(event, 1, 21) == "PARTY_MEMBERS_CHANGED" then
        solColorChatNicks_InsertPartyMembers();
        SCCN_RefreshIcons();
 elseif strsub(event, 1, 19) == "UPDATE_WORLD_STATES" then
        SCCN_RefreshIcons();
 elseif strsub(event, 1, 21) == "ZONE_CHANGED_NEW_AREA" then
        SCCN_BG_AutoMap();
 elseif event == "PLAYER_LEAVING_WORLD" then
        this:RegisterEvent("PLAYER_ENTERING_WORLD");
        -- Unregistering Events
        this:UnregisterEvent("FRIENDLIST_UPDATE");
        this:UnregisterEvent("RAID_ROSTER_UPDATE");
        this:UnregisterEvent("GUILD_ROSTER_UPDATE");
        this:UnregisterEvent("PARTY_MEMBERS_CHANGED");
        this:UnregisterEvent("UPDATE_WORLD_STATES"); 
        this:UnregisterEvent("ZONE_CHANGED_NEW_AREA");
        this:UnregisterEvent("GOSSIP_SHOW");
 elseif event == "PLAYER_ENTERING_WORLD" then
        -- re Register Events
        this:RegisterEvent("FRIENDLIST_UPDATE");
        this:RegisterEvent("RAID_ROSTER_UPDATE");
        this:RegisterEvent("GUILD_ROSTER_UPDATE");
        this:RegisterEvent("PARTY_MEMBERS_CHANGED");
        this:RegisterEvent("UPDATE_WORLD_STATES"); 
        this:RegisterEvent("ZONE_CHANGED_NEW_AREA");
        this:RegisterEvent("GOSSIP_SHOW");
 elseif ( event == "GOSSIP_SHOW" and not IsControlKeyDown() ) then
                SCCN_OnGOSSIP();
 end
end


function solColorChatNicks_PurgeDB()
        SCCN_purged = 0;
        SCCN_keept  = 0;
        SCCN_EntrysConverted = 0;
        SCCN_OldStorage = SCCN_storage;
        SCCN_storage = nil;
        SCCN_storage = {};
        table.foreach(SCCN_OldStorage, solColorChatNicks_PurgeEntry);
        if( SCCN_EntrysConverted > 0 ) then
                SCCN_write("Purged: "..SCCN_purged..", Keept: "..SCCN_keept.." Converted to "..SCCN_VER.." :"..SCCN_EntrysConverted);
                SCCN_EntrysConverted = nil;
        else
                SCCN_write("Purged: "..SCCN_purged..", Keept: "..SCCN_keept);
        end     
        SCCN_write("Memory currently used by SolsColorChatNicks Addon storage: "..ceil( (SCCN_keept*60) / 1024).." Kb");
        getglobal("SCCNConfigForm".."stat1".."Label"):SetText(COLOR["SILVER"].."SCCN Knows currently "..SCCN_keept.." Chars, this are ca. "..ceil( (SCCN_keept*60) / 1024).." Kb");
        SCCN_OldStorage = nil;
        SCCN_purged = nil;
        SCCN_keept  = nil;
end

function solColorChatNicks_PurgeEntry(k,v)
                if( (SCCN_OldStorage[k]["t"] + (3600*24*7*SCCN_PURGEWEEKS) ) < time() ) then 
                        SCCN_purged = SCCN_purged + 1;
                else
                        SCCN_storage[k] = { t=SCCN_OldStorage[k]["t"], c=SCCN_OldStorage[k]["c"] }
                        SCCN_keept = SCCN_keept + 1;
                end
                -- Convert check for old version storage pre v.0.2
                if( SCCN_storage[k] ~= nil ) then   -- 0.5 formal 126 line error workaround
                        if( SCCN_storage[k]["c"] ~= nil ) then
                                if( SCCN_storage[k]["c"] ~= 0 and SCCN_storage[k]["c"] ~= 1 and SCCN_storage[k]["c"] ~= 2 and SCCN_storage[k]["c"] ~= 3 and SCCN_storage[k]["c"] ~= 4 and SCCN_storage[k]["c"] ~= 5 and SCCN_storage[k]["c"] ~= 6 and SCCN_storage[k]["c"] ~= 7 and SCCN_storage[k]["c"] ~= 8 and SCCN_storage[k]["c"] ~= 9 ) then
                                  SCCN_storage[k]["c"] = solColorChatNicks_ClassToNum(SCCN_storage[k]["c"]);
                                  SCCN_EntrysConverted = SCCN_EntrysConverted+1;
                                end
                        end
                end
end

function SCCN_write(msg)
        if( msg ~= nil ) then
                DEFAULT_CHAT_FRAME:AddMessage("|cffaad372".."Sol".."|cfffff468".."CCN".."|cffffffff: "..msg);
        end
end

-------------------------------------------------
-- CHAT FRAME MANIPULATION FUNCTIONS
-------------------------------------------------
function solColorChatNicks_ChatFrame_OnEvent(event)
         if( not this.ORG_AddMessage ) then
                this.ORG_AddMessage = this.AddMessage
                this.AddMessage = S_AddMessage
         end;
         if( SCCN_colornicks == 1) then 
                this.solColorChatNicks_Name = arg2;
         end
         -- Strip channel name
         if arg9 and event ~= "CHAT_MSG_CHANNEL_NOTICE" then
                local _, _, strippedChannelName = string.find(arg9, "(.-)%s.*");
                this.solColorChatNicks_Channelname = strippedChannelName;
         end     
         -- Call original handler
         ChatFrame_OnEvent_Org(event);
end

function S_AddMessage(this,text,r,g,b,id)
          if SCCN_hidechanname == 1 and this.solColorChatNicks_Channelname then
                -- Remove channel name  
                text = string.gsub(text, ".%s" .. this.solColorChatNicks_Channelname, "", 1);
                this.solColorChatNicks_Channelname = nil;         
          end
        if ( (SCCN_hidechanname == 1) and text ~= nil ) then  
        -- remove Guild, Party, Raid from chat channel name  
                for i=1, table.getn(SCCN_STRIPCHAN) do
                        text = string.gsub(text, "(%[)(%d?)(.?%s?"..SCCN_STRIPCHAN[i].."%s?)(%])(%s?)", SCCN_STRIPCHANNAMEFUNC,1);
                end
        elseif ( SCCN_shortchanname == 1 ) then
                -- Short Channel Names
                local temp = nil;
                if text ~= nil then
                        for i = 1, 9 do
                                if SCCN_Chan_Replace[i] ~= nil and SCCN_Chan_ReplaceWith[i] ~= nil then
                                        temp = string.gsub(text, SCCN_Chan_Replace[i].."]%s", SCCN_Chan_ReplaceWith[i].."]", 1)
                                        if temp ~= text then
                                                text = temp;
                                                temp = nil;
                                                break;
                                        end
                                end             
                        end
                end
        end
        
        -- color self in text
          if( SCCN_selfhighlight == 1 and text ~= nil ) then
             if( arg8 ~= 3 and arg8 ~= 4 ) then
                if( arg2 ~= nil and arg2 ~= UnitName("player") and UnitName("player") ~= nil and string.len(text) >= string.len(UnitName("player")) ) then
                        if(string.find(text, UnitName("player")) or string.find(text, string.lower(UnitName("player")))) then
                                -- NO CTRA and NO DMSYNC
                                if(not string.find(text, "<CTRaid>") and not string.find(text, "SYNCE_") and not string.find(text, "SYNC_") ) then
                                        text = string.gsub(text, "([^:^%[]"..UnitName("player")..")" , " "..COLOR["YELLOW"]..">"..COLOR["RED"]..UnitName("player")..COLOR["YELLOW"].."<|r");
                                        text = string.gsub(text, "([^:^%[]"..string.lower(UnitName("player"))..")" , " "..COLOR["YELLOW"]..">"..COLOR["RED"]..UnitName("player")..COLOR["YELLOW"].."<|r");
                                        -- On Screen Msg
                                        if( SCCN_selfhighlightmsg == 1 ) then
                                                UIErrorsFrame:AddMessage(text, 1, 1, 1, 1.0, UIERRORS_HOLD_TIME);
                                                PlaySound("FriendJoinGame");
                                        end
                                end
                        end
                end
             end
          end
        -- Custom Highlight /SCCN highlight
                SCCN_Custom_Highlighted = false;
                
           if SCCN_Custom_Highlighted == false then text = SCCN_CustomHighlightProcessor(text,SCCN_Highlight_Text[1]); end;
           if SCCN_Custom_Highlighted == false then text = SCCN_CustomHighlightProcessor(text,SCCN_Highlight_Text[2]); end;
           if SCCN_Custom_Highlighted == false then text = SCCN_CustomHighlightProcessor(text,SCCN_Highlight_Text[3]); end;
        
        -- color nick's
          if this.solColorChatNicks_Name and string.len(this.solColorChatNicks_Name) > 2  and text ~= nil and arg2 ~= nil then
            text = string.gsub(text, "(.-)"..this.solColorChatNicks_Name .. "([%]%s].*)", "%1"..solColorChatNicks_GetColorFor(this.solColorChatNicks_Name)..this.solColorChatNicks_Name.."|r%2", 1);
          end
          this.solColorChatNicks_Name = nil;
        -- Timestamp
          if( SCCN_timestamp == 1 and text ~= nil ) then
                  local hour  = tonumber(string.sub(date(),  10, 11));
                  local minute= tonumber(string.sub(date(),  13, 14));
                  local second= tonumber(string.sub(date(),  16, 17));
                  local periode = "";
                  local hour12  = "";
                  if hour > 0 and hour < 12 then
                        periode = "am";
                        hour12  = hour;
                  else
                        periode = "pm";  
                        hour12  = hour-12;
                  end           
                  -- 2 digit
                  if( string.len(tostring(hour)) < 2) then hour = "0"..tostring(hour); end
                  if( string.len(tostring(hour12)) < 2) then hour12 = "0"..tostring(hour12); end  
                  if( string.len(tostring(minute)) < 2) then minute = "0"..tostring(minute); end 
                  if( string.len(tostring(second)) < 2) then second = "0"..tostring(second); end  
                  -- setting timestamp
                  local TimeStamp = SCCN_ts_format;
                  TimeStamp = string.gsub(TimeStamp, "$h", hour);
                  TimeStamp = string.gsub(TimeStamp, "$m", minute);
                  TimeStamp = string.gsub(TimeStamp, "$s", second);
                  TimeStamp = string.gsub(TimeStamp, "$p", periode);
                  TimeStamp = string.gsub(TimeStamp, "$t", hour12);
                  TimeStamp = string.gsub(TimeStamp, "#", "|cff");
                  text = TimeStamp.."|r "..text;
          end
        -- URL detection
          if( SCCN_hyperlinker == 1 and text ~= nil ) then
                  SCCN_URLFOUND = nil;
                  -- numeric IP's  123.123.123.123:12345
                  if SCCN_URLFOUND == nil then text = string.gsub(text, "(%s?)(%d%d?%d?%.%d%d?%d?%.%d%d?%d?%.%d%d?%d?:%d%d?%d?%d?%d?)(%s?)", SCCN_GetURL); end;
                  -- TeamSpeak like IP's sub.domain.org:12345  or domain.de:123
                  if SCCN_URLFOUND == nil then text = string.gsub(text, "(%s?)([%w_-]+%.?[%w_-]+%.[%w_-]+:%d%d%d?%d?%d?)(%s?)", SCCN_GetURL); end;
                  -- complete http urls  
                  if SCCN_URLFOUND == nil then text = string.gsub(text, "(%s?)(%a+://[%w_/%.%?%%=~&-]+)(%s?)", SCCN_GetURL); end;
                  -- www.URL.de
                  if SCCN_URLFOUND == nil then text = string.gsub(text, "(%s?)(www%.[%w_/%.%?%%=~&-]+)(%s?)", SCCN_GetURL); end;
                  -- test@test.de
                  if SCCN_URLFOUND == nil then text = string.gsub(text, "(%s?)([_%w-%.~-]+@[_%w-]+%.[_%w-%.]+)(%s?)", SCCN_GetURL); end;
          end
        -- clickinvite
          if( SCCN_clickinvite == 1 and text ~= nil and arg2 ~= nil ) then
                 SCCN_INVITEFOUND = nil; 
                 if SCCN_INVITEFOUND == nil then text = string.gsub(text, "(%s?[^%a])(invite)[^%a](%s?)", SCCN_ClickInvite,1); end
                 if SCCN_INVITEFOUND == nil then text = string.gsub(text, "(%s)(invite)[^%a](%s?)", SCCN_ClickInvite,1); end
                 if SCCN_INVITEFOUND == nil then text = string.gsub(text, "(%s?[^%a])(inv)[^%a](%s?)", SCCN_ClickInvite,1); end
                 if SCCN_INVITEFOUND == nil then text = string.gsub(text, "(%s)(inv)[^%a](%s?)", SCCN_ClickInvite,1); end
                 if SCCN_INVITEFOUND == nil and SCCN_CUSTOM_INV ~= nil then
                        -- custom invite word in localization
                        for i=1, table.getn(SCCN_CUSTOM_INV) do
                                if SCCN_INVITEFOUND == nil then text = string.gsub(text, "(%s?[^%a])("..SCCN_CUSTOM_INV[i]..")(%a?)", SCCN_ClickInvite,1); end
                                if SCCN_INVITEFOUND == nil then text = string.gsub(text, "(%s)("..SCCN_CUSTOM_INV[i]..")(%s?)", SCCN_ClickInvite,1); end
                        end
                 end
             if SCCN_INVITEFOUND == nil then text = string.gsub(text, "(%s?[^%a])(invite)(%a?)", SCCN_ClickInvite,1); end
                 if SCCN_INVITEFOUND == nil then text = string.gsub(text, "(%s?[^%a])(inv)(%a?)", SCCN_ClickInvite,1); end  
          end
        -- output
        if (this.ORG_AddMessage ~= nil) then
                this:ORG_AddMessage(text,r,g,b,id);
        end
end

function SCCN_CustomHighlightProcessor(text,SCCN_Custom_Highlight_Word)
          if ( SCCN_Highlight == 1 and SCCN_Custom_Highlight_Word and string.len(text) >= string.len(SCCN_Custom_Highlight_Word) and string.len(SCCN_Custom_Highlight_Word) > 2 ) then 
                if( string.find(text,string.lower(SCCN_Custom_Highlight_Word)) or string.find(text,SCCN_Custom_Highlight_Word) ) then
                        -- NO CTRA and NO DMSYNC
                        if(not string.find(text, "<CTRaid>") and not string.find(text, "SYNCE_") and not string.find(text, "SYNC_") ) then
                                if( text ~= string.gsub(text, "([^:^%[]"..SCCN_Custom_Highlight_Word..")" , "")) then
                                        text = string.gsub(text, "([^:^%[]"..SCCN_Custom_Highlight_Word..")" , " "..COLOR["YELLOW"]..">"..COLOR["RED"]..SCCN_Custom_Highlight_Word..COLOR["YELLOW"].."<|r");
                                else
                                        text = string.gsub(text, "([^:^%[]"..string.lower(SCCN_Custom_Highlight_Word)..")" , " "..COLOR["YELLOW"]..">"..COLOR["RED"]..string.lower(SCCN_Custom_Highlight_Word)..COLOR["YELLOW"].."<|r");
                                end
                                -- On Screen Msg
                                UIErrorsFrame:AddMessage(text, 1, 1, 1, 1.0, UIERRORS_HOLD_TIME);
                                PlaySound("FriendJoinGame");
                                -- set already highlighted = True
                                SCCN_Custom_Highlighted = true;
                        end             
                end
          end
          return text;
end

function SCCN_OnMouseWheel(chatframe, value)
  if( SCCN_mousescroll == 1 ) then
        if IsShiftKeyDown()  then
                -- shift key pressed (Fast scroll)  
                if ( value > 0 ) then
                        for i = 1,5 do chatframe:ScrollUp(); end;
                elseif ( value < 0 ) then
                        for i = 1,5 do chatframe:ScrollDown(); end;
                end
        elseif IsControlKeyDown() then
                -- to top / to bottom
                if ( value > 0 ) then
                        chatframe:ScrollToTop();
                elseif ( value < 0 ) then
                        chatframe:ScrollToBottom();
                end             
        else
                -- Normal Scroll without shift key  
                if ( value > 0 ) then
                        chatframe:ScrollUp();
                elseif ( value < 0 ) then
                        chatframe:ScrollDown();
                end
    end 
  end
end  

function SCCN_EditBox(where)
        if(where == 1) then
                -- top
                ChatFrameEditBox:ClearAllPoints();
                ChatFrameEditBox:SetPoint("BOTTOMLEFT", "ChatFrame1", "TOPLEFT", 0, 2);
                ChatFrameEditBox:SetPoint("BOTTOMRIGHT", "ChatFrame1", "TOPRIGHT", 0, 2);
        elseif(where == 0) then
                -- bottom
                -- ChatFrameEditBox:ClearAllPoints();
                ChatFrameEditBox:SetPoint("BOTTOMLEFT", "ChatFrame1", "BOTTOMLEFT", 0, -28);
                ChatFrameEditBox:SetPoint("BOTTOMRIGHT", "ChatFrame1", "BOTTOMRIGHT", 0, -28);
        end
end

function SCCN_CustomizeChatString(status)
        if OLD_CHAT_WHISPER_GET == nil then OLD_CHAT_WHISPER_GET = CHAT_WHISPER_GET; end
        if OLD_CHAT_WHISPER_INFORM_GET == nil then OLD_CHAT_WHISPER_INFORM_GET = CHAT_WHISPER_INFORM_GET; end;
        if( status == 1 ) then
                CHAT_WHISPER_GET = SCCN_CUSTOM_CHT_FROM.." ";
                CHAT_WHISPER_INFORM_GET = SCCN_CUSTOM_CHT_TO.." ";
        else
                -- restore original
                CHAT_WHISPER_GET = OLD_CHAT_WHISPER_GET;
                CHAT_WHISPER_INFORM_GET = OLD_CHAT_WHISPER_INFORM_GET;
        end
end

function SCCN_EditBoxKeysToggle(status)
        if SCCN_OrgHistoryLines == nil then SCCN_OrgHistoryLines = ChatFrameEditBox:GetHistoryLines(); end
        if( status == 1 ) then
                ChatFrameEditBox:SetHistoryLines(250);
                ChatFrameEditBox:SetAltArrowKeyMode(false);
        else
                -- restore original
                ChatFrameEditBox:SetHistoryLines(16);
                ChatFrameEditBox:SetHistoryLines(SCCN_OrgHistoryLines);
                ChatFrameEditBox:SetAltArrowKeyMode(true);
        end             
end

function SCCN_STRIPCHANNAMEFUNC(a,b,c,d,e)
        -- a = (%[)
        -- b = (%d?)
        -- c = (.?%s?"..SCCN_STRIPCHAN[i].."%]%s?)
        -- d = (%])
        -- e = (%s?)
        if(SCCN_hidechanname == 1) then 
                if(c ~= nil and string.find(c,"%.") ) then
                        return a..b..d..e;
                else
                        return;
                end
        end
        --getglobal("SCCNConfigForm".."ver1".."Label"):SetText(COLOR["RED"].."A["..COLOR["WHITE"]..a..COLOR["RED"].."] B["..COLOR["WHITE"]..b..COLOR["RED"].."] C["..COLOR["WHITE"]..c..COLOR["RED"].."] D["..COLOR["WHITE"]..d..COLOR["RED"].."]");
end

function SCCN_ChatFrame_OnUpdate()
   local BottomButton   = getglobal(this:GetParent():GetName().."BottomButton");
   local DownButton     = getglobal(this:GetParent():GetName().."DownButton");
   local UpButton       = getglobal(this:GetParent():GetName().."UpButton");
   if( SCCN_HideChatButtons == 1 ) then
           if BottomButton:IsVisible() then BottomButton:Hide(); end
           if DownButton:IsVisible() then DownButton:Hide(); end
           if UpButton:IsVisible() then UpButton:Hide(); end
           if ChatFrameMenuButton:IsVisible() then ChatFrameMenuButton:Hide(); end
   else
           if not BottomButton:IsVisible() then BottomButton:Show(); end
           if not DownButton:IsVisible() then DownButton:Show(); end
           if not UpButton:IsVisible() then UpButton:Show(); end
           if not ChatFrameMenuButton:IsVisible() then ChatFrameMenuButton:Show(); end
   end

end

function SCCN_KeyBinding_ChatFrameEditBox(kommando)
        if (not ChatFrameEditBox:IsVisible()) then
                ChatFrame_OpenChat(kommando);
        else
                ChatFrameEditBox:SetText(kommando);
        end;
        ChatFrameEditBox:Show();
        ChatEdit_ParseText(ChatFrame1.editBox,0);
end

-------------------------------------------------
-- MOD INTERFACE FOR 3rd PARTY MODS
-------------------------------------------------
function SCCN_ForgottenChatNickName(Name)
        local FCcolor = solColorChatNicks_GetColorFor(Name);
        if( FCcolor ~= nil ) then
                return solColorChatNicks_GetColorFor(Name)..Name.."|r";
        else
                return Name;
        end
end

-------------------------------------------------
-- INFORMATION GATHERING FUNCTIONS
-------------------------------------------------
-- Color management
function solColorChatNicks_GetColorFor(name)
        -- Default color
        color = "";
        -- Check if unit name exists in storage
        if( SCCN_storage[name] ~= nil ) then
                color = solColorChatNicks_GetClassColor(SCCN_storage[name]["c"]);
        elseif( name == UnitName("player") ) then
         -- You are the person. That's easy
                local _, class = UnitClass("player");
                local class = solColorChatNicks_ClassToNum(class);
                color = solColorChatNicks_GetClassColor(class);
                SCCN_storage[name] = { c = class, t=time() };
        end
   
        return color;
end
                
function solColorChatNicks_InsertFriends()
  -- add current online friends
  for i = 1, GetNumFriends() do
    local name, _, class, _ = GetFriendInfo(i);
        local class = solColorChatNicks_ClassToNum(class);
        if( class ~= nil and name ~= nil ) then
                SCCN_storage[name] = { c = class, t=time() };
        end
  end
end     

function solColorChatNicks_InsertGuildMembers()
  -- add current online guild members
  for i = 1, GetNumGuildMembers() do
        local name,_,_,_,class = GetGuildRosterInfo(i);  
        local class = solColorChatNicks_ClassToNum(class);
        if( class ~= nil and name ~= nil ) then
                SCCN_storage[name] = { c = class, t=time() };
        end
  end
end

function solColorChatNicks_InsertRaidMembers()
  for i = 1, GetNumRaidMembers() do
    local name, _, _, _, _, class = GetRaidRosterInfo(i);
        local class = solColorChatNicks_ClassToNum(class);
        if( class ~= nil and name ~= nil ) then
                SCCN_storage[name] = { c = class, t=time() };
        end
  end   
end

function solColorChatNicks_InsertPartyMembers()
  for i = 1, GetNumPartyMembers() do
    local unit = "party" .. i;
    local _, class = UnitClass(unit);
        local name     = UnitName(unit);
        local class = solColorChatNicks_ClassToNum(class);
        if( class ~= nil and name ~= nil ) then
                SCCN_storage[name] = { c = class, t=time() };
        end   
  end   
end

-------------------------------------------------
-- CONVERTER / GET FROM ARRAY   FUNCTIONS
-------------------------------------------------
function solColorChatNicks_ClassToNum(class)
        if(class == "WARLOCK" or class == SCCN_LOCAL_CLASS["WARLOCK"]) then
                return 1;
        elseif(class == "HUNTER" or class == SCCN_LOCAL_CLASS["HUNTER"]) then
                return 2;
        elseif(class == "PRIEST" or class == SCCN_LOCAL_CLASS["PRIEST"]) then
                return 3;
        elseif(class == "PALADIN" or class == SCCN_LOCAL_CLASS["PALADIN"]) then         
                return 4;
        elseif(class == "MAGE" or class == SCCN_LOCAL_CLASS["MAGE"]) then       
                return 5;
        elseif(class == "ROGUE" or class == SCCN_LOCAL_CLASS["ROGUE"]) then
                return 6;
        elseif(class == "DRUID" or class == SCCN_LOCAL_CLASS["DRUID"]) then
                return 7;
        elseif(class == "SHAMAN" or class == SCCN_LOCAL_CLASS["SHAMAN"]) then
                return 8;
        elseif(class == "WARRIOR" or class == SCCN_LOCAL_CLASS["WARRIOR"]) then
                return 9;
        end
        return 0;
end

function solColorChatNicks_ClassNumToRGB(classnum)
        if(classnum == 1) then return {r=100,g=0,b=112}
        elseif(classnum == 2) then return {r=81,g=140,b=11}
        elseif(classnum == 3) then return {r=1,g=1,b=1}
        elseif(classnum == 4) then return {r=255,g=0,b=255}
        elseif(classnum == 5) then return {r=0,g=180,b=240}
        elseif(classnum == 6) then return {r=220,g=200,b=0}
        elseif(classnum == 7) then return {r=240,g=136,b=0}
        elseif(classnum == 8) then return {r=255,g=0,b=255}
        elseif(classnum == 9) then return {r=147,g=112,b=67}
        else return {r=0,g=0,b=0}; end
end

function solColorChatNicks_GetClassColor(class)
        if(class == 1)          then return SCCN_RAID_COLORS["WARLOCK"];
        elseif(class == 2)      then return SCCN_RAID_COLORS["HUNTER"];
        elseif(class == 3)      then return SCCN_RAID_COLORS["PRIEST"];
        elseif(class == 4)      then return SCCN_RAID_COLORS["PALADIN"];
        elseif(class == 5)      then return SCCN_RAID_COLORS["MAGE"];
        elseif(class == 6)      then return SCCN_RAID_COLORS["ROGUE"];
        elseif(class == 7)      then return SCCN_RAID_COLORS["DRUID"];
        elseif(class == 8)      then return SCCN_RAID_COLORS["SHAMAN"];
        elseif(class == 9)      then return SCCN_RAID_COLORS["WARRIOR"];
        end
        return SCCN_RAID_COLORS["DEFAULT"];
end

-------------------------------------------------
-- Map Stuff
-------------------------------------------------
function SCCN_RefreshIcons()
 if( UnitInRaid("player") and SCCN_colormap == 1 and GetNumRaidMembers() > 0 ) then
        local classcolor = {}
        local icon = "Interface\\AddOns\\solColorChatNicks\\gfx\\Icon";
        local icon2 = icon.."2";
    for i=1, MAX_RAID_MEMBERS do
                -- Full WorldMap colored Icons
                        local raidMemberFrame = getglobal("WorldMapRaid"..i);
                        if ( UnitInRaid(raidMemberFrame.unit) ) then
                                for x=1, GetNumRaidMembers() do
                                        local name, _, _, _, _, class = GetRaidRosterInfo(x);
                                        if ( name == UnitName(raidMemberFrame.unit) ) then
                                                getglobal(raidMemberFrame:GetName().."Icon"):SetTexture(icon2);
                                                local iconColor = RAID_CLASS_COLORS[class];
                                                getglobal(raidMemberFrame:GetName().."Icon"):SetVertexColor(iconColor.r, iconColor.g, iconColor.b);
                                                break;
                                        end
                                end                             
                        else
                                getglobal(raidMemberFrame:GetName().."Icon"):SetTexture(icon);
                                getglobal(raidMemberFrame:GetName().."Icon"):SetVertexColor(0.6, 0.6, 0.6);
                        end
                -- BattleField Minimap colored icons
                if ( IsAddOnLoaded("Blizzard_BattlefieldMinimap")  ) then               
                        local BFMMFrame = getglobal("BattlefieldMinimapRaid"..i);
                        if ( UnitInRaid(BFMMFrame.unit) ) then
                                for x=1, GetNumRaidMembers() do
                                        local name, _, _, _, _, class = GetRaidRosterInfo(x);
                                        if ( name == UnitName(BFMMFrame.unit) ) then
                                                local iconColor = RAID_CLASS_COLORS[class];
                                                getglobal(BFMMFrame:GetName().."Icon"):SetTexture(icon2);
                                                getglobal(BFMMFrame:GetName().."Icon"):SetVertexColor(iconColor.r, iconColor.g, iconColor.b);
                                                break;
                                        end
                                end    
                        else
                                getglobal(BFMMFrame:GetName().."Icon"):SetTexture(icon);
                                getglobal(BFMMFrame:GetName().."Icon"):SetVertexColor(0.6, 0.6, 0.6);
                        end
                end
        end    
  end  
end

function SCCN_BG_AutoMap(event)
        if( SCCN_AutoBGMap == 1 ) then
                local zone_text = GetZoneText()
                if (zone_text == SCCN_LOCAL_ZONE["alterac"] or zone_text == SCCN_LOCAL_ZONE["warsong"] or zone_text == SCCN_LOCAL_ZONE["arathi"]) then
                        SCCN_write("Zone change into '"..zone_text.."' detected. AutoToggle BGMiniMap...");
                        ToggleBattlefieldMinimap();
                end
        end
end


--------------------------------------------------
-- Hyperlink and make clickable in chat Stuff
--------------------------------------------------
function SCCN_HyperlinkWindow(url)
        if( url ~= nil ) then
                getglobal( "solHyperlinkerEditBox" ):SetText( url );
                -- solHyperlinkerForm:Hide();
                solHyperlinkerForm:Show();
        end
end

function SCCN_GetURL(before, URL, after)
        SCCN_URLFOUND = 1;
        return before.."|cff".."9999EE".. "|Href:" .. URL .. "|h[".. URL .."]|h|r" ..  after;
end

function SCCN_SetItemRef(link, text, button)
        if (string.sub(link, 1 , 3) == "ref") then
                SCCN_HyperlinkWindow(string.sub(link,5));
                return;
        elseif (string.sub(link, 1 , 3) == "inv") then 
                InviteByName(string.sub(link,5));
        else
                SCCN_Org_SetItemRef(link, text, button);
        end
end

function SCCN_ChanRewrite(before, msg, after)
        -- maybe doing something special herein later
        -- my Idea is to switch from highlighting to hiding or shortening
        
--      after = string.gsub(after , "]", "");
        return before..after;
end

function SCCN_ClickInvite(before, msg, after)
        if( string.len(after) > 0 and string.sub(after,1,1) ~= " " ) then
                return before..msg..after;
        end
        SCCN_INVITEFOUND = true;
        return before.."|Hinv:" .. arg2 .. "|h["..msg.."]|h"..after;
end

--------------------------------------------------
-- Slash Command handlers
--------------------------------------------------
function SCCN_CMD_TT(msg)
        if( UnitName("target") == nil ) then
                SCCN_write("No Target for /tt");
                return false;
        end
        if( msg ~= nil and string.len(msg) > 1 ) then   
                -- send a whisper to your target
                SendChatMessage(msg, "WHISPER", this.language, UnitName("target"));
        else
                SCCN_write("Use: /tt This is a example!");
        end
end

function solColorChatNicks_SlashCommand(cmd)
        -- This function handle the Help and general Option calls
        local cmd = string.lower(cmd);
        if    ( cmd == "hidechanname") then
                if SCCN_hidechanname == 0 then 
                        SCCN_hidechanname = 1;
                        SCCN_write(SCCN_CMDSTATUS[1].."|cff00ff00".." ON");
                else 
                        SCCN_hidechanname = 0; 
                        SCCN_write(SCCN_CMDSTATUS[1].."|cffff0000".." OFF");
                end;
        elseif( cmd == "colornicks") then
                if SCCN_colornicks == 0 then 
                        SCCN_colornicks = 1;
                        SCCN_write(SCCN_CMDSTATUS[2].."|cff00ff00".." ON");
                else 
                        SCCN_colornicks = 0; 
                        SCCN_write(SCCN_CMDSTATUS[2].."|cffff0000".." OFF");
                end;
        elseif( cmd == "mousescroll") then
                if SCCN_mousescroll == 0 then 
                        SCCN_mousescroll = 1;
                        SCCN_write(SCCN_CMDSTATUS[3].."|cff00ff00".." ON");
                else 
                        SCCN_mousescroll = 0; 
                        SCCN_write(SCCN_CMDSTATUS[3].."|cffff0000".." OFF");
                end;
        elseif( cmd == "topeditbox") then
                if( CONFAB_VERSION ) then SCCN_write(SCCN_CONFAB); return false; end;
            if( SCCN_topeditbox == 1 ) then
                        SCCN_topeditbox = 0;
                        SCCN_EditBox(0);
                        SCCN_write(SCCN_CMDSTATUS[4].."|cffff0000".." OFF");
                else
                        SCCN_topeditbox = 1;
                        SCCN_EditBox(1);
                        SCCN_write(SCCN_CMDSTATUS[4].."|cff00ff00".." ON");
                end
        elseif( cmd == "colormap") then
            if( SCCN_colormap == 1 ) then
                        SCCN_colormap = 0;
                        SCCN_write(SCCN_CMDSTATUS[6].."|cffff0000".." OFF");
                else
                        SCCN_colormap = 1;
                        SCCN_write(SCCN_CMDSTATUS[6].."|cff00ff00".." ON");
                        SCCN_RefreshIcons();
                end             
        elseif( strsub(cmd, 1, 9) == "timestamp") then
                if(string.len(cmd) > 9) then
                 -- more then just the toggleswitch
                  local more = strsub(cmd, 11);
                        if more then
                                if(more == "?" or more == "help") then
                                        SCCN_write(SCCN_TS_HELP);
                                else  
                                        SCCN_ts_format = more;
                                        SCCN_write("Timestamp format changed to: "..SCCN_ts_format);
                                end
                        else
                                SCCN_write(SCCN_TS_HELP);
                        end
            else
                        if SCCN_timestamp == 0 then 
                                SCCN_timestamp = 1;
                                SCCN_write(SCCN_CMDSTATUS[5].."|cff00ff00".." ON");
                        else 
                                SCCN_timestamp = 0; 
                                SCCN_write(SCCN_CMDSTATUS[5].."|cffff0000".." OFF");
                        end;
                end
        elseif( cmd == "selfhighlight") then
                if SCCN_selfhighlight == 0 then 
                        SCCN_selfhighlight = 1;
                        SCCN_write(SCCN_CMDSTATUS[8].."|cff00ff00".." ON");
                else 
                        SCCN_selfhighlight = 0; 
                        SCCN_write(SCCN_CMDSTATUS[8].."|cffff0000".." OFF");
                end;
        elseif( cmd == "clickinvite") then
                if SCCN_clickinvite == 0 then 
                        SCCN_clickinvite = 1;
                        SCCN_write(SCCN_CMDSTATUS[9].."|cff00ff00".." ON");
                else 
                        SCCN_clickinvite = 0; 
                        SCCN_write(SCCN_CMDSTATUS[9].."|cffff0000".." OFF");
                end;
        elseif( cmd == "editboxkeys") then
                if SCCN_editboxkeys == 0 then
                        SCCN_EditBoxKeysToggle(1);
                        SCCN_editboxkeys = 1;
                        SCCN_write(SCCN_CMDSTATUS[10].."|cff00ff00".." ON");
                else 
                        SCCN_EditBoxKeysToggle(0);
                        SCCN_editboxkeys = 0; 
                        SCCN_write(SCCN_CMDSTATUS[10].."|cffff0000".." OFF");
                end;
        elseif( cmd == "selfhighlightmsg") then
                if SCCN_selfhighlightmsg == 0 then 
                        SCCN_selfhighlightmsg = 1;
                        SCCN_write(SCCN_CMDSTATUS[12].."|cff00ff00".." ON");
                else 
                        SCCN_selfhighlightmsg = 0; 
                        SCCN_write(SCCN_CMDSTATUS[12].."|cffff0000".." OFF");
                end;            
        elseif( cmd == "chatstring") then
                if SCCN_chatstring == 0 then 
                        SCCN_chatstring = 1;
                        SCCN_write(SCCN_CMDSTATUS[11].."|cff00ff00".." ON");
                        SCCN_CustomizeChatString(1);
                else 
                        SCCN_chatstring = 0; 
                        SCCN_write(SCCN_CMDSTATUS[11].."|cffff0000".." OFF");
                        SCCN_CustomizeChatString(0);
                end;    
        elseif( cmd == "hyperlink") then
                if SCCN_hyperlinker == 0 then 
                        SCCN_hyperlinker = 1;
                        SCCN_write(SCCN_CMDSTATUS[7].."|cff00ff00".." ON");
                        SCCN_Org_SetItemRef = SetItemRef;
                        SetItemRef = SCCN_SetItemRef;                   
                else
                        SCCN_hyperlinker = 0; 
                        SCCN_write(SCCN_CMDSTATUS[7].."|cffff0000".." OFF");
                        if( SCCN_Org_SetItemRef ) then
                                SetItemRef = SCCN_Org_SetItemRef;
                        end
                end;            
        elseif( cmd == "purge" ) then 
                solColorChatNicks_PurgeDB();
        elseif( cmd == "hidechatbuttons" ) then
                if(SCCN_HideChatButtons == 1) then
                        SCCN_HideChatButtons = 0;
                        SCCN_write(SCCN_CMDSTATUS[13].."|cffff0000".." OFF");
                else
                        SCCN_HideChatButtons = 1;
                        SCCN_write(SCCN_CMDSTATUS[13].."|cff00ff00".." ON");
                end
        elseif( cmd == "killdb" ) then
                SCCN_write("Whiped complete Database.");
                SCCN_storage = {};
                SCCN_OldStorage = {};
                solColorChatNicks_PurgeDB();
        elseif( cmd == "highlight" ) then
                if(SCCN_Highlight == 1) then
                        SCCN_Highlight = 0;
                        SCCN_write(SCCN_CMDSTATUS[15].."|cffff0000".." OFF");
                else
                        SCCN_Highlight = 1;
                        SCCN_write(SCCN_CMDSTATUS[15].."|cff00ff00".." ON");
                end             
        elseif( cmd == "autobgmap" ) then 
                if(SCCN_AutoBGMap == 1) then
                        SCCN_AutoBGMap = 0;
                        SCCN_write(SCCN_CMDSTATUS[14].."|cffff0000".." OFF");
                else
                        SCCN_AutoBGMap = 1;
                        SCCN_write(SCCN_CMDSTATUS[14].."|cff00ff00".." ON");
                end
        elseif( cmd == "autogossipskip" ) then 
                if(SCCN_AutoGossipSkip == 1) then
                        SCCN_AutoGossipSkip = 0;
                        SCCN_write(SCCN_CMDSTATUS[17].."|cffff0000".." OFF");
                else
                        SCCN_AutoGossipSkip = 1;
                        SCCN_write(SCCN_CMDSTATUS[17].."|cff00ff00".." ON");
                end             
        elseif( cmd == "autodismount" ) then 
                if(SCCN_AutoDismount == 1) then
                        SCCN_AutoDismount = 0;
                        SCCN_write(SCCN_CMDSTATUS[18].."|cffff0000".." OFF");
                else
                        SCCN_AutoDismount = 1;
                        SCCN_write(SCCN_CMDSTATUS[18].."|cff00ff00".." ON");
                end                     
        elseif( cmd == "shortchanname" ) then 
                if(SCCN_shortchanname == 1) then
                        SCCN_shortchanname = 0;
                        SCCN_write(SCCN_CMDSTATUS[16].."|cffff0000".." OFF");
                else
                        SCCN_shortchanname = 1;
                        SCCN_write(SCCN_CMDSTATUS[16].."|cff00ff00".." ON");
                end
        elseif( cmd == "about" ) then
                SCCN_WELCOMESCREEN:Show();
        elseif( cmd == "status" ) then
                SCCN_write("|cff006CFF ---[sOLARiZ Color Chat Nick's Status]---");
                if( SCCN_colornicks == 1) then  SCCN_write(SCCN_CMDSTATUS[2].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[2].."|cffff0000".." OFF"); end;
                if( SCCN_hidechanname == 1) then        SCCN_write(SCCN_CMDSTATUS[1].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[1].."|cffff0000".." OFF"); end;
                if( SCCN_mousescroll == 1) then         SCCN_write(SCCN_CMDSTATUS[3].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[3].."|cffff0000".." OFF"); end;       
                if( SCCN_topeditbox == 1) then  SCCN_write(SCCN_CMDSTATUS[4].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[4].."|cffff0000".." OFF"); end;                       
                if( SCCN_timestamp == 1) then   SCCN_write(SCCN_CMDSTATUS[5].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[5].."|cffff0000".." OFF"); end;
                if( SCCN_colormap == 1) then    SCCN_write(SCCN_CMDSTATUS[6].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[6].."|cffff0000".." OFF"); end;
                if( SCCN_hyperlinker == 1) then         SCCN_write(SCCN_CMDSTATUS[7].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[7].."|cffff0000".." OFF"); end;
                if( SCCN_selfhighlight == 1) then       SCCN_write(SCCN_CMDSTATUS[8].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[8].."|cffff0000".." OFF"); end;               
                if( SCCN_clickinvite == 1) then         SCCN_write(SCCN_CMDSTATUS[9].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[9].."|cffff0000".." OFF"); end;               
                if( SCCN_editboxkeys == 1) then         SCCN_write(SCCN_CMDSTATUS[10].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[10].."|cffff0000".." OFF"); end;
                if( SCCN_chatstring == 1) then  SCCN_write(SCCN_CMDSTATUS[11].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[11].."|cffff0000".." OFF"); end;
                if( SCCN_selfhighlightmsg == 1) then    SCCN_write(SCCN_CMDSTATUS[12].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[12].."|cffff0000".." OFF"); end;
                if( SCCN_HideChatButtons == 1) then     SCCN_write(SCCN_CMDSTATUS[13].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[13].."|cffff0000".." OFF"); end;
                if( SCCN_AutoBGMap == 1) then   SCCN_write(SCCN_CMDSTATUS[14].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[14].."|cffff0000".." OFF"); end;
                if( SCCN_shortchanname == 1) then       SCCN_write(SCCN_CMDSTATUS[16].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[16].."|cffff0000".." OFF"); end;
                if( SCCN_AutoGossipSkip == 1) then      SCCN_write(SCCN_CMDSTATUS[17].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[17].."|cffff0000".." OFF"); end;
                if( SCCN_AutoDismount == 1) then        SCCN_write(SCCN_CMDSTATUS[18].."|cff00ff00".." ON");
                else            SCCN_write(SCCN_CMDSTATUS[18].."|cffff0000".." OFF"); end;
else
                SCCNConfigForm:Show();
                SCCN_write(SCCN_HELP[1]);
                SCCN_write(SCCN_HELP[4]);
                SCCN_write(SCCN_HELP[5]);
                SCCN_write(SCCN_HELP[8]);
                SCCN_write(SCCN_HELP[14]);
                SCCN_write(SCCN_HELP[99]);
        end
end

-----------------------------------------------
-- SCCN Config GUI Stuff
-----------------------------------------------
function SCCN_Config_OnLoad()
        -- Setzen der UI Eigenschaften
        -- * Version    
                getglobal("SCCNConfigForm".."ver1".."Label"):SetText(COLOR["SILVER"].."ver."..SCCN_VER);
        -- * Help Einträge
                getglobal("SCCNShortchanForm".."HLP1".."Label"):SetText(SCCN_HELP[2]);
                getglobal("SCCNShortchanForm".."HLP2".."Label"):SetText(SCCN_HELP[19]);
                getglobal("SCCNConfigForm".."HLP2".."Label"):SetText(SCCN_HELP[3]);
                getglobal("SCCNConfigForm".."HLP3".."Label"):SetText(SCCN_HELP[6]);
                getglobal("SCCNConfigForm".."HLP4".."Label"):SetText(SCCN_HELP[7]);
                getglobal("SCCNConfigForm".."HLP5".."Label"):SetText(SCCN_HELP[9]);
                getglobal("SCCNConfigForm".."HLP6".."Label"):SetText(SCCN_HELP[10]);
                
                getglobal("SCCNConfigForm".."HLP8".."Label"):SetText(SCCN_HELP[12]);
                getglobal("SCCNConfigForm".."HLP9".."Label"):SetText(SCCN_HELP[13]);
                --getglobal("SCCNConfigForm".."HLP10".."Label"):SetText(SCCN_HELP[15]);
                getglobal("SCCNConfigForm".."HLP11".."Label"):SetText(SCCN_HELP[16]);
                getglobal("SCCNConfigForm".."HLP12".."Label"):SetText(SCCN_HELP[20]);
                getglobal("SCCNConfigForm".."HLP13".."Label"):SetText(SCCN_HELP[21]);
                
                getglobal("SCCN_Highlight_Form".."HLP0".."Label"):SetText(SCCN_HELP[17]);
                getglobal("SCCN_Highlight_Form".."HLP1".."Label"):SetText(SCCN_HELP[11]);
                getglobal("SCCN_Highlight_Form".."HLP2".."Label"):SetText(SCCN_HELP[15]);
                
                
        -- * Button Config auslesen und setzen
                SCCN_Config_SetButtonState(SCCN_hidechanname,1);
                SCCN_Config_SetButtonState(SCCN_shortchanname,7);
                SCCN_Config_SetButtonState(SCCN_colornicks,2);
                SCCN_Config_SetButtonState(SCCN_mousescroll,3);
                SCCN_Config_SetButtonState(SCCN_topeditbox,4);
                SCCN_Config_SetButtonState(SCCN_colormap,5);
                SCCN_Config_SetButtonState(SCCN_hyperlinker,6);
                --SCCN_Config_SetButtonState(SCCN_selfhighlight,7);
                SCCN_Config_SetButtonState(SCCN_clickinvite,8);
                SCCN_Config_SetButtonState(SCCN_editboxkeys,9);
                SCCN_Config_SetButtonState(SCCN_HideChatButtons,11);
                SCCN_Config_SetButtonState(SCCN_AutoGossipSkip,12);
                SCCN_Config_SetButtonState(SCCN_AutoDismount,13);
                
                SCCN_Config_SetButtonState(SCCN_Highlight,100);
                SCCN_Config_SetButtonState(SCCN_selfhighlight,101);
                SCCN_Config_SetButtonState(SCCN_selfhighlightmsg,102);
                
end 

function SCCN_Config_SetButtonState(val,buttonnr)
        if(val == 0 or val == false or val == nil) then
                getglobal( "SCCN_CONF_CHK"..buttonnr ):SetChecked(0);
        else
                getglobal( "SCCN_CONF_CHK"..buttonnr ):SetChecked(1);
        end
end

--------------------------------------------------------
-- Misc functions
--------------------------------------------------------

function SCCN_OnGOSSIP()
        if SCCN_AutoGossipSkip == 1 then        
                local GossipOptions = {};
                local append = ".";
                --SelectGossipOption(1);
                _,GossipOptions[1],_,GossipOptions[2],_,GossipOptions[3],_,GossipOptions[4],_,GossipOptions[5]=  GetGossipOptions()
                for i=1, getn(GossipOptions) do
                        if (GossipOptions[i] == "taxi") then SCCN_Dismount(); append=", Dismounting." end;
                        if (GossipOptions[i] == "battlemaster" or GossipOptions[i] == "taxi" or GossipOptions[i] == "banker" or GossipOptions[i] == "trainer") then
                                --SCCN_write("Skip Gossip: '"..GossipOptions[i].."' detected, Autoselecting Option "..i..append);
                                SelectGossipOption(i);
                        end
                end
        end
end

function SCCN_Dismount()
        if SCCN_AutoDismount == 1 then
                for i=0,15 do
                        local buffIndex, untilCancelled = GetPlayerBuff(i, "HELPFUL");
                        if GetPlayerBuffTexture(buffIndex) then
                                if string.find(GetPlayerBuffTexture(buffIndex),"Mount") then
                                        CancelPlayerBuff(buffIndex);
                                end
                        end
                end
        end
end

Generated by GNU Enscript 1.6.5.90.