vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
-- Log Script file for Extended Questlog 3.5
-- Copyright © 2006 Daniel Rehn

function EQL3_Maximize()
        EQL3_QuestLogFrameCloseButton:Hide();
        EQL3_QuestLogFrameMaximizeButton:Hide();
        EQL3_QuestLogCountRight:SetPoint("TOPRIGHT", -28, -43);
        EQL3_QuestLogTitleText:SetPoint("TOP", 48, -16);
        EQL3_QuestLogVersionText:SetPoint("TOPRIGHT", -67, -16);
        EQL3_QuestFrameOptionsButton:SetPoint("BOTTOMRIGHT", -25, 5);
        
        EQL3_Top_Switch_On:Show();
        EQL3_Bottom_Switch_On:Show();
        EQL3_Top_Switch_Off:Hide();
        EQL3_Bottom_Switch_Off:Hide();
        -- EQL3_Top_Switch:SetTexture("Interface\Addons\EQL3\Images\EQL3_TopSwitchOn.tga");
        -- EQL3_Bottom_Switch:SetTexture("Interface\Addons\EQL3\Images\EQL3_BottomSwitchOn.tga");
        
        QuestlogOptions[EQL3_Player].WindowState = 1;
        ShowUIPanel(EQL3_QuestLogFrame_Description);
end

function EQL3_Minimize()
        EQL3_QuestLogFrameCloseButton:Show();
        EQL3_QuestLogFrameMaximizeButton:Show();
        EQL3_QuestLogCountRight:SetPoint("TOPRIGHT", -356, -43);
        EQL3_QuestLogTitleText:SetPoint("TOP", -114, -16);
        EQL3_QuestLogVersionText:SetPoint("TOPRIGHT", -395, -16);
        EQL3_QuestFrameOptionsButton:SetPoint("BOTTOMRIGHT", -354, 5);
        
        EQL3_Top_Switch_On:Hide();
        EQL3_Bottom_Switch_On:Hide();
        EQL3_Top_Switch_Off:Show();
        EQL3_Bottom_Switch_Off:Show();
        -- EQL3_Top_Switch:SetTexture("Interface\Addons\EQL3\Images\EQL3_TopSwitchOff");
        -- EQL3_Bottom_Switch:SetTexture("Interface\Addons\EQL3\Images\EQL3_BottomSwitchOff");
        
        QuestlogOptions[EQL3_Player].WindowState = 0;
        HideUIPanel(EQL3_QuestLogFrame_Description);
end

-- Toggle
local old_ToggleQuestLog = ToggleQuestLog;
function ToggleQuestLog()
        if ( EQL3_QuestLogFrame:IsVisible() ) then
                HideUIPanel(EQL3_QuestLogFrame);
        else
                ShowUIPanel(EQL3_QuestLogFrame);
        end
end



-- ::::::::::::::::::: On Functions ::::::::::::::::::: --

-- OnLoad
function EQL_QuestLog_OnLoad()
  this:RegisterEvent("VARIABLES_LOADED");       
  this:RegisterEvent("QUEST_PROGRESS"); 
  this:RegisterEvent("QUEST_COMPLETE");  
end

-- OnEvent
function EQL_QuestLog_OnEvent(event)
        if (event == "VARIABLES_LOADED") then
                EQL3_Player = UnitName("player").."-"..GetRealmName();
                
                DEFAULT_CHAT_FRAME:AddMessage("Extended QuestLog "..EQL3_QUESTLOG_VERSION.." Loaded for "..UnitName("player").. " of "..GetRealmName()..".", 1, 1, 1, 1);
                
                if(QuestlogOptions == nil) then
                        QuestlogOptions = {};
                end
                if(QuestlogOptions[EQL3_Player] == nil) then
                        QuestlogOptions[EQL3_Player] = {};
                end
                
                -- Organizer
                
                if (QuestlogOptions[EQL3_Player].OrganizerSettings == nil) then
                        QuestlogOptions[EQL3_Player].OrganizerSettings = {};
                end
                
                if (QuestlogOptions[EQL3_Player].WindowState == nil) then
                        QuestlogOptions[EQL3_Player].WindowState = 0;
                end
                if(QuestlogOptions[EQL3_Player].WindowState == 1) then
                        EQL3_Maximize();
                end
                
                if(QuestlogOptions[EQL3_Player].QuestWatches == nil) then
                        QuestlogOptions[EQL3_Player].QuestWatches = {};
                end
                
                if(QuestlogOptions[EQL3_Player].ShowQuestLevels == nil) then
                        QuestlogOptions[EQL3_Player].ShowQuestLevels = 1;
                end
                
                if(QuestlogOptions[EQL3_Player].RestoreUponSelect == nil) then
                        QuestlogOptions[EQL3_Player].RestoreUponSelect = 1;
                end
                
                if(QuestlogOptions[EQL3_Player].MinimizeUponClose == nil) then
                        QuestlogOptions[EQL3_Player].MinimizeUponClose = 1;
                end
                
                if(QuestlogOptions[EQL3_Player].LockQuestLog == nil) then
                        QuestlogOptions[EQL3_Player].LockQuestLog = 1;
                end
                        -- Make It movable if so...
                        if(QuestlogOptions[EQL3_Player].LockQuestLog == 1) then
                                EQL3_QuestLogFrame:RegisterForDrag(0);
                                EQL3_QuestLogFrame_Description:RegisterForDrag(0);
                        else
                                EQL3_QuestLogFrame:RegisterForDrag("LeftButton");
                                EQL3_QuestLogFrame_Description:RegisterForDrag("LeftButton");
                        end
                        
                if (QuestlogOptions[EQL3_Player].LogLockPoints and
                                                        QuestlogOptions[EQL3_Player].LogLockPoints.pointone and
                                                        QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo) then
                        EQL3_QuestLogFrame:ClearAllPoints();
                        EQL3_QuestLogFrame:SetPoint("TOPLEFT","UIParent","BOTTOMLEFT",QuestlogOptions[EQL3_Player].LogLockPoints.pointone,QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo);
                end
                
                if(QuestlogOptions[EQL3_Player].LogOpacity == nil) then
                        QuestlogOptions[EQL3_Player].LogOpacity = 1.0;
                end
                EQL3_QuestLogFrame:SetAlpha(QuestlogOptions[EQL3_Player].LogOpacity);
                
                if(QuestlogOptions[EQL3_Player].ShowZonesInTracker == nil) then
                        QuestlogOptions[EQL3_Player].ShowZonesInTracker = 1;
                end
                
                if(QuestlogOptions[EQL3_Player].SortTrackerItems == nil) then
                        QuestlogOptions[EQL3_Player].SortTrackerItems = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].CustomZoneColor == nil) then
                        QuestlogOptions[EQL3_Player].CustomZoneColor = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].CustomHeaderColor == nil) then
                        QuestlogOptions[EQL3_Player].CustomHeaderColor = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].CustomObjetiveColor == nil) then
                        QuestlogOptions[EQL3_Player].CustomObjetiveColor = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].FadeHeaderColor == nil) then
                        QuestlogOptions[EQL3_Player].FadeHeaderColor = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].FadeObjectiveColor == nil) then
                        QuestlogOptions[EQL3_Player].FadeObjectiveColor = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].CustomTrackerBGColor == nil) then
                        QuestlogOptions[EQL3_Player].CustomTrackerBGColor = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].UseTrackerListing == nil) then
                        QuestlogOptions[EQL3_Player].UseTrackerListing = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].TrackerList == nil) then
                        QuestlogOptions[EQL3_Player].TrackerList = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].TrackerSymbol == nil) then
                        QuestlogOptions[EQL3_Player].TrackerSymbol = 0;
                end
                
                if(QuestlogOptions[EQL3_Player].Color == nil) then
                        QuestlogOptions[EQL3_Player].Color = {};
                end
                
                -- Colors
                
                if(QuestlogOptions[EQL3_Player].Color["TrackerBG"] == nil) then
                        QuestlogOptions[EQL3_Player].Color["TrackerBG"] = {     r = TOOLTIP_DEFAULT_BACKGROUND_COLOR.r,
                                                                                                                                                                                                                                        g = TOOLTIP_DEFAULT_BACKGROUND_COLOR.g,
                                                                                                                                                                                                                                        b = TOOLTIP_DEFAULT_BACKGROUND_COLOR.b,
                                                                                                                                                                                                                                        a = 0.0};
                end
                
                if(QuestlogOptions[EQL3_Player].Color["TrackerBG"].a == nil) then
                        QuestlogOptions[EQL3_Player].Color["TrackerBG"].a = 0.0;
                end
                
                if(QuestlogOptions[EQL3_Player].Color["Zone"] == nil) then
                        QuestlogOptions[EQL3_Player].Color["Zone"] = {r = 1.0, g = 1.0, b = 1.0};
                end
                
                if(QuestlogOptions[EQL3_Player].Color["HeaderEmpty"] == nil) then
                        QuestlogOptions[EQL3_Player].Color["HeaderEmpty"] = {r = 0.75, g = 0.61, b = 0.0};
                end
                
                if(QuestlogOptions[EQL3_Player].Color["HeaderComplete"] == nil) then
                        QuestlogOptions[EQL3_Player].Color["HeaderComplete"] = {r = NORMAL_FONT_COLOR.r,
                                                                                                                                                                                                                                                        g = NORMAL_FONT_COLOR.g,
                                                                                                                                                                                                                                                        b = NORMAL_FONT_COLOR.b};
                end
                
                if(QuestlogOptions[EQL3_Player].Color["ObjectiveEmpty"] == nil) then
                        QuestlogOptions[EQL3_Player].Color["ObjectiveEmpty"] = {r = 0.8, g = 0.8, b = 0.8};
                end
                
                if(QuestlogOptions[EQL3_Player].Color["ObjectiveComplete"] == nil) then
                        QuestlogOptions[EQL3_Player].Color["ObjectiveComplete"] = {r = HIGHLIGHT_FONT_COLOR.r,
                                                                                                                                                                                                                                                                 g = HIGHLIGHT_FONT_COLOR.g,
                                                                                                                                                                                                                                                                 b = HIGHLIGHT_FONT_COLOR.b};
                end
                
                
                
                if(QuestlogOptions[EQL3_Player].LockTracker == nil) then
                        QuestlogOptions[EQL3_Player].LockTracker = 0;
                end
                if(QuestlogOptions[EQL3_Player].LockPoints == nil) then
                        QuestlogOptions[EQL3_Player].LockPoints = {};
                end
                
                if(QuestlogOptions[EQL3_Player].AddNew == nil) then
                        QuestlogOptions[EQL3_Player].AddNew = 0;
                end
                if(QuestlogOptions[EQL3_Player].RemoveFinished == nil) then
                        QuestlogOptions[EQL3_Player].RemoveFinished = 0;
                end
                if(QuestlogOptions[EQL3_Player].MinimizeFinished == nil) then
                        QuestlogOptions[EQL3_Player].MinimizeFinished = 0;
                end
                if(QuestlogOptions[EQL3_Player].AddUntracked == nil) then
                        QuestlogOptions[EQL3_Player].AddUntracked = 0;
                end
                
                
                if(QuestlogOptions[EQL3_Player].TrackerFontHeight == nil) then
                        QuestlogOptions[EQL3_Player].TrackerFontHeight = 12;
                end
                
                if(QuestlogOptions[EQL3_Player].TrackerShowMinimizer == nil) then
                        QuestlogOptions[EQL3_Player].TrackerShowMinimizer = 0;
                end
                if(QuestlogOptions[EQL3_Player].TrackerIsMinimized == nil) then
                        QuestlogOptions[EQL3_Player].TrackerIsMinimized = 0;
                end
                
                -- 3.5.6b
                if( QuestlogOptions[EQL3_Player].AutoCompleteQuests == nil ) then
                        QuestlogOptions[EQL3_Player].AutoCompleteQuests = 0;
                end
                if( QuestlogOptions[EQL3_Player].RemoveCompletedObjectives == nil ) then
                        QuestlogOptions[EQL3_Player].RemoveCompletedObjectives = 0;
                end
                if( QuestlogOptions[EQL3_Player].ShowObjectiveMarkers == nil ) then
                        QuestlogOptions[EQL3_Player].ShowObjectiveMarkers = 1;
                end
                if( QuestlogOptions[EQL3_Player].OnlyLevelsInLog == nil ) then
                        QuestlogOptions[EQL3_Player].OnlyLevelsInLog = 0;
                end
                
                -- 3.5.9
                if( QuestlogOptions[EQL3_Player].ItemTooltip == nil ) then
                        QuestlogOptions[EQL3_Player].ItemTooltip = 0;
                end
                if( QuestlogOptions[EQL3_Player].MobTooltip == nil ) then
                        QuestlogOptions[EQL3_Player].MobTooltip = 0;
                end
                if( QuestlogOptions[EQL3_Player].InfoOnQuestCompletion == nil ) then
                        QuestlogOptions[EQL3_Player].InfoOnQuestCompletion = 0;
                end
                
                
                if(QuestlogOptions[EQL3_Player].Color["Tooltip"] == nil) then
                        QuestlogOptions[EQL3_Player].Color["Tooltip"] = {r = 1.0, g = 0.8, b = 0.0};
                end
                
                if(QuestlogOptions[EQL3_Player].CustomTooltipColor == nil) then
                        QuestlogOptions[EQL3_Player].CustomTooltipColor = 0;
                end
                
                
                
        elseif  ( event == "QUEST_PROGRESS" ) then
                if ( QuestlogOptions[EQL3_Player].AutoCompleteQuests == 1 ) then
                        if ( IsQuestCompletable() ) then
                                CompleteQuest();
                        end
                end
        elseif ( event == "QUEST_COMPLETE" ) then
                if ( QuestlogOptions[EQL3_Player].AutoCompleteQuests == 1 and GetNumQuestChoices() == 0 ) then
                        GetQuestReward(QuestFrameRewardPanel.itemChoice);
                end
        end
end

local old_QuestLog_OnEvent = QuestLog_OnEvent;
function QuestLog_OnEvent(event)
        if ( event == "QUEST_LOG_UPDATE" or event == "UPDATE_FACTION" or (event == "UNIT_QUEST_LOG_CHANGED" and arg1 == "player") ) then
                QuestLog_Update();
                QuestWatch_Update();
                if ( EQL3_QuestLogFrame:IsVisible() ) then
                        QuestLog_UpdateQuestDetails(1);
                end
                
                if(event == "QUEST_LOG_UPDATE") then
                        if(QuestlogOptions[EQL3_Player].InfoOnQuestCompletion == 1) then
                                LookForCompletedQuests();
                        end
                end
        else
                QuestLog_Update();
                if ( event == "PARTY_MEMBERS_CHANGED" ) then
                        -- Determine whether the selected quest is pushable or not
                        if ( GetQuestLogPushable() and GetNumPartyMembers() > 0 ) then
                                EQL3_QuestFramePushQuestButton:Enable();
                        else
                                EQL3_QuestFramePushQuestButton:Disable();
                        end
                end
        end
end


-- OnShow
local old_QuestLog_OnShow = QuestLog_OnShow;
function QuestLog_OnShow()
        -- fix for crash with gypsy causing blank log and error
        if ( Gypsy_ShowQuestLevels and Gypsy_ShowQuestLevels == 1 ) then Gypsy_ShowQuestLevels = 0 end
        
        if(QuestLogFrame:IsVisible()) then
                QuestLogFrame:Hide();
        end
        
        ShowUIPanel(EQL3_QuestLogFrame);
        
        if (QuestlogOptions[EQL3_Player].LogLockPoints and
                                        QuestlogOptions[EQL3_Player].LogLockPoints.pointone and
                                        QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo) then
                EQL3_QuestLogFrame:ClearAllPoints();
                EQL3_QuestLogFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", QuestlogOptions[EQL3_Player].LogLockPoints.pointone,QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo);
        end
        
        UpdateMicroButtons();
        PlaySound("igQuestLogOpen");
        QuestLog_SetSelection(GetQuestLogSelection());
        QuestLog_Update();
end

-- OnHide
local old_QuestLog_OnHide = QuestLog_OnHide;
function QuestLog_OnHide()
        HideUIPanel(EQL3_QuestLogFrame);
        UpdateMicroButtons();
        PlaySound("igQuestLogClose");
        EQL3_Organize_Popup:Hide();
        EQL3_OptionsFrame:Hide();
        if ( QuestlogOptions[EQL3_Player].MinimizeUponClose == 1 ) then
                EQL3_Minimize();
        end
end

-- OnUpdate
local old_QuestLog_OnUpdate = QuestLog_OnUpdate;
function QuestLog_OnUpdate(elapsed)
        if ( EQL3_QuestLogFrame.hasTimer ) then
                EQL3_QuestLogFrame.timePassed = EQL3_QuestLogFrame.timePassed + elapsed;
                if ( EQL3_QuestLogFrame.timePassed > UPDATE_DELAY ) then
                        EQL3_QuestLogTimerText:SetText(TEXT(TIME_REMAINING).." "..SecondsToTime(GetQuestLogTimeLeft()));
                        EQL3_QuestLogFrame.timePassed = 0;              
                end
        end
end



local normal_QuestLog_Update = QuestLog_Update;

function QuestLog_Update()
        local numEntries, numQuests = GetNumQuestLogEntries();
        if ( numEntries == 0 ) then
                EQL3_EmptyQuestLogFrame:Show();
                EQL3_QuestLogFrameAbandonButton:Disable();
                QuestLogFrame.hasTimer = nil;
                EQL3_QuestLogDetailScrollFrame:Hide();
                EQL3_QuestLogExpandButtonFrame:Hide();
        else
                EQL3_EmptyQuestLogFrame:Hide();
                EQL3_QuestLogFrameAbandonButton:Enable();
                EQL3_QuestLogDetailScrollFrame:Show();
                EQL3_QuestLogExpandButtonFrame:Show();
        end

        -- Update Quest Count
        EQL3_QuestLogQuestCount:SetText(format(QUEST_LOG_COUNT_TEMPLATE, numQuests, MAX_QUESTLOG_QUESTS));
        EQL3_QuestLogCountMiddle:SetWidth(EQL3_QuestLogQuestCount:GetWidth());

        -- ScrollFrame update
        FauxScrollFrame_Update(EQL3_QuestLogListScrollFrame, numEntries, EQL3_QUESTS_DISPLAYED, QUESTLOG_QUEST_HEIGHT, nil, nil, nil, EQL3_QuestLogHighlightFrame, 293, 316 )
        
        -- Update the quest listing
        EQL3_QuestLogHighlightFrame:Hide();
        
        local questIndex, questLogTitle, questTitleTag, questNumGroupMates, questNormalText, questHighlightText, questDisabledText, questHighlight, questCheck;
        local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete, color;
        local numPartyMembers, partyMembersOnQuest, tempWidth, textWidth, tempLevel;
        for i=1, EQL3_QUESTS_DISPLAYED, 1 do
                questIndex = i + FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame);
                questLogTitle = getglobal("EQL3_QuestLogTitle"..i);
                questTitleTag = getglobal("EQL3_QuestLogTitle"..i.."Tag");
                questNumGroupMates = getglobal("EQL3_QuestLogTitle"..i.."GroupMates");
                questCheck = getglobal("EQL3_QuestLogTitle"..i.."Check");
                questNormalText = getglobal("EQL3_QuestLogTitle"..i.."NormalText");
                questHighlightText = getglobal("EQL3_QuestLogTitle"..i.."NormalText");
                questDisabledText = getglobal("EQL3_QuestLogTitle"..i.."NormalText");
                questHighlight = getglobal("EQL3_QuestLogTitle"..i.."Highlight");
                if ( questIndex <= numEntries ) then
                        questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(questIndex);
                        if(not questLogTitleText) then questLogTitleText = "Please report this error!" end
                        if ( isHeader ) then
                                if ( questLogTitleText ) then
                                        questLogTitle:SetText(questLogTitleText);
                                else
                                        questLogTitle:SetText("");
                                end
                                
                                --[[
                                if ( isCollapsed ) then
                                        questLogTitle:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
                                else
                                        questLogTitle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up"); 
                                end
                                ]]--
                                
                                questLogTitle:SetNormalTexture("Interface\\Addons\\EQL3\\Images\\EQL3_Header_Icon");
                                
                                questHighlight:SetTexture("Interface\\Buttons\\UI-PlusButton-Hilight");
                                questNumGroupMates:SetText("");
                                questCheck:Hide();
                        else
                                
                                if(QuestlogOptions[EQL3_Player].ShowQuestLevels == 1) then
                                        tempLevel = level;
                                        if (questTag ~= NIL) then
                                                tempLevel = tempLevel.."+";
                                        end
                                        questLogTitle:SetText("  ".."["..tempLevel.."] "..questLogTitleText);
                                else
                                        questLogTitle:SetText("  "..questLogTitleText);
                                end
                                
                                
                                -- Set Dummy text to get text width *SUPER HACK*
                                QuestLogDummyText:SetText(questLogTitle:GetText());

                                questLogTitle:SetNormalTexture("");
                                questHighlight:SetTexture("");

                                -- If not a header see if any nearby group mates are on this quest
                                numPartyMembers = GetNumPartyMembers();
                                if ( numPartyMembers == 0 ) then
                                        --return;
                                end
                                partyMembersOnQuest = 0;
                                for j=1, numPartyMembers do
                                        if ( IsUnitOnQuest(questIndex, "party"..j) ) then
                                                partyMembersOnQuest = partyMembersOnQuest + 1;
                                        end
                                end
                                if ( partyMembersOnQuest > 0 ) then
                                        questNumGroupMates:SetText("["..partyMembersOnQuest.."]");
                                else
                                        questNumGroupMates:SetText("");
                                end
                        end
                        -- Save if its a header or not
                        questLogTitle.isHeader = isHeader;

                        -- Set the quest tag
                        if ( isComplete and isComplete < 0 ) then
                                questTag = FAILED;
                        elseif ( isComplete and isComplete > 0 ) then
                                questTag = COMPLETE;
                        end
                        if ( questTag ) then
                                questTitleTag:SetText("("..questTag..")");
                                -- Shrink text to accomdate quest tags without wrapping
                                tempWidth = 275 - 15 - questTitleTag:GetWidth();
                                
                                if ( QuestLogDummyText:GetWidth() > tempWidth ) then
                                        textWidth = tempWidth;
                                else
                                        textWidth = QuestLogDummyText:GetWidth();
                                end
                                
                                questNormalText:SetWidth(tempWidth);
                                questHighlightText:SetWidth(tempWidth);
                                questDisabledText:SetWidth(tempWidth);
                                
                                -- If there's quest tag position check accordingly
                                questCheck:Hide();
                                if ( IsQuestWatched(questIndex) ) then
                                        questCheck:SetPoint("LEFT", questLogTitle, "LEFT", textWidth+24, 0);
                                        questCheck:Show();
                                end
                        else
                                questTitleTag:SetText("");
                                -- Reset to max text width
                                questNormalText:SetWidth(275);
                                questHighlightText:SetWidth(275);
                                questDisabledText:SetWidth(275);

                                -- Show check if quest is being watched
                                questCheck:Hide();
                                if ( IsQuestWatched(questIndex) ) then
                                        questCheck:SetPoint("LEFT", questLogTitle, "LEFT", QuestLogDummyText:GetWidth()+24, 0);
                                        questCheck:Show();
                                end
                        end

                        

                        -- Color the quest title and highlight according to the difficulty level
                        
                        if(not level) then level = 0; end
                        
                        local playerLevel = UnitLevel("player");
                        if ( isHeader ) then
                                color = QuestDifficultyColor["header"];
                        else
                                color = GetDifficultyColor(level);
                        end
                        questTitleTag:SetTextColor(color.r, color.g, color.b);
                        questLogTitle:SetTextColor(color.r, color.g, color.b);
                        questNumGroupMates:SetTextColor(color.r, color.g, color.b);
                        questLogTitle.r = color.r;
                        questLogTitle.g = color.g;
                        questLogTitle.b = color.b;
                        questLogTitle:Show();
                        
                        -- Place the highlight and lock the highlight state
                        if ( EQL3_QuestLogFrame.selectedButtonID and GetQuestLogSelection() == questIndex ) then
                                EQL3_QuestLogHighlightFrame:SetPoint("TOPLEFT", "EQL3_QuestLogTitle"..i, "TOPLEFT", 0, 0);
                                EQL3_QuestLogHighlightFrame:Show();
                                questTitleTag:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
                                questLogTitle:LockHighlight();
                        else
                                questLogTitle:UnlockHighlight();
                        end
                else
                        questLogTitle:Hide();
                end
        end
                
        -- Set the expand/collapse all button texture
        local numHeaders = 0;
        local notExpanded = 0;
        -- Somewhat redundant loop, but cleaner than the alternatives
        for i=1, numEntries, 1 do
                local index = i;
                local questLogTitleText, level, questTag, isHeader, isCollapsed = GetQuestLogTitle(i);
                if ( questLogTitleText and isHeader ) then
                        numHeaders = numHeaders + 1;
                        if ( isCollapsed ) then
                                notExpanded = notExpanded + 1;
                        end
                end
        end
        -- If all headers are not expanded then show collapse button, otherwise show the expand button
        if ( notExpanded ~= numHeaders ) then
                EQL3_QuestLogCollapseAllButton.collapsed = nil;
                EQL3_QuestLogCollapseAllButton:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up");
        else
                EQL3_QuestLogCollapseAllButton.collapsed = 1;
                EQL3_QuestLogCollapseAllButton:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
        end

        -- Update Quest Count
        EQL3_QuestLogQuestCount:SetText(format(QUEST_LOG_COUNT_TEMPLATE, numQuests, MAX_QUESTLOG_QUESTS));
        EQL3_QuestLogCountMiddle:SetWidth(EQL3_QuestLogQuestCount:GetWidth());

        -- If no selection then set it to the first available quest
        if ( GetQuestLogSelection() == 0 ) then
                QuestLog_SetFirstValidSelection();
        end

        -- Determine whether the selected quest is pushable or not
        if ( numEntries == 0 ) then
                EQL3_QuestFramePushQuestButton:Disable();
        elseif ( GetQuestLogPushable() and GetNumPartyMembers() > 0 ) then
                EQL3_QuestFramePushQuestButton:Enable();
        else
                EQL3_QuestFramePushQuestButton:Disable();
        end
end



local normal_QuestLog_SetSelection = QuestLog_SetSelection;

function QuestLog_SetSelection(questID)
        local selectedQuest;
        if ( questID == 0 ) then
                EQL3_QuestLogDetailScrollFrame:Hide();
                return 0;
        end

        -- Get xml id
        local id = questID - FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame);
        
        SelectQuestLogEntry(questID);
        local titleButton = getglobal("EQL3_QuestLogTitle"..id);
        local titleButtonTag = getglobal("EQL3_QuestLogTitle"..id.."Tag");
        
        local questLogTitleText, level, questTag, isHeader, isCollapsed = GetQuestLogTitle(questID);
        if ( isHeader ) then
                if ( isCollapsed ) then
                        ExpandQuestHeader(questID);
                        MakeQuestHeaderList();
                        return 0;
                else
                        CollapseQuestHeader(questID);
                        MakeQuestHeaderList();
                        return 0;
                end
        else
                -- Set newly selected quest and highlight it
                EQL3_QuestLogFrame.selectedButtonID = questID;
                local scrollFrameOffset = FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame);
                if ( questID > scrollFrameOffset and questID <= (scrollFrameOffset + EQL3_QUESTS_DISPLAYED) and questID <= GetNumQuestLogEntries() ) then
                        titleButton:LockHighlight();
                        titleButtonTag:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
                        
                        EQL3_QuestLogSkillHighlight:SetVertexColor(titleButton.r, titleButton.g, titleButton.b);
                        EQL3_QuestLogHighlightFrame:SetPoint("TOPLEFT", "EQL3_QuestLogTitle"..id, "TOPLEFT", 5, 0);
                        EQL3_QuestLogHighlightFrame:Show();
                end
        end
        if ( GetQuestLogSelection() > GetNumQuestLogEntries() ) then
                return 0;
        end
        QuestLog_UpdateQuestDetails();
        return 1;
end


local normal_QuestLog_UpdateQuestDetails = QuestLog_UpdateQuestDetails;

function QuestLog_UpdateQuestDetails(doNotScroll)
        local questID = GetQuestLogSelection();
        local questTitle = GetQuestLogTitle(questID);
        if ( not questTitle ) then
                questTitle = "";
        end
        if ( IsCurrentQuestFailed() ) then
                questTitle = questTitle.." - ("..TEXT(FAILED)..")";
        end
        EQL3_QuestLogQuestTitle:SetText(questTitle);

        local questDescription;
        local questObjectives;
        questDescription, questObjectives = GetQuestLogQuestText();
        EQL3_QuestLogObjectivesText:SetText(questObjectives);
        
        local questTimer = GetQuestLogTimeLeft();
        if ( questTimer ) then
                EQL3_QuestLogFrame.hasTimer = 1;
                EQL3_QuestLogFrame.timePassed = 0;
                EQL3_QuestLogTimerText:Show();
                EQL3_QuestLogTimerText:SetText(TEXT(TIME_REMAINING).." "..SecondsToTime(questTimer));
                EQL3_QuestLogObjective1:SetPoint("TOPLEFT", "EQL3_QuestLogTimerText", "BOTTOMLEFT", 0, -10);
        else
                EQL3_QuestLogFrame.hasTimer = nil;
                EQL3_QuestLogTimerText:Hide();
                EQL3_QuestLogObjective1:SetPoint("TOPLEFT", "EQL3_QuestLogObjectivesText", "BOTTOMLEFT", 0, -10);
        end
        
        -- Show Quest Watch if track quest is checked
        local numObjectives = GetNumQuestLeaderBoards();
        
        for i=1, numObjectives, 1 do
                local string = getglobal("EQL3_QuestLogObjective"..i);
                local text;
                local type;
                local finished;
                text, type, finished = GetQuestLogLeaderBoard(i);
                if ( not text or strlen(text) == 0 ) then
                        text = type;
                end
                if ( finished ) then
                        string:SetTextColor(0.2, 0.2, 0.2);
                        text = text.." ("..TEXT(COMPLETE)..")";
                else
                        string:SetTextColor(0, 0, 0);
                end
                string:SetText(text);
                string:Show();
                QuestFrame_SetAsLastShown(string);
        end

        for i=numObjectives + 1, MAX_OBJECTIVES, 1 do
                getglobal("EQL3_QuestLogObjective"..i):Hide();
        end

        -- If there's money required then anchor and display it
        if ( GetQuestLogRequiredMoney() > 0 ) then
                if ( numObjectives > 0 ) then
                        EQL3_QuestLogRequiredMoneyText:SetPoint("TOPLEFT", "EQL3_QuestLogObjective"..numObjectives, "BOTTOMLEFT", 0, -4);
                else
                        EQL3_QuestLogRequiredMoneyText:SetPoint("TOPLEFT", "EQL3_QuestLogObjectivesText", "BOTTOMLEFT", 0, -10);
                end
                
                MoneyFrame_Update("EQL3_QuestLogRequiredMoneyFrame", GetQuestLogRequiredMoney());
                
                if ( GetQuestLogRequiredMoney() > GetMoney() ) then
                        -- Not enough money
                        EQL3_QuestLogRequiredMoneyText:SetTextColor(0, 0, 0);
                        SetMoneyFrameColor("EQL3_QuestLogRequiredMoneyFrame", 1.0, 0.1, 0.1);
                else
                        EQL3_QuestLogRequiredMoneyText:SetTextColor(0.2, 0.2, 0.2);
                        SetMoneyFrameColor("EQL3_QuestLogRequiredMoneyFrame", 1.0, 1.0, 1.0);
                end
                EQL3_QuestLogRequiredMoneyText:Show();
                EQL3_QuestLogRequiredMoneyFrame:Show();
        else
                EQL3_QuestLogRequiredMoneyText:Hide();
                EQL3_QuestLogRequiredMoneyFrame:Hide();
        end

        if ( GetQuestLogRequiredMoney() > 0 ) then
                EQL3_QuestLogDescriptionTitle:SetPoint("TOPLEFT", "EQL3_QuestLogRequiredMoneyText", "BOTTOMLEFT", 0, -10);
        elseif ( numObjectives > 0 ) then
                EQL3_QuestLogDescriptionTitle:SetPoint("TOPLEFT", "EQL3_QuestLogObjective"..numObjectives, "BOTTOMLEFT", 0, -10);
        else
                if ( questTimer ) then
                        EQL3_QuestLogDescriptionTitle:SetPoint("TOPLEFT", "EQL3_QuestLogTimerText", "BOTTOMLEFT", 0, -10);
                else
                        EQL3_QuestLogDescriptionTitle:SetPoint("TOPLEFT", "EQL3_QuestLogObjectivesText", "BOTTOMLEFT", 0, -10);
                end
        end
        if ( questDescription ) then
                EQL3_QuestLogQuestDescription:SetText(questDescription);
                QuestFrame_SetAsLastShown(EQL3_QuestLogQuestDescription);
        end
        local numRewards = GetNumQuestLogRewards();
        local numChoices = GetNumQuestLogChoices();
        local money = GetQuestLogRewardMoney();

        if ( (numRewards + numChoices + money) > 0 ) then
                EQL3_QuestLogRewardTitleText:Show();
                QuestFrame_SetAsLastShown(EQL3_QuestLogRewardTitleText);
        else
                EQL3_QuestLogRewardTitleText:Hide();
        end

        QuestFrameItems_Update("QuestLog");
        if ( not doNotScroll ) then
                EQL3_QuestLogDetailScrollFrameScrollBar:SetValue(0);
        end
        EQL3_QuestLogDetailScrollFrame:UpdateScrollChildRect();
end



local normal_QuestFrame_SetAsLastShown = QuestFrame_SetAsLastShown;
function QuestFrame_SetAsLastShown(frame, spacerFrame)
        if ( not spacerFrame ) then
                spacerFrame = EQL3_QuestLogSpacerFrame;
        end
        spacerFrame:SetPoint("TOP", frame, "BOTTOM", 0, 0);
end



local normal_QuestLogTitleButton_OnClick = QuestLogTitleButton_OnClick;
function QuestLogTitleButton_OnClick(button)
        local questName = this:GetText();
        local questIndex = this:GetID() + FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame);
        
        if(button == "LeftButton") then
                if ( IsShiftKeyDown() ) then
                        if( IsControlKeyDown() ) then
                                if ( this.isHeader ) then
                                        return;
                                end
                                if ( not ChatFrameEditBox:IsVisible() ) then
                                        EQL3_ClearTracker();
                                        AddQuestWatch(questIndex);
                                        QuestWatch_Update();
                                end
                        else
                                -- If header then return
                                local questLogTitleText, isHeader, isCollapsed, firstTrackable, lastTrackable, numTracked, numUntracked;
                                lastTrackable = -1;
                                numTracked = 0;
                                numUntracked = 0;
                                local track = false;
                                if ( this.isHeader ) then
        
                                        for i=1, GetNumQuestLogEntries(), 1 do
                                                questLogTitleText, _, _, isHeader, isCollapsed, _ = GetQuestLogTitle(i);
                                                if ( questLogTitleText == questName ) then
                                                        track = true;
                                                        firstTrackable = i+1;
                                                elseif ( track ) then
                                                        if ( not isHeader ) then
                                                                if( IsQuestWatched(i) ) then
                                                                        numTracked = numTracked+1;
                                                                        RemoveQuestWatch(i);
                                                                else
                                                                        numUntracked = numUntracked+1;
                                                                        RemoveQuestWatch(i);
                                                                end;
                                                        end
                                                        if ( isHeader and questLogTitleText ~= questName ) then
                                                                lastTrackable = i-1;
                                                                break;
                                                        end
                                                end
                                        end
                                        if ( lastTrackable == -1 ) then
                                                lastTrackable = GetNumQuestLogEntries();
                                        end
                                        if ( numUntracked == 0 ) then
                                                -- Untrack all
                                                for i=firstTrackable, lastTrackable, 1 do
                                                        RemoveQuestWatch(i);
                                                end
                                                QuestWatch_Update();
                                        else
                                                -- Track all
                                                for i=firstTrackable, lastTrackable, 1 do
                                                        AddQuestWatch(i);
                                                end
                                                QuestWatch_Update();
                                        end
                                        QuestLog_Update();
                                        return;
                                end
                                
                                -- Otherwise try to track it or put it into chat
                                if ( ChatFrameEditBox:IsVisible() ) then
                                        -- Trim leading whitespace
                                        ChatFrameEditBox:Insert(gsub(this:GetText(), " *(.*)", "%1"));
                                else
                                        -- Shift-click toggles quest-watch on this quest.
                                        if ( IsQuestWatched(questIndex) ) then
                                                RemoveQuestWatch(questIndex);
                                                QuestWatch_Update();
                                        else
                                                --[[ Set error if no objectives
                                                if ( GetNumQuestLeaderBoards(questIndex) == 0 ) then
                                                        UIErrorsFrame:AddMessage(QUEST_WATCH_NO_OBJECTIVES, 1.0, 0.1, 0.1, 1.0, UIERRORS_HOLD_TIME);
                                                        return;
                                                end]]-- 
                                                -- Set an error message if trying to show too many quests
                                                if ( GetNumQuestWatches() >= MAX_WATCHABLE_QUESTS ) then
                                                        UIErrorsFrame:AddMessage(format(QUEST_WATCH_TOO_MANY, MAX_WATCHABLE_QUESTS), 1.0, 0.1, 0.1, 1.0, UIERRORS_HOLD_TIME);
                                                        return;
                                                end
                                                AddQuestWatch(questIndex);
                                                QuestWatch_Update();
                                        end
                                end
                        end
                end
                
                if(this.isHeader) then
                        if ( EQL3_OrganizeFrame:IsVisible() ) then
                                EQL3_OrganizeFrame_Text:SetText(questName);
                                EQL3_OrganizeFrame_Text:ClearFocus();
                                
                                EQL3_OrganizeFunctions(questName);
                                EQL3_OrganizeFrame:Hide();
                        end
                end
                
        end
        
        if(QuestLog_SetSelection(questIndex) == 1) then
                if(not EQL3_QuestLogFrame_Description:IsVisible() and not IsShiftKeyDown() and not IsControlKeyDown() and QuestlogOptions[EQL3_Player].RestoreUponSelect == 1) then
                        EQL3_Maximize();
                end
        end
        
        
        if(button == "LeftButton") then
                if( not IsShiftKeyDown() and IsControlKeyDown() ) then
                        if ( ChatFrameEditBox:IsVisible() ) then
                                AddQuestStatusToChatFrame(questIndex, questName);
                        end
                end
        else
                if ( not this.isHeader ) then
                        if ( EQL3_IsQuestWatched(questIndex) ) then
                                EQL3_Organize_Popup_Track_Text:SetText(EQL3_POPUP_UNTRACK);
                        else
                                EQL3_Organize_Popup_Track_Text:SetText(EQL3_POPUP_TRACK);
                        end
                        EQL3_Organize_Popup:ClearAllPoints();
                        EQL3_Organize_Popup:SetPoint("TOPLEFT", this, "TOPLEFT", 24, 0);
                        EQL3_Organize_Popup:Raise();
                        EQL3_Organize_Popup:Show();
                end
        end

        QuestLog_Update();
end


function AddQuestStatusToChatFrame(questIndex, questName)
        local text, type, finished;
        if ( ChatFrameEditBox:IsVisible() ) then                
                local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(questIndex);
                
                if(isComplete) then
                        ChatFrameEditBox:Insert("(Complete) ");
                end
                
                ChatFrameEditBox:Insert(questLogTitleText);
                
                local numObjectives = GetNumQuestLeaderBoards();
                if (numObjectives>0) then
                        ChatFrameEditBox:Insert(": ");
                        for i=1, numObjectives, 1 do
                                text, type, finished = GetQuestLogLeaderBoard(i);
                                if(not text or strlen(text) == 0) then
                                        text = type;
                                end
                                ChatFrameEditBox:Insert(text);
                                if(i < numObjectives) then
                                        ChatFrameEditBox:Insert(", ");
                                end
                        end
                end             
        end
end


-- Only called on load
function ManageQuestHeaders()
        QuestLog_SetSelection(GetQuestLogSelection());
        EQL3_Temp.hasManaged = true;
        if(QuestlogOptions[EQL3_Player].HeaderList) then
                                        
                local questLogTitleText, isHeader, isCollapsed;
                local numHeaders = table.getn(QuestlogOptions[EQL3_Player].HeaderList);
                local numEntries = GetNumQuestLogEntries();
                
                if(numHeaders > 0) then
                
                        for i=numEntries, 1, -1 do
                                questLogTitleText, _, _, isHeader, isCollapsed = GetQuestLogTitle(i);
                                
                                if(isHeader) then
                                        for j=1, numHeaders, 1 do
                                                if(questLogTitleText == QuestlogOptions[EQL3_Player].HeaderList[j]) then
                                                        CollapseQuestHeader(i);
                                                end
                                        end
                                end
                                
                        end
                        
                end
        end
end

function MakeQuestHeaderList()
        QuestlogOptions[EQL3_Player].HeaderList = {};

        local numEntries = GetNumQuestLogEntries();
        local questLogTitleText, isHeader, isCollapsed;
        
        for j=numEntries, 1, -1 do
                questLogTitleText, _, _, isHeader, isCollapsed = GetQuestLogTitle(j);
                if (isHeader and isCollapsed) then
                        table.insert(QuestlogOptions[EQL3_Player].HeaderList, questLogTitleText);
                end
        end
end




local normal_QuestLog_UpdatePartyInfoTooltip = QuestLog_UpdatePartyInfoTooltip;

function QuestLog_UpdatePartyInfoTooltip()
        local index = this:GetID() + FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame);
        local numPartyMembers = GetNumPartyMembers();
        if ( numPartyMembers == 0 or this.isHeader ) then
                return;
        end
        GameTooltip_SetDefaultAnchor(GameTooltip, this);
        
        local questLogTitleText = GetQuestLogTitle(index);
        GameTooltip:SetText(questLogTitleText);

        local partyMemberOnQuest;
        for i=1, numPartyMembers do
                if ( IsUnitOnQuest(index, "party"..i) ) then
                        if ( not partyMemberOnQuest ) then
                                GameTooltip:AddLine(HIGHLIGHT_FONT_COLOR_CODE..PARTY_QUEST_STATUS_ON..FONT_COLOR_CODE_CLOSE);
                                partyMemberOnQuest = 1;
                        end
                        GameTooltip:AddLine(LIGHTYELLOW_FONT_COLOR_CODE..UnitName("party"..i)..FONT_COLOR_CODE_CLOSE);
                end
        end
        if ( not partyMemberOnQuest ) then
                GameTooltip:AddLine(HIGHLIGHT_FONT_COLOR_CODE..PARTY_QUEST_STATUS_NONE..FONT_COLOR_CODE_CLOSE);
        end
        GameTooltip:Show();
end


local normal_QuestLogCollapseAllButton_OnClick = QuestLogCollapseAllButton_OnClick;
function QuestLogCollapseAllButton_OnClick()
        if (this.collapsed) then
                this.collapsed = nil;
                ExpandQuestHeader(0);
                MakeQuestHeaderList();
        else
                this.collapsed = 1;
                EQL3_QuestLogListScrollFrameScrollBar:SetValue(0);
                CollapseQuestHeader(0);
                MakeQuestHeaderList();
        end
end


old_GetQuestLogTitle = GetQuestLogTitle;
function GetQuestLogTitle(questIndex)
        local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete;
        
        
        if (not EQL3_UpdateDB()) then
                questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete =  old_GetQuestLogTitle(questIndex);
        end
        if(EQL3_Temp.savedQuestIDMap and EQL3_Temp.savedQuestIDMap[questIndex]) then
                if(EQL3_Temp.savedQuestIDMap[questIndex].questID) then
                        questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = old_GetQuestLogTitle(EQL3_Temp.savedQuestIDMap[questIndex].questID);
                else
                        return EQL3_Temp.savedQuestIDMap[questIndex].header, 0, nil, true, nil, nil;
                end
        end
        
        if ( isHeader  or not questLogTitleText ) then
        else
                if ( not QuestLevel_Quest2Level[questLogTitleText] ) then
                        local queststorage = "";
                        queststorage = QuestLevel_StorageSet(queststorage, "levelmin", level);
                        if (questTag ~= NIL) then
                                queststorage = QuestLevel_StorageSet(queststorage, "elite", "x");
                        end
                        QuestLevel_Quest2Level[questLogTitleText] = queststorage;
                else
                        local queststorage = QuestLevel_Quest2Level[questLogTitleText];
                        local levelmin = tonumber(QuestLevel_StorageGet(queststorage, "levelmin"));
                        local levelmax = QuestLevel_StorageGet(queststorage, "levelmax");
                        if ( levelmax == nil ) then
                                levelmax = levelmin;
                        else
                                levelmax = tonumber(levelmax);
                        end
                        if (levelmin > level) then
                                queststorage = QuestLevel_StorageSet(queststorage, "levelmin", level);
                                queststorage = QuestLevel_StorageSet(queststorage, "levelmax", levelmax);
                        end
                        if (levelmax < level) then
                                queststorage = QuestLevel_StorageSet(queststorage, "levelmax", level);
                        end
                        if (questTag ~= NIL and QuestLevel_StorageGet(queststorage, "elite") == nil) then
                                queststorage = QuestLevel_StorageSet(queststorage, "elite", "");
                        end
                        QuestLevel_Quest2Level[questLogTitleText] = queststorage;
                end
        end
        
        return questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete;
end




local old_QuestFrameItems_Update = QuestFrameItems_Update;
function QuestFrameItems_Update(questState)
        local isQuestLog = 0;
        if ( questState == "QuestLog" ) then
                isQuestLog = 1;
                questState = "EQL3_QuestLog";
        end
        local numQuestRewards;
        local numQuestChoices;
        local numQuestSpellRewards = 0;
        local money;
        local spacerFrame;
        if ( isQuestLog == 1 ) then
                numQuestRewards = GetNumQuestLogRewards();
                numQuestChoices = GetNumQuestLogChoices();
                if ( GetQuestLogRewardSpell() ) then
                        numQuestSpellRewards = 1;
                end
                money = GetQuestLogRewardMoney();
                spacerFrame = EQL3_QuestLogSpacerFrame;
        else
                numQuestRewards = GetNumQuestRewards();
                numQuestChoices = GetNumQuestChoices();
                if ( GetRewardSpell() ) then
                        numQuestSpellRewards = 1;
                end
                money = GetRewardMoney();
                spacerFrame = QuestSpacerFrame;
        end

        local totalRewards = numQuestRewards + numQuestChoices + numQuestSpellRewards;
        local questItemName = questState.."Item";
        local material = QuestFrame_GetMaterial();
        local  questItemReceiveText = getglobal(questState.."ItemReceiveText")
        if ( totalRewards == 0 and money == 0 ) then
                getglobal(questState.."RewardTitleText"):Hide();
        else
                getglobal(questState.."RewardTitleText"):Show();
                QuestFrame_SetTitleTextColor(getglobal(questState.."RewardTitleText"), material);
                QuestFrame_SetAsLastShown(getglobal(questState.."RewardTitleText"), spacerFrame);
        end
        if ( money == 0 ) then
                getglobal(questState.."MoneyFrame"):Hide();
        else
                getglobal(questState.."MoneyFrame"):Show();
                QuestFrame_SetAsLastShown(getglobal(questState.."MoneyFrame"), spacerFrame);
                MoneyFrame_Update(questState.."MoneyFrame", money);
        end
        
        for i=totalRewards + 1, MAX_NUM_ITEMS, 1 do
                getglobal(questItemName..i):Hide();
        end
        local questItem, name, texture, quality, isUsable, numItems = 1;
        if ( numQuestChoices > 0 ) then
                getglobal(questState.."ItemChooseText"):Show();
                QuestFrame_SetTextColor(getglobal(questState.."ItemChooseText"), material);
                QuestFrame_SetAsLastShown(getglobal(questState.."ItemChooseText"), spacerFrame);
                for i=1, numQuestChoices, 1 do  
                        questItem = getglobal(questItemName..i);
                        questItem.type = "choice";
                        numItems = 1;
                        if ( isQuestLog == 1 ) then
                                name, texture, numItems, quality, isUsable = GetQuestLogChoiceInfo(i);
                        else
                                name, texture, numItems, quality, isUsable = GetQuestItemInfo(questItem.type, i);
                        end
                        questItem:SetID(i)
                        questItem:Show();
                        -- For the tooltip
                        questItem.rewardType = "item"
                        QuestFrame_SetAsLastShown(questItem, spacerFrame);
                        getglobal(questItemName..i.."Name"):SetText(name);
                        SetItemButtonCount(questItem, numItems);
                        SetItemButtonTexture(questItem, texture);
                        if ( isUsable ) then
                                SetItemButtonTextureVertexColor(questItem, 1.0, 1.0, 1.0);
                                SetItemButtonNameFrameVertexColor(questItem, 1.0, 1.0, 1.0);
                        else
                                SetItemButtonTextureVertexColor(questItem, 0.9, 0, 0);
                                SetItemButtonNameFrameVertexColor(questItem, 0.9, 0, 0);
                        end
                        if ( i > 1 ) then
                                if ( mod(i,2) == 1 ) then
                                        questItem:SetPoint("TOPLEFT", questItemName..(i - 2), "BOTTOMLEFT", 0, -2);
                                else
                                        questItem:SetPoint("TOPLEFT", questItemName..(i - 1), "TOPRIGHT", 1, 0);
                                end
                        else
                                questItem:SetPoint("TOPLEFT", questState.."ItemChooseText", "BOTTOMLEFT", -3, -5);
                        end
                        
                end
        else
                getglobal(questState.."ItemChooseText"):Hide();
        end
        local rewardsCount = 0;
        if ( numQuestRewards > 0 or money > 0 or numQuestSpellRewards > 0) then
                QuestFrame_SetTextColor(questItemReceiveText, material);
                -- Anchor the reward text differently if there are choosable rewards
                if ( numQuestChoices > 0  ) then
                        questItemReceiveText:SetText(TEXT(REWARD_ITEMS));
                        local index = numQuestChoices;
                        if ( mod(index, 2) == 0 ) then
                                index = index - 1;
                        end
                        questItemReceiveText:SetPoint("TOPLEFT", questItemName..index, "BOTTOMLEFT", 3, -5);
                else 
                        questItemReceiveText:SetText(TEXT(REWARD_ITEMS_ONLY));
                        questItemReceiveText:SetPoint("TOPLEFT", questState.."RewardTitleText", "BOTTOMLEFT", 3, -5);
                end
                questItemReceiveText:Show();
                QuestFrame_SetAsLastShown(questItemReceiveText, spacerFrame);
                -- Setup mandatory rewards
                for i=1, numQuestRewards, 1 do
                        questItem = getglobal(questItemName..(i + numQuestChoices));
                        questItem.type = "reward";
                        numItems = 1;
                        if ( isQuestLog == 1 ) then
                                name, texture, numItems, quality, isUsable = GetQuestLogRewardInfo(i);
                        else
                                name, texture, numItems, quality, isUsable = GetQuestItemInfo(questItem.type, i);
                        end
                        questItem:SetID(i)
                        questItem:Show();
                        -- For the tooltip
                        questItem.rewardType = "item";
                        QuestFrame_SetAsLastShown(questItem, spacerFrame);
                        getglobal(questItemName..(i + numQuestChoices).."Name"):SetText(name);
                        SetItemButtonCount(questItem, numItems);
                        SetItemButtonTexture(questItem, texture);
                        if ( isUsable ) then
                                SetItemButtonTextureVertexColor(questItem, 1.0, 1.0, 1.0);
                                SetItemButtonNameFrameVertexColor(questItem, 1.0, 1.0, 1.0);
                        else
                                SetItemButtonTextureVertexColor(questItem, 0.5, 0, 0);
                                SetItemButtonNameFrameVertexColor(questItem, 1.0, 0, 0);
                        end
                        
                        if ( i > 1 ) then
                                if ( mod(i,2) == 1 ) then
                                        questItem:SetPoint("TOPLEFT", questItemName..((i + numQuestChoices) - 2), "BOTTOMLEFT", 0, -2);
                                else
                                        questItem:SetPoint("TOPLEFT", questItemName..((i + numQuestChoices) - 1), "TOPRIGHT", 1, 0);
                                end
                        else
                                questItem:SetPoint("TOPLEFT", questState.."ItemReceiveText", "BOTTOMLEFT", -3, -5);
                        end
                        rewardsCount = rewardsCount + 1;
                end
                -- Setup spell reward
                if ( numQuestSpellRewards > 0 ) then
                        if ( isQuestLog == 1 ) then
                                texture, name = GetQuestLogRewardSpell();
                        else
                                texture, name = GetRewardSpell();
                        end
                        questItem = getglobal(questItemName..(rewardsCount + numQuestChoices + 1));
                        questItem:Show();
                        -- For the tooltip
                        questItem.rewardType = "spell";
                        SetItemButtonCount(questItem, 0);
                        SetItemButtonTexture(questItem, texture);
                        getglobal(questItemName..(rewardsCount + numQuestChoices + 1).."Name"):SetText(name);
                        if ( rewardsCount > 0 ) then
                                if ( mod(rewardsCount,2) == 0 ) then
                                        questItem:SetPoint("TOPLEFT", questItemName..((rewardsCount + numQuestChoices) - 1), "BOTTOMLEFT", 0, -2);
                                else
                                        questItem:SetPoint("TOPLEFT", questItemName..((rewardsCount + numQuestChoices)), "TOPRIGHT", 1, 0);
                                end
                        else
                                questItem:SetPoint("TOPLEFT", questState.."ItemReceiveText", "BOTTOMLEFT", -3, -5);
                        end
                end
        else    
                questItemReceiveText:Hide();
        end
        if ( questState == "QuestReward" ) then
                QuestFrameCompleteQuestButton:Enable();
                QuestFrameRewardPanel.itemChoice = 0;
                QuestRewardItemHighlight:Hide();
        end
end


function QuestLogFrame_LockCorner()
        local Left = EQL3_QuestLogFrame:GetLeft();
        local Top = EQL3_QuestLogFrame:GetTop();
        if (Left and Top) then
                EQL3_QuestLogFrame:ClearAllPoints();
                EQL3_QuestLogFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", Left , Top);
                QuestlogOptions[EQL3_Player].LogLockPoints = {};
                QuestlogOptions[EQL3_Player].LogLockPoints.pointone = Left;
                QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo = Top;
        elseif (QuestlogOptions[EQL3_Player].LogLockPoints and
                                        QuestlogOptions[EQL3_Player].LogLockPoints.pointone and
                                        QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo) then
                EQL3_QuestLogFrame:ClearAllPoints();
                EQL3_QuestLogFrame:SetPoint("TOPLEFT", "UIParent", "BOTTOMLEFT", QuestlogOptions[EQL3_Player].LogLockPoints.pointone,QuestlogOptions[EQL3_Player].LogLockPoints.pointtwo);
        end
end



function LookForCompletedQuests(ding)
        if ( not QuestlogOptions[EQL3_Player].CompletedQuests ) then
                QuestlogOptions[EQL3_Player].CompletedQuests = {};
        end

        local questID;
        local numEntries = GetNumQuestLogEntries();
        local questTitle, isComplete, isHeader;
        
        for i=1, numEntries, 1 do
                questID = i;
                questTitle, _, _, isHeader, _, isComplete = GetQuestLogTitle(questID);
                
                if(QuestlogOptions[EQL3_Player].CompletedQuests[questTitle]) then
                        QuestlogOptions[EQL3_Player].CompletedQuests[questTitle].isOk = true;
                else
                        QuestlogOptions[EQL3_Player].CompletedQuests[questTitle] = {};
                        QuestlogOptions[EQL3_Player].CompletedQuests[questTitle].isOk = true;
                end
                
                if ( (not isHeader) and isComplete and ( not QuestlogOptions[EQL3_Player].CompletedQuests[questTitle].isCompleted ) ) then
                        QuestlogOptions[EQL3_Player].CompletedQuests[questTitle].isCompleted = true;
                        if( (ding == nil) or (ding~=false)) then
                                UIErrorsFrame:AddMessage(questTitle.." Completed!", 1.0, 0.8, 0.0, 1.0, UIERRORS_HOLD_TIME);
                                PlaySound("GnomeExploration");
                        end
                end
        end
        
        --clean up
        for quest in QuestlogOptions[EQL3_Player].CompletedQuests do
                if ( QuestlogOptions[EQL3_Player].CompletedQuests[quest].isOk ) then
                        QuestlogOptions[EQL3_Player].CompletedQuests[quest].isOk = false;
                else
                        QuestlogOptions[EQL3_Player].CompletedQuests[quest] = nil;
                end
        end
end