vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:


function EQL_QuestTracker_OnLoad()
        this:RegisterEvent("QUEST_FINISHED");
        this:RegisterEvent("QUEST_COMPLETE");
  this:RegisterEvent("VARIABLES_LOADED");
  this:RegisterEvent("UI_INFO_MESSAGE"); 
  this:RegisterEvent("CHAT_MSG_SYSTEM");
  this:RegisterEvent("UNIT_QUEST_LOG_CHANGED");
end

function EQL3_QuestWatchFrame_OnUpdate(elapsed)
        EQL3_Temp.updateTime = EQL3_Temp.updateTime + elapsed;
        if(EQL3_Temp.updateTime >= EQL3_Temp.updateTarget) then
                EQL3_Temp.updateTime = 0;
                EQL3_Temp.updateTarget = 3;
                
                if(EQL3_Temp.manageHeaders) then
                        EQL3_Temp.manageHeaders = false;
                        ManageQuestHeaders();
                end
                
                MagageTrackedQuests();
                QuestWatch_Update();
        end
end

function EQL_QuestTracker_OnEvent(event)
        if (event == "CHAT_MSG_SYSTEM" and QuestlogOptions[EQL3_Player].AddNew == 1) then
                if string.find(arg1, EQL_QUEST_ACCEPTED.." .+") then
                        local temp = string.gsub(arg1, EQL_QUEST_ACCEPTED.." ", "");
                        -- Got name, add to tracker
                        EQL3_Temp.AddTrack = temp;
                        EQL3_Temp.updateTime = 0;
                        EQL3_Temp.updateTarget = 1;
                end
        end
        
        if(event == "UI_INFO_MESSAGE") then
                if(QuestlogOptions[EQL3_Player].AddUntracked == 1) then
                        if (string.find (arg1, ".+%s%d+/%d+")) then
                                local temp = string.gsub(arg1, " %d+/%d+", "");
                                FindAndAddQuestToTracker(temp);
                        elseif (string.find (arg1, ".+%s"..EQL_COMPLETE)) then
                                local temp = string.gsub(arg1, " "..EQL_COMPLETE, "");
                                FindAndAddQuestToTracker(temp);
                        end
                end
        end
        
        if (event == "VARIABLES_LOADED") then
                if(QuestlogOptions[EQL3_Player] and QuestlogOptions[EQL3_Player].Color["TrackerBG"]) then
                        QuestWatchFrameBackdrop:SetBackdropBorderColor( QuestlogOptions[EQL3_Player].Color["TrackerBG"].r,
                                                                                                                                                                                                                        QuestlogOptions[EQL3_Player].Color["TrackerBG"].g,
                                                                                                                                                                                                                        QuestlogOptions[EQL3_Player].Color["TrackerBG"].b );
                        QuestWatchFrameBackdrop:SetBackdropColor( QuestlogOptions[EQL3_Player].Color["TrackerBG"].r,
                                                                                                                                                                                                                        QuestlogOptions[EQL3_Player].Color["TrackerBG"].g,
                                                                                                                                                                                                                        QuestlogOptions[EQL3_Player].Color["TrackerBG"].b );
                                                                                                                                                                                                                        
                        QuestWatchFrameBackdrop:SetAlpha(QuestlogOptions[EQL3_Player].Color["TrackerBG"].a);
                end
                        
                if(QuestlogOptions[EQL3_Player].LockTracker == 1) then
                        EQL3_QuestWatchFrame:SetUserPlaced(0);
                        EQL3_QuestWatchFrame:RegisterForDrag(0);
                        EQL3_QuestWatchFrame:SetMovable(false);
                        EQL3_QuestWatchFrame:EnableMouse(false);
                else
                        EQL3_QuestWatchFrame:RegisterForDrag("LeftButton");
                end
                
                if (QuestlogOptions[EQL3_Player].LockPoints and
                                QuestlogOptions[EQL3_Player].LockPoints.corner and
                                QuestlogOptions[EQL3_Player].LockPoints.pointone and
                                QuestlogOptions[EQL3_Player].LockPoints.pointtwo) then
                        
                        EQL3_QuestWatchFrame:ClearAllPoints();
                        EQL3_QuestWatchFrame:SetPoint(QuestlogOptions[EQL3_Player].LockPoints.corner,"UIParent","BOTTOMLEFT",QuestlogOptions[EQL3_Player].LockPoints.pointone,QuestlogOptions[EQL3_Player].LockPoints.pointtwo);                
                end
                
                SetTrackerFontSize();
                
                EQL3_Temp.updateTime = 0;
                EQL3_Temp.updateTarget = 1;
                EQL3_Temp.manageHeaders = true;

        end
        if ( event == "QUEST_FINISHED" or event == "QUEST_COMPLETE" ) then
                MagageTrackedQuests();
        end
        
        if( event == "QUESTLOG_CHANGED" and not EQL3_Temp.firstManagement ) then
                MagageTrackedQuests();
                EQL3_Temp.firstManagement = true;
        end
end

                                

local old_QuestWatch_Update = QuestWatch_Update;
-- QuestWatch functions
function QuestWatch_Update()

        if(not EQL3_Temp.hasManaged) then
                QuestWatchFrame:Hide();
                return;
        end
        -- MagageTrackedQuests();
        
        if ( QuestlogOptions[EQL3_Player].TrackerIsMinimized == 1 ) then
                QuestWatch_SetMinimized();
                return;
        end

        local numObjectives;
        local questWatchMaxWidth = 0;
        local tempWidth;
        local watchText;
        local text, type, finished;
        local questTitle
        local watchTextIndex = 1;
        local questIndex;
        local objectivesCompleted;      
        local level;
        local tempColor, tempColor2, tempColor3;
        local tempArray = {}, tempI;
        local tempObj, tempDone, tempLevel, tempTag;
        
        local qwHeight=12;      
        local questLogTitleText, isComplete, isCompleted, isRemoved;
        local currentHeader = nil;
        local temp, isCollapsed, isOk;

        for i=1, table.getn(QuestlogOptions[EQL3_Player].QuestWatches), 1 do
                isRemoved = false;
                questIndex = EQL3_GetQuestIndexForWatch(i);
                if ( questIndex ) then
                        _, level, _, _, _, isCompleted = GetQuestLogTitle(questIndex);
                        numObjectives = GetNumQuestLeaderBoards(questIndex);
                        
                        -- Check Header
                        temp, isCollapsed = GetQuestHeaderForWatch(i);
                        if (currentHeader == nil or currentHeader ~= temp) then
                                currentHeader = temp;
                                if(QuestlogOptions[EQL3_Player].ShowZonesInTracker == 1) then
                                        watchText = getglobal("EQL3_QuestWatchLine"..watchTextIndex);
                                        if(watchText ~= nil) then
                                                watchText:SetText(currentHeader);
                                                tempWidth = watchText:GetWidth();
                                                -- Set the anchor of the title line a little lower
                                                if ( watchTextIndex > 1 ) then
                                                        watchText:SetPoint("TOPLEFT", "EQL3_QuestWatchLine"..(watchTextIndex - 1), "BOTTOMLEFT", 0, -4);
                                                        qwHeight = qwHeight+4;
                                                end
                                                if (QuestlogOptions[EQL3_Player].CustomZoneColor == 1) then
                                                        watchText:SetTextColor(QuestlogOptions[EQL3_Player].Color["Zone"].r, QuestlogOptions[EQL3_Player].Color["Zone"].g, QuestlogOptions[EQL3_Player].Color["Zone"].b);
                                                else
                                                        watchText:SetTextColor(1, 1, 1);
                                                end
                                                watchText:Show();
                                                if ( tempWidth > questWatchMaxWidth ) then
                                                        questWatchMaxWidth = tempWidth;
                                                end
                                        end
                                        watchTextIndex = watchTextIndex + 1;
                                end
                        end
                        
                        if(QuestlogOptions[EQL3_Player].RemoveFinished == 1 and isCompleted) then
                                isRemoved = true;
                        end
                        
                        if(isCollapsed == nil and questIndex > 0 and not isRemoved) then
                                -- Set title
                                questLogTitleText, tempLevel, tempTag, _, _, isComplete = GetQuestLogTitle(questIndex);
                                watchText = getglobal("EQL3_QuestWatchLine"..watchTextIndex);
                                if(watchText ~= nil and questLogTitleText ~= nil) then
                                        if(QuestlogOptions[EQL3_Player].ShowQuestLevels == 1) then
                                                if (tempTag ~= NIL) then
                                                        tempLevel = tempLevel.."+";
                                                end
                                                watchText:SetText("  ".."["..tempLevel.."] "..questLogTitleText);
                                        else
                                                watchText:SetText("  "..questLogTitleText);
                                        end
                                        tempWidth = watchText:GetWidth();
                                        -- Set the anchor of the title line a little lower
                                        if ( watchTextIndex > 1 ) then
                                                watchText:SetPoint("TOPLEFT", "EQL3_QuestWatchLine"..(watchTextIndex - 1), "BOTTOMLEFT", 0, -4);
                                                qwHeight = qwHeight+4;
                                        end
                                        watchText:Show();
                                        if ( tempWidth > questWatchMaxWidth ) then
                                                questWatchMaxWidth = tempWidth;
                                        end
                                end
                                watchTextIndex = watchTextIndex + 1;
                                
                                if(QuestlogOptions[EQL3_Player].MinimizeFinished == 1 and isCompleted) then
                                        numObjectives = 0;
                                end
                                
                                
                                local markerID = 0;
                                
                                if ( numObjectives > 0 ) then
                                        objectivesCompleted = 0;
                                        tempObj = 0;
                                        tempDone = 0;
                                        for j=1, numObjectives do
                                                text, type, finished = GetQuestLogLeaderBoard(j, questIndex);
                                                
                                                if ( finished and QuestlogOptions[EQL3_Player].RemoveCompletedObjectives == 1 ) then
                                                        -- Do nothing
                                                else
                                                
                                                        watchText = getglobal("EQL3_QuestWatchLine"..watchTextIndex);
                                                        if(watchText ~= nil) then
                                                                -- Set Objective text
                                                                if ( QuestlogOptions[EQL3_Player].ShowObjectiveMarkers == 1 ) then
                                                                        if (QuestlogOptions[EQL3_Player].UseTrackerListing == 1) then -- Tracker Listing
                                                                                watchText:SetText("    "..EQL3_TrackerLists[QuestlogOptions[EQL3_Player].TrackerList][markerID]..") "..text);
                                                                        else
                                                                                watchText:SetText("    "..EQL3_TrackerSymbols[QuestlogOptions[EQL3_Player].TrackerSymbol].." "..text);
                                                                        end
                                                                else
                                                                        watchText:SetText("    "..text);
                                                                end
                                                                
                                                                
                                                                -- Color the objectives
                                                                if (QuestlogOptions[EQL3_Player].CustomObjetiveColor == 1) then
                                                                        tempColor = { r=QuestlogOptions[EQL3_Player].Color["ObjectiveEmpty"].r,
                                                                                                                                g=QuestlogOptions[EQL3_Player].Color["ObjectiveEmpty"].g,
                                                                                                                                b=QuestlogOptions[EQL3_Player].Color["ObjectiveEmpty"].b };
                                                                                                                                
                                                                        tempColor2 = { r=QuestlogOptions[EQL3_Player].Color["ObjectiveComplete"].r,
                                                                                                                                 g=QuestlogOptions[EQL3_Player].Color["ObjectiveComplete"].g,
                                                                                                                                 b=QuestlogOptions[EQL3_Player].Color["ObjectiveComplete"].b };
                                                                else
                                                                        tempColor = {r=0.8, g=0.8, b=0.8};
                                                                        tempColor2 = {r=HIGHLIGHT_FONT_COLOR.r, g=HIGHLIGHT_FONT_COLOR.g, b=HIGHLIGHT_FONT_COLOR.b};
                                                                end
                                                                
                                                                
                                                                if ( finished ) then
                                                                        watchText:SetTextColor(tempColor2.r, tempColor2.g, tempColor2.b);
                                                                        objectivesCompleted = objectivesCompleted + 1;
                                                                else
                                                                        tempI = 0;
                                                                        tempArray = {};
                                                                        for v in string.gfind(text, "%d+") do
                                                                                tempI = tempI+1;
                                                                                table.insert (tempArray, v);
                                                                        end
                                                                        if (tempI == 0) then
                                                                                tempI = 2;
                                                                                tempArray[1] = "0";
                                                                                tempArray[2] = "1";
                                                                         elseif (tempI == 1) then
                                                                                tempI = 2;
                                                                                tempArray[2] = 99999;
                                                                        end
                                                                        tempObj  = tempObj + tempArray[tempI];
                                                                        tempDone = tempDone + tempArray[tempI-1];
                                                                        
                                                                        if (QuestlogOptions[EQL3_Player].FadeObjectiveColor == 1) then
                                                                                tempColor3 = EQL3_FadeColors(tempColor, tempColor2, tempArray[tempI-1], tempArray[tempI]);
                                                                        else
                                                                                tempColor3 = tempColor;
                                                                        end
                                                                        watchText:SetTextColor(tempColor3.r, tempColor3.g, tempColor3.b);
                                                                end
                                                                
                                                                
                                                                tempWidth = watchText:GetWidth();
                                                                if ( tempWidth > questWatchMaxWidth ) then
                                                                        questWatchMaxWidth = tempWidth;
                                                                end
                                                                watchText:SetPoint("TOPLEFT", "EQL3_QuestWatchLine"..(watchTextIndex - 1), "BOTTOMLEFT", 0, 0);
                                                                watchText:Show();
                                                        end
                                                        watchTextIndex = watchTextIndex + 1;
                                                                
                                                        markerID = markerID+1;
                                                end --if not complete... bla bla bla
                                        end -- For
                                else
                                        tempObj = 1;
                                        tempDone = 0;
                                        numObjectives = 0;
                                        objectivesCompleted = -1;
                                end
                                
                                -- Brighten the quest title if all the quest objectives were met
                                watchText = getglobal("EQL3_QuestWatchLine"..watchTextIndex-markerID-1);
                                
                                if (QuestlogOptions[EQL3_Player].CustomHeaderColor == 1) then
                                        if (QuestlogOptions[EQL3_Player].FadeHeaderColor == 1) then
                                                if ( isComplete or objectivesCompleted == numObjectives ) then
                                                                tempColor = {   r=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].r,
                                                                                                                        g=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].g,
                                                                                                                        b=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].b };
                                                else
                                                                tempColor3 = {r=QuestlogOptions[EQL3_Player].Color["HeaderEmpty"].r,
                                                                                                                        g=QuestlogOptions[EQL3_Player].Color["HeaderEmpty"].g,
                                                                                                                        b=QuestlogOptions[EQL3_Player].Color["HeaderEmpty"].b };
                                                                                                                        
                                                                tempColor2 = {r=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].r,
                                                                                                                        g=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].g,
                                                                                                                        b=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].b };
                                                                tempColor = EQL3_FadeColors(tempColor3, tempColor2, tempDone, tempObj);
                                                end
                                        else
                                                if ( isComplete or objectivesCompleted == numObjectives ) then
                                                                tempColor = {   r=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].r,
                                                                                                                        g=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].g,
                                                                                                                        b=QuestlogOptions[EQL3_Player].Color["HeaderComplete"].b };
                                                else
                                                                tempColor = {   r=QuestlogOptions[EQL3_Player].Color["HeaderEmpty"].r,
                                                                                                                        g=QuestlogOptions[EQL3_Player].Color["HeaderEmpty"].g,
                                                                                                                        b=QuestlogOptions[EQL3_Player].Color["HeaderEmpty"].b };
                                                end
                                        end
                                        watchText:SetTextColor(tempColor.r, tempColor.g, tempColor.b);
                                else
                                        if ( isComplete or  objectivesCompleted == numObjectives ) then
                                                        watchText:SetTextColor(NORMAL_FONT_COLOR.r, NORMAL_FONT_COLOR.g, NORMAL_FONT_COLOR.b);
                                        else
                                                        watchText:SetTextColor(0.75, 0.61, 0);
                                        end
                                end
                                
                                
                        
                        end
                        
                end
        end

        -- Set tracking indicator
        if ( GetNumQuestWatches() > 0 ) then
                EQL3_QuestLogTrackTracking:SetVertexColor(0, 1.0, 0);
        else
                EQL3_QuestLogTrackTracking:SetVertexColor(1.0, 0, 0);
        end
        
        -- If no watch lines used then hide the frame and return
        if ( watchTextIndex == 1 ) then
                EQL3_QuestWatchFrame:Hide();
                return;
        else
                EQL3_QuestWatchFrame:Show();
                EQL3_QuestWatchFrame:SetHeight(watchTextIndex * (QuestlogOptions[EQL3_Player].TrackerFontHeight+1) + qwHeight);
                EQL3_QuestWatchFrame:SetWidth(questWatchMaxWidth+12);
        end

        -- Hide unused watch lines
        if(watchTextIndex < MAX_QUESTWATCH_LINES) then
                for i=watchTextIndex, MAX_QUESTWATCH_LINES do
                        getglobal("EQL3_QuestWatchLine"..i):Hide();
                end
        end

        QuestWatchFrameBackdrop:SetPoint("TOPLEFT", "EQL3_QuestWatchFrame", "TOPLEFT", -8, -4);

        -- UIParent_ManageFramePositions();
        if (not EQL3_Temp.movingWatchFrame) then
                if (QuestlogOptions[EQL3_Player].LockPoints and
                        QuestlogOptions[EQL3_Player].LockPoints.corner and
                        QuestlogOptions[EQL3_Player].LockPoints.pointone and
                        QuestlogOptions[EQL3_Player].LockPoints.pointtwo) then
                        EQL3_QuestWatchFrame:ClearAllPoints();
                        EQL3_QuestWatchFrame:SetPoint(QuestlogOptions[EQL3_Player].LockPoints.corner,"UIParent","BOTTOMLEFT",QuestlogOptions[EQL3_Player].LockPoints.pointone,QuestlogOptions[EQL3_Player].LockPoints.pointtwo);
                end
        end
        
end

-- EQL3_QuestWatchFrame = QuestWatchFrame;


-- Functions
function EQL3_FadeColors(tempColor, tempColor2, done, obj)
        local color = {r=0, g=0, b=0};
        local multiplier;
        
        multiplier = (done / obj);
        color.r = tempColor.r + ((tempColor2.r - tempColor.r)*multiplier);
        color.g = tempColor.g + ((tempColor2.g - tempColor.g)*multiplier);
        color.b = tempColor.b + ((tempColor2.b - tempColor.b)*multiplier);
        
        return color;
end


-- Old QuestRacking
local Original_RemoveQuestWatch = RemoveQuestWatch;
local Original_IsQuestWatched = IsQuestWatched;
local Original_GetNumQuestWatches = GetNumQuestWatches;
local Original_AddQuestWatch = AddQuestWatch;
local Original_GetQuestIndexForWatch = GetQuestIndexForWatch;


function SortWatchedQuests()
        if (QuestlogOptions[EQL3_Player].ShowZonesInTracker == 1) then
                table.sort(QuestlogOptions[EQL3_Player].QuestWatches);
        else
                if(QuestlogOptions[EQL3_Player].SortTrackerItems == 1) then
                        -- Make theese sort on title rather than zone+level+title               
                        table.sort(QuestlogOptions[EQL3_Player].QuestWatches, SortCompare);
                        
                end
        end
end

function SortCompare(first, second)
        local temp = string.gsub(first, ".+,%d+,[%[%d+%+*%]]*", "");
        
        local temp2 = string.gsub(second, ".+,%d+,[%[%d+%+*%]]*", "");
        
        if(temp < temp2) then
                return true;
        end
        return false;
end


-- QuestlogOptions.QuestWatches
function EQL3_AddQuestWatch(questIndex)
        local questName, level = GetQuestLogTitle(questIndex);
        
        local questLogHeader, tempId;
        
        isHeader = false;
        tempId = questIndex;
        while (not isHeader) do
                questLogHeader, _, _, isHeader = GetQuestLogTitle(tempId);
                tempId = tempId-1;      
        end     

        table.insert(QuestlogOptions[EQL3_Player].QuestWatches, questLogHeader..","..level..","..questName);

        SortWatchedQuests();

        MagageTrackedQuests();
end

function EQL3_RemoveQuestWatch(questIndex)
        local questName, level = GetQuestLogTitle(questIndex);
        
        local questLogHeader, isHeader, tempId;
        
        isHeader = false;
        tempId = questIndex;
        while (not isHeader) do
                questLogHeader, _, _, isHeader = GetQuestLogTitle(tempId);
                tempId = tempId-1;      
        end
        
        local temp = questLogHeader..","..level..","..questName;
        
        if(table.getn(QuestlogOptions[EQL3_Player].QuestWatches) > 0) then
                for i=1, table.getn(QuestlogOptions[EQL3_Player].QuestWatches) do
                        if (QuestlogOptions[EQL3_Player].QuestWatches[i] == temp) then
                                table.remove(QuestlogOptions[EQL3_Player].QuestWatches , i);
                                break;
                        end
                end
        end
        
        SortWatchedQuests();

        MagageTrackedQuests();
end

function EQL3_IsQuestWatched(questIndex)
        local questName, level = GetQuestLogTitle(questIndex);
        local questLogHeader, isHeader, tempId;
        
        isHeader = false;
        tempId = questIndex;
        while (not isHeader and tempId > 0) do
                questLogHeader, _, _, isHeader = GetQuestLogTitle(tempId);
                tempId = tempId-1;
                -- if(tempId <= 0) then
                --      questLogHeader, _, _, isHeader = GetQuestLogTitle(1);
                --      break;
                -- end  
        end
        
        local temp = questLogHeader..","..level..","..questName;
        if(table.getn(QuestlogOptions[EQL3_Player].QuestWatches) > 0) then
                for i=1, table.getn(QuestlogOptions[EQL3_Player].QuestWatches) do
                        if (QuestlogOptions[EQL3_Player].QuestWatches[i] == temp) then
                                return true;
                        end
                end
        end
        return false;
end

function GetNumQuestWatches()
        return table.getn(QuestlogOptions[EQL3_Player].QuestWatches);
end

function EQL3_GetQuestIndexForWatch(id)
        local numEntries = GetNumQuestLogEntries();
        local questLogTitleText, level;
        local questLogHeader, isHeader, tempId;
        local questFound = false;
        local temp, currentHeader=nil;
        
        
        for i=1, numEntries, 1 do
                questLogTitleText, level, _, isHeader, _ = GetQuestLogTitle(i);
                if (isHeader) then
                        currentHeader = questLogTitleText;
                else
                        temp = currentHeader..","..level..","..questLogTitleText;
                        if ( temp == QuestlogOptions[EQL3_Player].QuestWatches[id] ) then
                                return i;
                        end
                end
        end
        return 0;
end

function GetQuestHeaderForWatch(questIndex)
        if(QuestlogOptions[EQL3_Player].QuestWatches[questIndex]) then
                local numEntries = GetNumQuestLogEntries();
                local questLogHeader, isCollapsed;
                local s = QuestlogOptions[EQL3_Player].QuestWatches[questIndex];
                local temp=nil;
                for w in string.gfind(s, "[^,]+") do
                        if(temp == nil) then
                                temp = w;
                                break;
                        end
                end
                for i=1, numEntries, 1 do
                        questLogHeader, _, _, _, isCollapsed = GetQuestLogTitle(i);
                        if(questLogHeader == temp) then
                                return questLogHeader, isCollapsed;
                        end
                end
                return temp, true;
        end
        return "", false;
end




function MagageTrackedQuests()
        EQL3_Temp.QuestList = {};
        QuestlogOptions[EQL3_Player].HeaderList = {};
        
        local tempHeaderList = {};
        local numEntries = GetNumQuestLogEntries();
        local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete;
        local currentHeader = nil;
        local temp;
        
        -- Make Header List
        for j=numEntries, 1, -1 do
                questLogTitleText, _, _, isHeader, isCollapsed = GetQuestLogTitle(j);
                if (isHeader and isCollapsed) then
                        tempHeaderList[j] = 1;
                        table.insert(QuestlogOptions[EQL3_Player].HeaderList, questLogTitleText);
                        ExpandQuestHeader(j);
                else
                        tempHeaderList[j] = 0;
                end
        end
        
        -- Make quest list
        local numEntries2 = GetNumQuestLogEntries();
        for j=1, numEntries2, 1 do
                questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(j);

                if (isHeader) then
                        currentHeader = questLogTitleText;
                else
                        temp = currentHeader..","..level..","..questLogTitleText;
                        table.insert(EQL3_Temp.QuestList, temp);
                        
                        
                        if (EQL3_Temp.AddTrack and EQL3_Temp.AddTrack == questLogTitleText) then
                                table.insert(QuestlogOptions[EQL3_Player].QuestWatches, temp);
                                EQL3_Temp.AddTrack = nil;
                        end
                        
                        -- If complete, remove it from the tracker...
                        if (QuestlogOptions[EQL3_Player].RemoveFinished == 1 and isComplete) then
                                for x=1, table.getn(QuestlogOptions[EQL3_Player].QuestWatches) do
                                        if (QuestlogOptions[EQL3_Player].QuestWatches[x] == temp) then
                                                table.remove(QuestlogOptions[EQL3_Player].QuestWatches , x);
                                                break;
                                        end
                                end
                        end
                end
        end
        
        -- Clear Header List
        for j=1, numEntries, 1 do
                if(tempHeaderList[j] == 1) then
                        CollapseQuestHeader(j);
                end
        end
        
        -- Compare all tracked items to list
        local numWatches = table.getn(QuestlogOptions[EQL3_Player].QuestWatches);
        local numEntries = table.getn(EQL3_Temp.QuestList);
        local found = false;
        for i=numWatches, 1, -1 do
                found = false;
                for j=0, numEntries, 1 do
                        if (QuestlogOptions[EQL3_Player].QuestWatches[i] == EQL3_Temp.QuestList[j]) then
                                found = true;
                                break;
                        end
                end
                if(not found) then
                        table.remove(QuestlogOptions[EQL3_Player].QuestWatches, i);
                end
        end
        
        SortWatchedQuests();            
end



function EQL3_ClearTracker()
        QuestlogOptions[EQL3_Player].QuestWatches = {};
end





function QuestWatchFrame_LockCornerForGrowth()
        local Left = EQL3_QuestWatchFrame:GetLeft();
        local Right = EQL3_QuestWatchFrame:GetRight();
        local Top = EQL3_QuestWatchFrame:GetTop();
        local Bottom = EQL3_QuestWatchFrame:GetBottom();
        local lock;
        local pointone;
        local pointtwo;
        local TOPBOTTOM_MEDIAN = 384;
        local LEFTRIGHT_MEDIAN = 512;
        if (Left and Right and Top and Bottom) then
                if (Bottom < TOPBOTTOM_MEDIAN and Top > TOPBOTTOM_MEDIAN) then
                        local topcross = Top - TOPBOTTOM_MEDIAN;
                        local bottomcross = TOPBOTTOM_MEDIAN - Bottom;
                        if (bottomcross > topcross) then
                                lock = "BOTTOM";
                                pointtwo = Bottom;
                        else
                                lock = "TOP";
                                pointtwo = Top;
                        end
                elseif (Top > TOPBOTTOM_MEDIAN) then
                        lock = "TOP";
                        pointtwo = Top;
                elseif (Bottom < TOPBOTTOM_MEDIAN) then
                        lock = "BOTTOM";
                        pointtwo = Bottom;
                end
                if (Left < LEFTRIGHT_MEDIAN and Right > LEFTRIGHT_MEDIAN) then
                        local leftcross = LEFTRIGHT_MEDIAN - Left;
                        local rightcross = Right - LEFTRIGHT_MEDIAN;
                        if (rightcross > leftcross) then
                                lock = lock.."RIGHT";
                                pointone = Right;
                        else
                                lock = lock.."LEFT";
                                pointone = Left;
                        end
                elseif (Left < LEFTRIGHT_MEDIAN) then
                        lock = lock.."LEFT";
                        pointone = Left;
                elseif (Right > LEFTRIGHT_MEDIAN) then
                        lock = lock.."RIGHT";
                        pointone = Right;
                end
                if (lock and lock ~= "" and pointone and pointtwo) then
                        EQL3_QuestWatchFrame:ClearAllPoints();
                        EQL3_QuestWatchFrame:SetPoint(lock,"UIParent","BOTTOMLEFT",pointone,pointtwo);
                        QuestlogOptions[EQL3_Player].LockPoints = {};
                        QuestlogOptions[EQL3_Player].LockPoints.corner = lock;
                        QuestlogOptions[EQL3_Player].LockPoints.pointone = pointone;
                        QuestlogOptions[EQL3_Player].LockPoints.pointtwo = pointtwo;
                elseif (QuestlogOptions[EQL3_Player].LockPoints and
                        QuestlogOptions[EQL3_Player].LockPoints.corner and
                        QuestlogOptions[EQL3_Player].LockPoints.pointone and
                        QuestlogOptions[EQL3_Player].LockPoints.pointtwo) then
                        EQL3_QuestWatchFrame:ClearAllPoints();
                        EQL3_QuestWatchFrame:SetPoint(QuestlogOptions[EQL3_Player].LockPoints.corner,"UIParent","BOTTOMLEFT",QuestlogOptions[EQL3_Player].LockPoints.pointone,QuestlogOptions[EQL3_Player].LockPoints.pointtwo);
                end
        end
end


function FindAndAddQuestToTracker(theObjective)
        local oldSelection = GetQuestLogSelection();
        local questID;
        local numEntries = GetNumQuestLogEntries();
        local questTitle;
        local numObjectives;

        -- local tempHeaderList = {};
        local numEntries2 = GetNumQuestLogEntries();
        local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete;
        local text, typ, finished;
        
        --[[ Make Header List
        for j=numEntries2, 1, -1 do
                _, _, _, isHeader, isCollapsed = GetQuestLogTitle(j);
                if (isHeader and isCollapsed) then
                        tempHeaderList[j] = 1;
                        ExpandQuestHeader(j);
                else
                        tempHeaderList[j] = 0;
                end
        end ]]--
        
        -- Find that quest!
        local found = false;
        for i=1, numEntries, 1 do
                questID = i;
                questTitle, _, _, isHeader = GetQuestLogTitle(questID);
                if (not isHeader) then
                        SelectQuestLogEntry(questID);
                        if(questTitle and not IsQuestWatched(questID)) then                             
                                numObjectives = GetNumQuestLeaderBoards();
                                if(numObjectives > 0) then      
                                        for j=1, numObjectives, 1 do
                                                text, typ, finished = GetQuestLogLeaderBoard(j);
                                                if(not text or strlen(text) == 0) then
                                                        text = typ;
                                                end
                                                text = string.gsub(text, " %d+/%d+", "");
                                                text = string.gsub(text, " "..EQL_COMPLETE, "");
                                                if(theObjective == text) then
                                                        EQL3_Temp.AddTrack = questTitle;
                                                        found = true;
                                                end
                                                if(found) then
                                                        break;
                                                end
                                        end
                                end
                        end
                end
                if(found) then
                        break;
                end
        end
        
        --[[ Clear Header List
        for j=1, numEntries2, 1 do
                if(tempHeaderList[j] == 1) then
                        CollapseQuestHeader(j);
                end
        end ]]--
        
        SelectQuestLogEntry(oldSelection);
        
        MagageTrackedQuests();
end


function QuestWatch_SetMinimized()
        if ( GetNumQuestWatches() == 0 ) then
                EQL3_QuestWatchFrame:Hide();
                return;
        end
        
        for i=2, MAX_QUESTWATCH_LINES, 1 do
                getglobal("EQL3_QuestWatchLine"..i):Hide();
        end
        
        EQL3_QuestWatchLine1:SetText(EQL3_QUEST_TRACKER.."   ("..GetNumQuestWatches()..")");
        EQL3_QuestWatchLine1:SetTextColor(1.0, 0.82, 0.0);
        
        
        EQL3_QuestWatchFrame:Show();
        EQL3_QuestWatchFrame:SetHeight(QuestlogOptions[EQL3_Player].TrackerFontHeight+1 + 22);
        EQL3_QuestWatchFrame:SetWidth(EQL3_QuestWatchLine1:GetWidth()+36);

        QuestWatchFrameBackdrop:SetPoint("TOPLEFT", "EQL3_QuestWatchFrame", "TOPLEFT", -8, -4);

        -- UIParent_ManageFramePositions();
        if (QuestlogOptions[EQL3_Player].LockPoints and
                QuestlogOptions[EQL3_Player].LockPoints.corner and
                QuestlogOptions[EQL3_Player].LockPoints.pointone and
                QuestlogOptions[EQL3_Player].LockPoints.pointtwo) then
                EQL3_QuestWatchFrame:ClearAllPoints();
                EQL3_QuestWatchFrame:SetPoint(QuestlogOptions[EQL3_Player].LockPoints.corner,"UIParent","BOTTOMLEFT",QuestlogOptions[EQL3_Player].LockPoints.pointone,QuestlogOptions[EQL3_Player].LockPoints.pointtwo);
        end
end