vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[

        SuperInspect_UI: ---------
                copyright 2005-2006 by Chester

]]

--what is with the inconsistant naming, bliz?
SI_BG = {
        [1] = "Dwarf",
        [2] = "Human",
        [3] = "NightElf",
        [4] = "Orc",
        [5] = "Scourge",
        [6] = "Tauren",
        };

SI_BG_Other = {
        [1] = "DruidBalance",
        [2] = "DruidFeralCombat",
        [3] = "DruidRestoration",
        [4] = "HunterBeastMastery",
        [5] = "HunterMarksmanship",
        [6] = "HunterSurvival",
        [7] = "MageArcane",
        [8] = "MageFire",
        [9] = "MageFrost",
        [10] = "PaladinCombat",
        [11] = "PaladinHoly",
        [12] = "PaladinProtection",
        [13] = "PriestDiscipline",
        [14] = "PriestHoly",
        [15] = "PriestShadow",
        [16] = "RogueAssassination",
        [17] = "RogueCombat",
        [18] = "RogueSubtlety",
        [19] = "ShamanElementalCombat",
        [20] = "ShamanEnhancement",
        [21] = "ShamanRestoration",
        [22] = "WarlockCurses",
        [23] = "WarlockDestruction",
        [24] = "WarlockSummoning",
};

function SuperInspect_OnLoad()
        this:RegisterEvent("UNIT_MODEL_CHANGED");
        this:RegisterEvent("PLAYER_TARGET_CHANGED");
        this:RegisterEvent("UNIT_PORTRAIT_UPDATE");
        this:RegisterEvent("UNIT_INVENTORY_CHANGED");
        
        SLASH_SUPERINSPECT1 = "/superinspect";
        SlashCmdList["SUPERINSPECT"] = function(msg)
                SuperInspect_SlashCommand(msg);
        end
        
end


function SuperInspect_OnEvent()
        if( event == "UNIT_MODEL_CHANGED" or event == "UNIT_PORTRAIT_UPDATE") then
                SI_AddMessage("|cffffd200UNIT_PORTRAIT_UPDATE");
                if (arg1 == "target" and SuperInspectFrame:IsVisible()) then
                        --SuperInspect_ModelFrame:SetUnit("target");
                        SuperInspect_ModelFrame:RefreshUnit();
                        SetPortraitTexture(SuperInspectFramePortrait, "target");
                end
        end
        if( event == "PLAYER_TARGET_CHANGED") then
                --SI_AddMessage("|cffffd200PLAYER_TARGET_CHANGED");
                if (SuperInspectFrame:IsVisible() or SI_Save.targ) then
                        SuperInspect_UpdateModel("target");
                        SI_AddMessage("--UPDATING");
                end
        end
        if ( event == "UNIT_INVENTORY_CHANGED" ) then
                if ( arg1 == "target" ) then
                        SI_AddMessage( "changed" )
                        SuperInspect.bonus = nil;
                        SuperInspect_InspectPaperDollFrame_OnShow();
                end
                return;
        end
end

function SuperInspect_Main_OnShow()
        if (not SuperInspectFrame.uiScale) then
                SuperInspectFrame.uiScale = SuperInspect_GetUIScale();  
        end
        if (not SI_Save.scale) then
                SI_Save.scale = 0.75;   
        end
        if (not SI_Save.default) then
                SuperInspectFrame:SetScale(3);
                SuperInspect_SetEffectiveScale(this, SI_Save.scale, "UIParent");
                --SuperInspect_ModelFrame:SetScale(SuperInspectFrame:GetEffectiveScale());      
        end
        if (SI_Save.snd) then
                PlaySound("igCharacterInfoOpen");
        end
        --SuperInspect_ModelFrame:RefreshUnit();
end

function SuperInspect_InspectFrame_Show(unit)
        if (not unit) then
                unit = "target";        
        end
        SuperInspect.player = UnitIsPlayer(unit);
        --SuperInspect.friend = UnitIsFriend(unit, "player");
        SuperInspect_InvFrame:Hide();
        if ( UnitExists(unit) and SuperInspect.player) then
                NotifyInspect(unit);
                SuperInspect_InvFrame.unit = unit;
                SuperInspect_Button_ShowItems:Enable();
                SuperInspect_Button_ShowItems:Show();
                SuperInspect_Button_ShowItems.isDisabled = nil;
                SuperInspect_Button_ShowHonor:Enable();
                SuperInspect_Button_ShowHonor:Show();
                SuperInspect_Button_ShowHonor.isVisible = 1;
                SuperInspect_Button_ShowHonor.isDisabled = nil;
                SuperInspect_Button_ShowBonuses:Show();
                SuperInspect_Button_ShowMobInfo:Hide();
                if (not SI_Save.items or SI_Save.items == 0) then
                        SuperInspect_InvFrame:Hide();
                        --SI_AddMessage("HIDING INV: show items = nil");
                else
                        SuperInspect_InvFrame:Show();   
                        --SI_AddMessage("SHOW INV: show items = 1");
                end
                --SuperInspect_ShowItems_CheckChecked( SuperInspect_Button_ShowItems );
                if (not SuperInspect_HonorFrame.isShowing) then
                        SuperInspect_HonorFrame:Hide();
                else
                        SuperInspect_HonorFrame:Show();
                end
                if (CheckInteractDistance("target", 1) and SuperInspect_HonorFrame.isShowing) then
                        SuperInspect_HonorFrame:Hide();
                        SuperInspect_HonorFrame:Show();
                else
                        SuperInspect_HonorFrame:Hide();
                end
        else
                SuperInspect_Button_ShowMobInfo:Hide();
                if (not SuperInspect.player) then
                        SI_MI2_BuildMobInfoTooltip( UnitName("target"), UnitLevel("target") );  
                end
                SuperInspect_HonorFrame:Hide();
                SuperInspect.honor = nil;
                SuperInspect.bonus = nil;
                SuperInspect_InvFrame:Hide();
                --SI_AddMessage("HIDING INV: no target");
                SuperInspect_ItemBonusesFrame:Hide();
                SuperInspect_Button_ShowItems:Disable();
                SuperInspect_Button_ShowItems.isDisabled = 1;
                SuperInspect_Button_ShowItems:Hide();
                SuperInspect_Button_ShowItems.isVisible = nil;
                SuperInspect_Button_ShowHonor:Disable();
                SuperInspect_Button_ShowHonor.isDisabled = 1;
                SuperInspect_Button_ShowHonor:Hide();
                SuperInspect_Button_ShowHonor.isVisible = nil;
                SuperInspect_Button_ShowBonuses:Hide();
        end

        SuperInspect_SetDefaultStyleScale();
end

--if the player has a target and the inspect frame is visible, check the player's distance to their target
--and disable the honor button if they are too far away
function SuperInspect_Main_OnUpdate()
        if ( SuperInspect.isVisible and SuperInspect_Button_ShowHonor.isVisible ) then
                if ( not CheckInteractDistance("target", 1) and not SuperInspect_HonorFrame.isShowing ) then--and not SuperInspect_HonorFrame.isShowing
                        if (SuperInspect.honor) then
                                return; 
                        end
                        SuperInspect_Button_ShowHonor:Disable();
                        SuperInspect_Button_ShowHonor.isDisabled = 1;
                        --/script SI_AddMessage(CheckInteractDistance("target", 1));
                        
                else
                        SuperInspect_Button_ShowHonor:Enable();
                        SuperInspect_Button_ShowHonor.isDisabled = nil;
                end
        end
end

function SuperInspect_InspectPaperDollItemSlotButton_OnLoad()
        local slotName = string.gsub(this:GetName(), "SuperInspect_", "");
        local id;
        local textureName;
        id, textureName = GetInventorySlotInfo(strsub(slotName,8));
        this:SetID(id);
        local texture = getglobal(this:GetName().."IconTexture");
        texture:SetTexture(textureName);
        this.backgroundTextureName = textureName;
        this:RegisterForDrag("LeftButton");
        this:RegisterForClicks("LeftButtonUp", "RightButtonUp");
        --SI_AddMessage(id.."   "..slotName.."  "..textureName);
end


function SuperInspect_InspectPaperDollItemSlotButton_OnClick(button, ignoreModifiers)
        local itemLink = this.link;
        --DEFAULT_CHAT_FRAME:AddMessage(GetInventoryItemLink("target", this:GetID()));
        --DEFAULT_CHAT_FRAME:AddMessage(this.link);
        if (not itemLink and UnitExists("target")) then
                itemLink = GetInventoryItemLink("target", this:GetID());
        end
        if (not itemLink) then
                return; 
        end
        if ( button == "LeftButton" ) then
                if ( IsControlKeyDown() and not ignoreModifiers ) then
                        DressUpItemLink(itemLink);
                elseif ( IsShiftKeyDown() and not ignoreModifiers ) then
                        if ( ChatFrameEditBox:IsVisible() ) then
                                local link = "|c"..this.c.."|H"..itemLink.."|h["..GetItemInfo(itemLink).."]|h|r";
                                ChatFrameEditBox:Insert(link);
                        end
                elseif (UnitPVPName("player") == SuperInspectFrameHeader_Name:GetText()) then
                        PickupInventoryItem(this:GetID());
                end
        elseif ( button == "RightButton" and UnitPVPName("player") == SuperInspectFrameHeader_Name:GetText()) then
                UseInventoryItem(this:GetID());
        end
end

function SuperInspect_InspectPaperDollFrame_OnShow()
        if (UnitExists("target")) then
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectHeadSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectNeckSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectShoulderSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectBackSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectChestSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectShirtSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectTabardSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectWristSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectHandsSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectWaistSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectLegsSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectFeetSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectFinger0Slot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectFinger1Slot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectTrinket0Slot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectTrinket1Slot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectMainHandSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectSecondaryHandSlot);
                SuperInspect_InspectPaperDollItemSlotButton_Update(SuperInspect_InspectRangedSlot);
        end

        SuperInspect_Button_ShowItems:SetText(SI_ITEMSHIDE);
        SuperInspect_Button_ShowBonuses:Enable();
        SI_Save.items = 1;
        SuperInspectItemBonusesButton_BuildTooltip();
end

function SuperInspect_InspectPaperDollItemSlotButton_Update(button)
        local unit = SuperInspect_InvFrame.unit;
        if (not button or not unit) then
                return; 
        end
        local textureName = GetInventoryItemTexture(unit, button:GetID());
        if ( textureName ) then
                SetItemButtonTexture(button, textureName);
                SetItemButtonCount(button, GetInventoryItemCount(unit, button:GetID()));
                button.hasItem = 1;
        else
                SetItemButtonTexture(button, button.backgroundTextureName);
                SetItemButtonCount(button, 0);
                button.hasItem = nil;
        end
        --SI_AddMessage(id.."   "..slotName.."  "..textureName);
        if ( GameTooltip:IsOwned(button) ) then
                --SI_AddMessage("GTT IS OWNED");
                if ( texture ) then
                        --SI_AddMessage(texture);
                        if ( not GameTooltip:SetInventoryItem(SuperInspect_InvFrame.unit, button:GetID()) ) then
                                GameTooltip:SetText(TEXT(getglobal(strupper(strsub(button:GetName(), 8)))));
                        end
                else
                        GameTooltip:Hide();
                end
        end
        if (UnitExists("target")) then
                local line = getglobal("SuperInspect_TTTextLeft1");
                local r, g, b;
                local bgBorder = getglobal(button:GetName().."BGTexture");
                local link = GetInventoryItemLink("target", button:GetID());
                if (link) then
                        --SI_AddMessage(link);
                        SuperInspect_TT:SetInventoryItem("target", button:GetID());
                        r, g, b = line:GetTextColor() 
                        bgBorder:SetVertexColor(r, g, b, 1); --r,g,b,a = FontString:GetTextColor()      
                        bgBorder:Show();
                else
                        bgBorder:Hide();
                end

                if (SI_Save.itembg) then
                        getglobal(button:GetName().."BGTexture"):SetTexture("Interface\\Addons\\SuperInspect\\gfx\\ItemOverlay_Tab");
                else
                        getglobal(button:GetName().."BGTexture"):SetTexture("Interface\\Addons\\SuperInspect\\gfx\\ItemOverlay");
                end

                if (not SuperInspect.bonus or SuperInspect.bonus ~= UnitName("target")) then
                        if (not SuperInspectFrame.buts) then
                                SuperInspectFrame.buts = 0;     
                        end
                        SuperInspectFrame.buts = SuperInspectFrame.buts + 1;
                        if (SuperInspectFrame.buts == 1) then
                                SuperInspect_ItemBonuses_bonuses = {};
                                SuperInspect_ItemBonuses_currentset = "";
                                SuperInspect_ItemBonuses_sets = {};
                                SuperInspect_ItemBonuses_active = nil;          
                        end
                        SI_AddMessage("|cffC0C0C0"..SuperInspectFrame.buts);
                        button.link = nil;
                        if (not link) then
                                if (SuperInspectFrame.buts == 19) then
                                        --DEFAULT_CHAT_FRAME:AddMessage("OnShow");
                                        SuperInspectFrame.buts = nil;
                                        SuperInspect.bonus = UnitName("target");
                                        SuperInspectItemBonusesButton_BuildTooltip();
                                end
                                return; 
                        end
                        --if (SI_Save.debug) then
                        --      if (not SI_Save["debugtext"]) then
                        --              SI_Save["debugtext"] = {};      
                        --      end     
                        --      SI_Save["debugtext"]["link"] = link;
                        --end
                        
                        --"|cffa335ee|Hitem:18282:2523:0:0|h[Core Marksman Rifle]|h|r"
                        for color, item in string.gfind(link, "|c(%x+)|Hitem:(%d+:%d+:%d+:%d+)|h%[.-%]|h|r") do
                                if( item and item ~= "" ) then
                                        button.link = "item:"..string.gsub(item, "^(%d+):(%d+):(%d+):(%d+)$", "%1:0:%3:%4");
                                        button.c = color;
                                end
                        end

                        --button.iteml = {};
                        --button.itemr = {};
                        local line, lineR, text;
                        local durtext = getglobal(button:GetName().."DurabilityNumber");
                        durtext:Hide();
                        for i=1, (SuperInspect_TT:NumLines()), 1 do
                                line = getglobal("SuperInspect_TTTextLeft"..i);
                                if (not line or not line:GetText()) then
                                        durtext:Hide();
                                        return;
                                else
                                        if (not SI_Save.durabilityoff) then
                                                SuperInspect_GetItemDurability(button, line:GetText());         
                                        end                             
                                        SuperInspectItemBonuses_ScanLine(line:GetText(), button:GetID());
                                end
                        end
                        --if (SuperInspect_ItemBonuses_sets and table.getn( SuperInspect_ItemBonuses_sets ) >= 1) then
                                
                        --end
                        if (SuperInspectFrame.buts == 19) then
                                --DEFAULT_CHAT_FRAME:AddMessage("OnShow");
                                SuperInspectFrame.buts = nil;
                                if (UnitName("target") ~= UnitName("player")) then
                                        SuperInspectItemBonuses_GetSetBonuses();        
                                end
                                SuperInspect.bonus = UnitName("target");
                                SuperInspectItemBonusesButton_BuildTooltip();
                        end                     
                end
        end
end

function SuperInspect_BonusInfo_StartCompare()  
                
                SuperInspect_ItemBonusesNameCompare:SetText(SuperInspectFrameHeader_Name:GetText());
                SuperInspect_ItemBonusesGuildCompare:SetText(SuperInspectFrameHeader_Guild:GetText().."\n"..SuperInspectFrameHeader_Info:GetText());
                SuperInspect_ItemBonusesGuildCompare:SetTextColor(1, 1, 1);

                --SuperInspectFrame_Name
                --SuperInspectFrame_Guild
                --SuperInspectFrame_Info

                for i=1, 5, 1 do
                        local resTextorg = getglobal("SuperInspect_MagicResText"..i);
                        local resText = getglobal("SuperInspect_MagicResTextCompare"..i);
                        resText:Hide();
                        if (resTextorg:IsVisible()) then
                                resText:SetText(resTextorg:GetText());  
                                resText:Show();
                        end
                end
                SuperInspect_ItemBonusesTextCompare:SetText(SuperInspect_ItemBonusesText:GetText());
                SuperInspect_ItemBonusesTextRCompare:SetText(SuperInspect_ItemBonusesTextR:GetText());
                SuperInspect_ItemBonusesFrameCompare:Show();            
                --local iHeight = SuperInspect_ItemBonusesTextCompare:GetHeight();
                SuperInspect_ItemBonusesFrameCompare:SetHeight(SuperInspect_ItemBonusesTextCompare:GetHeight() + 116); 
end

function SuperInspect_GetItemDurability(button, line)
        local text = getglobal(button:GetName().."DurabilityNumber");
        if (not UnitIsUnit("target", "player")) then
                text:Hide();
                return;
        end
        
        if(string.sub(line,0,string.len(SI_DURABILITY)) == SI_DURABILITY) then
                --SI_AddMessage(SI_DURABILITY);
                button.d1, button.d2 = nil, nil;
                _, _, button.d1, button.d2 = string.find(line, SI_DURABILITYPATTERN);
                if (button.d1 and button.d2) then
                        --SI_AddMessage(button.d1.." / "..button.d2);
                        text:SetText(button.d1.."/"..button.d2);
                        local fraction = (button.d1 / button.d2);
                        if (fraction > 0.8) then
                                --text:SetTextColor( 1, 1, 1 );
                                --text:SetText("");
                                return;
                        elseif (fraction > 0.6) then
                                text:SetTextColor( 1, 1, 0.3 );
                                --text:SetText("=");
                        elseif (fraction > 0.4) then
                                text:SetTextColor( 1, 0.6, 0 );
                                --text:SetText("==");
                        elseif (fraction > 0.2) then
                                text:SetTextColor( 1, 0.3, 0 );
                                --text:SetText("===");
                        else
                                text:SetTextColor( 1, 0, 0 );
                                --text:SetText("====");
                        end
                        text:Show();
                end
        end
end

SuperInspect_ItemBonuses_bonuses = {};
SuperInspect_ItemBonuses_currentset = "";
SuperInspect_ItemBonuses_sets = {};
SuperInspect_ItemBonuses_active = nil;

function SuperInspectItemBonuses_ScanLine(line, id)
        local tmpStr, found;
        
        --SI_AddMessage(line);
        if (SuperInspect.name and SuperInspect.name == UnitName("player")) then
                -- Check for "Set: "
                if(string.sub(line,0,string.len(SI_IB_SET_PREFIX)) == SI_IB_SET_PREFIX and SuperInspect_ItemBonuses_currentset ~= "") then
                        local fnd = nil;
                        for i=1, table.getn( SuperInspect_ItemBonuses_sets ), 1 do
                                if (SuperInspect_ItemBonuses_sets[i].s == SuperInspect_ItemBonuses_currentset) then
                                        if (SuperInspect_ItemBonuses_sets[i].n > 1) then
                                        return;
                                        end
                                end
                        end
                        tmpStr = string.sub(line,string.len(SI_IB_SET_PREFIX)+1);
                        SuperInspectItemBonuses_ScanPassive(tmpStr);
                end
        end
        -- Check for "Equip: "
        if(string.sub(line,0,string.len(SI_IB_EQUIP_PREFIX)) == SI_IB_EQUIP_PREFIX) then

                tmpStr = string.sub(line,string.len(SI_IB_EQUIP_PREFIX)+1);
                SI_AddMessage("equip? :"..tmpStr);
                SuperInspectItemBonuses_ScanPassive(tmpStr);

        -- Check for "Chance on Hit: "
        --[[
        elseif(string.sub(line,0,string.len(SI_IB_COH_PREFIX)) == SI_IB_COH_PREFIX) then

                tmpStr = string.sub(line,string.len(SI_IB_COH_PREFIX)+1);
                SuperInspectItemBonuses_ScanPassive(tmpStr);]]

        -- any other line (standard stats, enchantment, set name, etc.)
        else
                -- Check for set name
                local max;
                _, _, tmpStr, max = string.find(line, SI_IB_SETNAME_PATTERN);
                if(tmpStr) then
                        SuperInspect_ItemBonuses_currentset = tmpStr;
                        if (SuperInspect_ItemBonuses_sets) then
                                local fnd = nil;
                                local j = 1;
                                for i=1, table.getn( SuperInspect_ItemBonuses_sets ), 1 do
                                        if (SuperInspect_ItemBonuses_sets[i].s == tmpStr) then
                                                SuperInspect_ItemBonuses_sets[i].n = SuperInspect_ItemBonuses_sets[i].n + 1;
                                                fnd = 1;
                                                return; 
                                        end
                                        j = j + 1;
                                end     
                                if (not fnd) then
                                        tinsert(SuperInspect_ItemBonuses_sets, tmpStr); 
                                        SuperInspect_ItemBonuses_sets[j] = {};
                                        SuperInspect_ItemBonuses_sets[j].s = tmpStr;
                                        SuperInspect_ItemBonuses_sets[j].n = 1;
                                        SuperInspect_ItemBonuses_sets[j].m = max;
                                        SuperInspect_ItemBonuses_sets[j].i = id;
                                end
                        else
                                --tinsert(SuperInspect_ItemBonuses_sets, tmpStr);
                                SuperInspect_ItemBonuses_sets[1] = {};
                                SuperInspect_ItemBonuses_sets[1].s = tmpStr;
                                SuperInspect_ItemBonuses_sets[1].n = 1;
                                SuperInspect_ItemBonuses_sets[1].m = max;
                                SuperInspect_ItemBonuses_sets[1].i = id;
                        end             
                else
                        found = SuperInspectItemBonuses_ScanGeneric(line);
                        if(not found) then
                                SuperInspectItemBonuses_ScanOther(line);
                        end;
                end
        end
end

function SuperInspectItemBonuses_GetSetBonuses()
        local id, cnum, nnum, tmpStr, line;
        for i=1, table.getn( SuperInspect_ItemBonuses_sets ), 1 do
                if (SuperInspect_ItemBonuses_sets[i].n > 1) then
                        id = SuperInspect_ItemBonuses_sets[i].i;
                        --cnum = SuperInspect_ItemBonuses_sets[i].n;
                        SuperInspect_TT:SetInventoryItem("target", id);
                        for j=2, (SuperInspect_ItemBonuses_sets[i].n), 1 do
                                for k=1, (SuperInspect_TT:NumLines()), 1 do
                                        line = getglobal("SuperInspect_TTTextLeft"..k);
                                        if (not line or not line:GetText()) then
                                        else            
                                                if(string.find(line:GetText(), SI_IB_MULTISET_PREFIX)) then
                                                        _, _, nnum, tmpStr = string.find(line:GetText(), SI_IB_MULTISET_PREFIX.."(.*)");
                                                        SI_AddMessage(RED_FONT_COLOR_CODE.."nnum = "..nnum.."  cnum = "..j.."  : ");
                                                        if (tmpStr and nnum and tonumber(nnum) == j) then
                                                                if (not SuperInspect_ItemBonuses_sets[i]["t"] or not SuperInspect_ItemBonuses_sets[i]["t"][nnum]) then
                                                                        SuperInspectItemBonuses_ScanPassive(tmpStr);
                                                                        if (not SuperInspect_ItemBonuses_sets[i]["t"]) then
                                                                                SuperInspect_ItemBonuses_sets[i]["t"] = {};
                                                                        end                     
                                                        

                                                                        SuperInspect_ItemBonuses_sets[i]["t"][nnum] = tmpStr;
                                                                        SI_AddMessage(RED_FONT_COLOR_CODE.."SET :"..(SuperInspect_ItemBonuses_sets[i].s).." ("..(SuperInspect_ItemBonuses_sets[i].n).."/"..(SuperInspect_ItemBonuses_sets[i].m)..") - "..tmpStr);                                               
                                                                else
                                                                        SI_AddMessage(RED_FONT_COLOR_CODE.."SET : tried adding set bonus, but already exists: ("..nnum..")");                                           
                                                                end
                                                        end
                                                end
                                        end
                                end
                        end
                end
        end
end

-- Scans passive bonuses like "Set: " and "Equip: "
function SuperInspectItemBonuses_ScanPassive(line)
        local i, p, value, found;

        found = nil;
        for i,p in SI_IB_EQUIP_PATTERNS do
                _, _, value = string.find(line, "^" .. p.pattern);
                if(value) then
                        SuperInspectItemBonuses_AddValue(p.effect, value)
                        found = 1;
                end
        end
        if(not found) then
                SuperInspectItemBonuses_ScanGeneric(line);
        end
end


-- Scans generic bonuses like "+3 Intellect" or "Arcane Resistance +4"
function SuperInspectItemBonuses_ScanGeneric(line)
        local value, token, pos, tmpStr, found;

        -- split line at "/" for enchants with multiple effects
        found = false;
        while(string.len(line) > 0) do
                pos = string.find(line, "/", 1, true);
                if(pos) then
                        tmpStr = string.sub(line,1,pos-1);
                        line = string.sub(line,pos+1);
                else
                        tmpStr = line;
                        line = "";
                end

                -- trim line
                tmpStr = string.gsub( tmpStr, "^%s+", "" );
                tmpStr = string.gsub( tmpStr, "%s+$", "" );
                tmpStr = string.gsub( tmpStr, "%.$", "" );

                _, _, value, token = string.find(tmpStr, SI_IB_PREFIX_PATTERN);
                if(not value) then
                        _, _,  token, value = string.find(tmpStr, SI_IB_SUFFIX_PATTERN);
                end
                if(token and value) then
                        -- trim token
                        token = string.gsub( token, "^%s+", "" );
                        token = string.gsub( token, "%s+$", "" );
        
                        if(SuperInspectItemBonuses_ScanToken(token,value)) then
                                found = true;
                        end
                end
        end
        return found;
end

-- Scans last fallback for not generic enchants, like "Mana Regen x per 5 sec."
function SuperInspectItemBonuses_ScanOther(line)
        local i, p, value, start, found;

        found = nil;
        for i,p in SI_IB_OTHER_PATTERNS do
                start, _, value = string.find(line, "^" .. p.pattern);
                if(start) then
                        if(p.value) then
                                SuperInspectItemBonuses_AddValue(p.effect, p.value)
                        elseif(value) then
                                SuperInspectItemBonuses_AddValue(p.effect, value)
                        end
                end
        end
end

function SuperInspectItemBonuses_AddValue(effect, value)
        local i,e;
        if(type(effect) == "string") then
                if(SuperInspect_ItemBonuses_bonuses[effect]) then
                        SuperInspect_ItemBonuses_bonuses[effect] = SuperInspect_ItemBonuses_bonuses[effect] + value;
                else
                        SuperInspect_ItemBonuses_bonuses[effect] = value;
                end
                --SI_AddMessage(TEXT(effect).." - "..value);
        else 
        -- list of effects
                for i,e in effect do
                        if(SuperInspect_ItemBonuses_bonuses[e]) then
                                if(type(value) == "table") then
                                        SuperInspect_ItemBonuses_bonuses[e] = SuperInspect_ItemBonuses_bonuses[e] + value[i];
                                else
                                        SuperInspect_ItemBonuses_bonuses[e] = SuperInspect_ItemBonuses_bonuses[e] + value;
                                end
                        else
                                if(type(value) == "table") then
                                        SuperInspect_ItemBonuses_bonuses[e] = value[i];
                                else
                                        SuperInspect_ItemBonuses_bonuses[e] = value;
                                end
                        end
                        --SI_AddMessage(TEXT(e).." - "..value);
                end
        end

        
end

function SuperInspectItemBonuses_ScanToken(token, value)
        local i,p,s1,s2;
        if(SI_IB_TOKEN_EFFECT[token]) then
                SuperInspectItemBonuses_AddValue(SI_IB_TOKEN_EFFECT[token], value);
        else
                for i,p in SI_IB_S1 do
                        if(string.find(token,p.pattern,1,1)) then
                                s1 = p.effect;
                        end
                end     
                for i,p in SI_IB_S2 do
                        if(string.find(token,p.pattern,1,1)) then
                                s2 = p.effect;
                        end
                end     
                if(s1 and s2) then
                        SuperInspectItemBonuses_AddValue(s1..s2, value);
                end 
        end
end


function SuperInspect_BonusShow()
        if (not SI_Save.bonus or SI_Save.bonus == 0) then
                return;
        else
                SuperInspect_ItemBonusesFrame:Show();
                return 1;
        end
end

function SuperInspectItemBonusesButton_BuildTooltip()
        if (not SuperInspect_BonusShow()) then
                return; 
        end
        local text,textR,ret,name,cat,val = "","","","","","";
        local i;
        for i=1, 5, 1 do
                getglobal("SuperInspect_MagicResText"..i):Hide();
        end

        for i,e in SI_IB_EFFECTS do

                if(SuperInspect_ItemBonuses_bonuses[e.effect]) then
                        if(e.format) then
                                val = format(e.format,SuperInspect_ItemBonuses_bonuses[e.effect]);
                        else
                                val = SuperInspect_ItemBonuses_bonuses[e.effect];
                        end
                        --DEFAULT_CHAT_FRAME:AddMessage(e.name);
                        --catch the resistances and put them in the res icons instead
                        if (e.name == RESISTANCE6_NAME) then
                                SuperInspect_MagicResText1:SetText(val);
                                SuperInspect_MagicResText1:Show();
                                name = "";
                                nameR = "";
                                val = "";
                                --return;
                        elseif (e.name == RESISTANCE2_NAME) then
                                SuperInspect_MagicResText2:SetText(val);
                                SuperInspect_MagicResText2:Show();
                                name = "";
                                nameR = "";
                                val = "";
                        elseif (e.name == RESISTANCE3_NAME) then
                                SuperInspect_MagicResText3:SetText(val);
                                SuperInspect_MagicResText3:Show();
                                name = "";
                                nameR = "";
                                val = "";
                        elseif (e.name == RESISTANCE4_NAME) then
                                SuperInspect_MagicResText4:SetText(val);
                                SuperInspect_MagicResText4:Show();
                                name = "";
                                nameR = "";
                                val = "";
                        elseif (e.name == RESISTANCE5_NAME) then
                                SuperInspect_MagicResText5:SetText(val);
                                SuperInspect_MagicResText5:Show();
                                name = "";
                                nameR = "";
                                val = "";                       
                        else
                                name = "\n".. HIGHLIGHT_FONT_COLOR_CODE.. "  ".. e.name ..":\t";
                                nameR = "\n";
                        end
                        if(e.cat ~= cat and e.cat ~= "RES") then
                                cat = e.cat;
                                ret = "";
                                if(text ~= "") then
                                        text = text.."\n"
                                        textR = textR.."\n"
                                elseif(text == "") then
                                        ret = "";
                                end
                                text = text .. ret .. "|cffffff00"..getglobal("SI_IB_CAT_"..cat) .. ":";
                                textR = textR .. ret;
                        end
                        text = text ..name;
                        textR = textR ..nameR.. GREEN_FONT_COLOR_CODE..val;
                end
        end
        if (text and text ~= "") then
                local sntText = "";
                if (SuperInspect_ItemBonuses_sets and table.getn( SuperInspect_ItemBonuses_sets ) >= 1) then
                        text = text.."\n\n".. SI_IB_YELLOW..SI_SETS .. ":";
                        for i=1, table.getn( SuperInspect_ItemBonuses_sets ), 1 do
                                text = text.."\n  ".. HIGHLIGHT_FONT_COLOR_CODE..SuperInspect_ItemBonuses_sets[i].s .." (".. GREEN_FONT_COLOR_CODE..SuperInspect_ItemBonuses_sets[i].n .."/"..SuperInspect_ItemBonuses_sets[i].m.. HIGHLIGHT_FONT_COLOR_CODE..")";
                                if (SuperInspect_ItemBonuses_sets[i]["t"]) then
                                        sntText = sntText.."\n\n".. SI_IB_YELLOW..SuperInspect_ItemBonuses_sets[i].s ..HIGHLIGHT_FONT_COLOR_CODE.." (".. GREEN_FONT_COLOR_CODE..SuperInspect_ItemBonuses_sets[i].n .."/"..SuperInspect_ItemBonuses_sets[i].m.. HIGHLIGHT_FONT_COLOR_CODE..")";
                                        for index, value in SuperInspect_ItemBonuses_sets[i]["t"] do
                                                --DEFAULT_CHAT_FRAME:AddMessage(index);
                                                --if (SuperInspect_ItemBonuses_sets[i]["t"][set]) then
                                                        --DEFAULT_CHAT_FRAME:AddMessage(value);
                                                        sntText = sntText.."\n ".. GREEN_FONT_COLOR_CODE.."("..index..") "..HIGHLIGHT_FONT_COLOR_CODE..value;   
                                                --end
                                        end     
                                end
                        end     
                        --text = text.."IMPORTANT: Bonuses awarded from multiple set pieces are not available for detection on your target.  Please adjust your number manually.";
                end
                SuperInspect_ItemBonusesText:SetText(text, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
                SuperInspect_ItemBonusesTextR:SetText(textR, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
                SuperInspect_SnTBonusesText:SetText(sntText, HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
                --SI_AddMessage(" h= "..SuperInspect_ItemBonusesText:GetHeight());
                --SI_AddMessage(SuperInspect_ItemBonusesTextR:GetHeight());
                SuperInspect_Button_ShowBonuses:SetText(SI_BONUSESHIDE);
                local iHeight = SuperInspect_ItemBonusesText:GetHeight() + 74;
                if (iHeight < 284) then
                        SuperInspect_ItemBonusesFrame:SetHeight(284); 
                else
                        SuperInspect_ItemBonusesFrame:SetHeight(iHeight);       
                end
                SuperInspect_ItemBonusesText:SetWidth(208);
        else
                SuperInspect_ItemBonusesFrame:Hide();
        end
end

function SuperInspect_UpdateModel(unit)
        if (not unit) then
                unit = "target";        
        end
        if (UnitExists(unit)) then
                local x, y, z = SuperInspect_ModelFrame:GetPosition();
                SuperInspect_ModelFrame:SetModelScale(1);
                SuperInspect_ModelFrame:ClearModel();
                SuperInspect_ModelFrame:SetUnit(unit);

                SuperInspect_ModelFrame:SetPosition(x, y, z);

                --DEFAULT_CHAT_FRAME:AddMessage(SuperInspect_ModelFrame:GetModelScale());
                SetPortraitTexture(SuperInspectFramePortrait, "target");

                SuperInspect_MoveFrame.panoffset = SuperInspect_ModelFrame.positionx * 100;
                SuperInspect_MoveFrame.panoffsety = SuperInspect_ModelFrame.positiony * 100;
                if ( SI_Save.default ) then
                        for key, val in UISpecialFrames do
                                if ( val == "SuperInspectFrame" ) then val = nil; end
                        end
                        UIPanelWindows["SuperInspectFrame"] = { area = "left", pushable = 0 };
                        SuperInspectFrame:EnableMouse(0);

                else
                        tinsert(UISpecialFrames, "SuperInspectFrame");
                        UIPanelWindows["SuperInspectFrame"] = nil;
                        SuperInspectFrame:EnableMouse(1);
                end
                ShowUIPanel(SuperInspectFrame); 
                SuperInspect.isVisible = 1;
                SuperInspect_InspectFrame_Show(unit);
                SuperInspect_SetBackground(unit);
                
                --SI_AddMessage(SuperInspect.name..UnitName(unit));
                if (SuperInspect.name and SuperInspect.name ~= UnitName(unit)) then     
                        SuperInspect.honor = nil;       
                        SuperInspect.bonus = nil;
                        --SI_AddMessage("CLEARING HONOR: OnEvent");
                        --SI_AddMessage("|cffffd200PLAYER_TARGET_CHANGED: "..SuperInspect.name);
                end
                SuperInspect.name = UnitName(unit);
                
                if (UnitRace(unit)) then
                        SuperInspectFrameHeader_Name:SetText(UnitPVPName(unit));
                        local guildname = nil;
                        local guildtitle = nil;
                        local guildrank = nil;  
                        guildname, guildtitle, guildrank = GetGuildInfo(unit);
                        local level = UnitLevel(unit);
                        if (level == -1) then
                                level = "??";   
                        end
                        if (guildname) then
                                SuperInspectFrameHeader_Guild:SetText(format(TEXT(GUILD_TITLE_TEMPLATE), guildtitle, "<"..guildname..">"));
                                SuperInspectFrameHeader_Info:SetText(SI_LEVEL.." "..level.." "..UnitRace(unit).." "..UnitClass(unit));                          
                        else
                                SuperInspectFrameHeader_Guild:SetText(SI_LEVEL.." "..level.." "..UnitRace(unit).." "..UnitClass(unit));
                                SuperInspectFrameHeader_Info:SetText(" ");                              
                        end
                else
                        SuperInspectFrameHeader_Name:SetText(UnitName(unit));
                        local level = UnitLevel(unit);
                        if (level == -1) then
                                level = "??";   
                        end
                        local classification = UnitClassification(unit);
                        if ( classification == "worldboss" ) then
                                classification = " ("..BOSS..")";
                        elseif ( classification == "rareelite"  ) then
                                classification = " ("..SI_RAREELITE..")";
                        elseif ( classification == "elite"  ) then
                                classification = " ("..ELITE..")";
                        elseif ( classification == "rare"  ) then
                                classification = " ("..ITEM_QUALITY3_DESC..")";
                        else
                                classification = "";
                        end
                        --BOSS
                        --ELITE
                        --ITEM_QUALITY3_DESC --rare
                        SuperInspectFrameHeader_Guild:SetText(SI_LEVEL.." "..level..classification);
                        SuperInspectFrameHeader_Info:SetText(" ");
                end
        else
                --SuperInspect_InvFrame:Hide();
                --SuperInspect_Button_ShowItems:Disable();
                --SuperInspect_Button_ShowItems.isDisabled = 1;
        end
end

function SuperInspect_GetBackgroundTexturePath(unit)
        -- HACK!!!
        local race, fileName = UnitRace(unit);
        if ( fileName == "Gnome" or fileName == "GNOME" ) then
                fileName = "Dwarf";
        elseif ( fileName == "Troll" or fileName == "TROLL" ) then
                fileName = "Orc";
        end
        if ( not fileName ) then
                local num = random( 1, table.getn(SI_BG_Other) );
                fileName = SI_BG_Other[num];
                return "Interface\\TalentFrame\\"..fileName.."-";
        else
                return "Interface\\DressUpFrame\\DressUpBackground-"..fileName, 1;
        end
        -- END HACK
end

function SuperInspect_SetBackground(unit)
        local texture, type = SuperInspect_GetBackgroundTexturePath(unit);
        if (type == 1) then
                SuperInspect_BackgroundTopLeft:SetTexture(texture..1);
                SuperInspect_BackgroundTopRight:SetTexture(texture..2);
                SuperInspect_BackgroundBotLeft:SetTexture(texture..3);
                SuperInspect_BackgroundBotRight:SetTexture(texture..4);
                SuperInspect_BackgroundBotRight:SetWidth(64);   
                SuperInspect_BackgroundTopLeft:SetWidth(256);
                SuperInspect_BackgroundTopRight:SetWidth(64);
                SuperInspect_BackgroundBotLeft:SetWidth(256);
        else
                SuperInspect_BackgroundTopLeft:SetTexture(texture.."TopLeft");
                SuperInspect_BackgroundTopRight:SetTexture(texture.."TopRight");
                SuperInspect_BackgroundBotLeft:SetTexture(texture.."BottomLeft");
                SuperInspect_BackgroundBotRight:SetTexture(texture.."BottomRight");             
                SuperInspect_BackgroundBotRight:SetWidth(74);   
                SuperInspect_BackgroundTopLeft:SetWidth(267);
                SuperInspect_BackgroundTopRight:SetWidth(74);
                SuperInspect_BackgroundBotLeft:SetWidth(267);
        end
end

function SuperInspect_ShowItems_CheckChecked( button )
        if (not SI_Save.items or SI_Save.items == 0) then
                SuperInspect_InvFrame:Show();
                --SI_AddMessage("SHOW INV: checkchecked");
        else
                SuperInspect_InvFrame:Hide();   
                SI_Save.items = 0;
                --SI_AddMessage("HIDING INV: checkitycheck");
        end
end

function SuperInspect_ShowHonor_CheckChecked( button )
        if (not SuperInspect_HonorFrame.isShowing or SuperInspect_HonorFrame.isShowing == 0) then
                SuperInspect_HonorFrame:Show();
                if (SuperInspect_ItemBonusesFrame:IsVisible()) then
                        SuperInspect_ShowBonuses_CheckChecked();
                end
        else
                SuperInspect_HonorFrame:Hide(); 
        end
end

function SuperInspect_ShowBonuses_CheckChecked( button )
        if (not SI_Save.bonus or SI_Save.bonus == 0) then
                SI_Save.bonus = 1;
                SuperInspectItemBonusesButton_BuildTooltip();
                --SI_AddMessage("SHOW BONUS: checkchecked");
                if (SuperInspect_HonorFrame:IsVisible()) then
                        SuperInspect_ShowHonor_CheckChecked();
                end
        else
                SuperInspect_ItemBonusesFrame:Hide();   
                SI_Save.bonus = 0;
                --SI_AddMessage("HIDING BONUS: checkitycheck");
        end
end

function SuperInspect_ShowMobInfo_CheckChecked( button )
        if (not SI_Save.mi or SI_Save.mi == 0) then
                SuperInspect_MobInfoFrame:Show();
        else
                SuperInspect_MobInfoFrame:Hide();       
                SI_Save.mi = 0;
        end
end

function SuperInspect_HonorFrame_OnLoad()
        this:RegisterEvent("INSPECT_HONOR_UPDATE");
end

function SuperInspect_HonorFrame_OnEvent()
        if ( event == "INSPECT_HONOR_UPDATE" ) then
                --SI_AddMessage("INSPECT_HONOR_UPDATE");
                SuperInspect_HonorFrame_Update();

        end
end

function SuperInspect_HonorFrame_OnShow()
        
        SuperInspect_HonorFrame.isShowing = 1;
        SuperInspect_Button_ShowHonor:SetText(SI_HONORHIDE);

        if (SuperInspect.name) then
                --SI_AddMessage(SuperInspect.name);
        end
        if (SuperInspect_ItemBonusesFrame:IsVisible()) then
                SuperInspect_ShowBonuses_CheckChecked();
        end

        if (not UnitExists("target")) then
                if (not SuperInspect.honor and SuperInspect.name and SuperInspect.name ~= UnitName("target")) then
                        SuperInspect_HonorFrameCurrentPVPTitle:SetText(SI_NOTARGET);
                        SuperInspect_HonorFrameCurrentPVPTitle:Show();
                        SuperInspect_HonorFrameCurrentPVPRank:SetText("");
                        SuperInspect_HonorFrameHonorPercent:SetText("");
                        SuperInspect_HonorFrameCurrentPVPRank:Hide();
                        SuperInspect_HonorFrameCurrentPVPTitle:SetPoint("TOP", "$parent", "TOP", - SuperInspect_HonorFrameCurrentPVPRank:GetWidth()/2, -20);
                        SuperInspect.honor = nil;
                        --SI_AddMessage("CLEARING HONOR: OnShow 1");
                        return;                         
                else
                        SuperInspect_HonorFrame_Update();
                end
        else
                if (not SuperInspect.name or SuperInspect.name ~= UnitName("target") or not SuperInspect.honor or not HasInspectHonorData()) then
                        --SuperInspect.name = UnitName("target")
                        SuperInspect.honor = nil;
                        --SI_AddMessage("CLEARING HONOR: OnShow 2");
                        SuperInspect_HonorFrame_Clear();

                        SuperInspect_HonorFrameCurrentPVPTitle:SetText(SI_REQUESTHONOR);
                        SuperInspect_HonorFrameCurrentPVPTitle:Show();
                        this.requesting = GetTime();
                        SuperInspect_HonorFrameCurrentPVPRank:SetText("");
                        SuperInspect_HonorFrameCurrentPVPRank:Hide();
                        SuperInspect_HonorFrameHonorPercent:SetText("");
                        SuperInspect_HonorFrameCurrentPVPTitle:SetPoint("TOP", "$parent", "TOP", - SuperInspect_HonorFrameCurrentPVPRank:GetWidth()/2, -18);    

                        RequestInspectHonorData();
                        --SI_AddMessage("requesting honor update");
                else
                        SuperInspect_HonorFrame_Update();
                end     
        end
end

--[[
SI_RANKNAME = {};
SI_RANKNAME.Alliance = {
        [1] = "Private",
        [2] = "Corporal",
        [3] = "Sergeant",
        [4] = "Master Sergeant",
        [5] = "Sergeant Major",
        [6] = "Knight",
        [7] = "Knight-Lieutenant",
        [8] = "Knight-Captain",
        [9] = "Knight-Champion",
        [10] = "Lieutenant Commander",
        [11] = "Commander",
        [12] = "Marshal",
        [13] = "Field Marshal",
        [14] = "Grand Marshal",
        };
SI_RANKNAME.Horde = {
        [1] = "Scout",
        [2] = "Grunt",
        [3] = "Sergeant",
        [4] = "Senior Sergeant",
        [5] = "First Sergeant",
        [6] = "Stone Guard",
        [7] = "Blood Guard",
        [8] = "Legionnare",
        [9] = "Centurion",
        [10] = "Champion",
        [11] = "Lieutenant General",
        [12] = "General",
        [13] = "Warlord",
        [14] = "High Warlord",
        };
]]
--[[
PVP_RANK_5_0 = "Scout";
PVP_RANK_5_1 = "Private";
PVP_RANK_6_0 = "Grunt";
PVP_RANK_6_1 = "Corporal";
PVP_RANK_7_0 = "Sergeant";
PVP_RANK_7_1 = "Sergeant";
PVP_RANK_8_0 = "Senior Sergeant";
PVP_RANK_8_1 = "Master Sergeant";
PVP_RANK_9_0 = "First Sergeant";
PVP_RANK_9_1 = "Sergeant Major";
PVP_RANK_10_0 = "Stone Guard";
PVP_RANK_10_1 = "Knight";
PVP_RANK_11_0 = "Blood Guard";
PVP_RANK_11_1 = "Knight-Lieutenant";
PVP_RANK_12_0 = "Legionnaire";
PVP_RANK_12_1 = "Knight-Captain";
PVP_RANK_13_0 = "Centurion";
PVP_RANK_13_1 = "Knight-Champion";
PVP_RANK_14_0 = "Champion";
PVP_RANK_14_1 = "Lieutenant Commander";
PVP_RANK_15_0 = "Lieutenant General";
PVP_RANK_15_1 = "Commander";
PVP_RANK_16_0 = "General";
PVP_RANK_16_1 = "Marshal";
PVP_RANK_17_0 = "Warlord";
PVP_RANK_17_1 = "Field Marshal";
PVP_RANK_18_0 = "High Warlord";
PVP_RANK_18_1 = "Grand Marshal";
PVP_RANK_19_0 = "Leader"; -- PvP Leader NPC
PVP_RANK_19_1 = "Leader"; -- PvP Leader NPC
]]

function SuperInspect_HonorFrame_Update()
        if (SuperInspect.honor and not UnitExists("target")) then
                SuperInspect.honor = 1;
                return;
        end     
        local sessionHK, sessionDK, yesterdayHK, yesterdayHonor, thisweekHK, thisweekHonor, lastweekHK, lastweekHonor, lastweekStanding, lifetimeHK, lifetimeDK, lifetimeRank = GetInspectHonorData();
        this.requesting = nil;

        -- Yesterday's values
        SuperInspect_HonorFrameYesterdayHKValue:SetText(yesterdayHK);
        SuperInspect_HonorFrameYesterdayContributionValue:SetText(yesterdayHonor);

        -- This week's values
        SuperInspect_HonorFrameThisWeekHKValue:SetText(thisweekHK);
        SuperInspect_HonorFrameThisWeekContributionValue:SetText(thisweekHonor);
        
        -- Last Week's values
        SuperInspect_HonorFrameLastWeekHKValue:SetText(lastweekHK);
        SuperInspect_HonorFrameLastWeekContributionValue:SetText(lastweekHonor);
        SuperInspect_HonorFrameLastWeekStandingValue:SetText(lastweekStanding);

        -- This session's values
        SuperInspect_HonorFrameCurrentHKValue:SetText(sessionHK);
        SuperInspect_HonorFrameCurrentDKValue:SetText(sessionDK);
        
        -- Lifetime stats
        SuperInspect_HonorFrameLifeTimeHKValue:SetText(lifetimeHK);
        SuperInspect_HonorFrameLifeTimeDKValue:SetText(lifetimeDK);
        local rankName, rankNumber = GetPVPRankInfo(lifetimeRank);
        SuperInspect_HonorFrameLifeTimeRankValue:SetText(rankName);

        -- Set rank progress and bar color
        local factionGroup, factionName = UnitFactionGroup("target");

        -- Set rank name and number
        rankName, rankNumber = GetPVPRankInfo(UnitPVPRank("target"));
        if ( not rankName ) then
                rankName = NONE;
        elseif (UnitFactionGroup("target") ~= UnitFactionGroup("player")) then
                local faction;
                if ( factionGroup == "Alliance" ) then
                        faction = 1;
                else
                        faction = 0;
                end
                rankName = getglobal("PVP_RANK_"..(tonumber(rankNumber)+4).."_"..faction);
        end

        SuperInspect_HonorFrameCurrentPVPRank:SetText("("..RANK.." "..rankNumber..")");
        SuperInspect_HonorFrameCurrentPVPRank:Show();
        SuperInspect_HonorFrameCurrentPVPTitle:SetText(rankName);
        SuperInspect_HonorFrameCurrentPVPTitle:Show();

        if ( factionGroup == "Alliance" ) then
                SuperInspect_HonorFrameProgressBar:SetStatusBarColor(0.05, 0.15, 0.36);
        else
                SuperInspect_HonorFrameProgressBar:SetStatusBarColor(0.63, 0.09, 0.09);
        end
        local progress = GetInspectPVPRankProgress();
        SuperInspect_HonorFrameProgressBar:SetValue(progress);
        SuperInspect_HonorFrameHonorPercent:SetText(format("%.2f", (progress*100) ).."%");

        -- Set icon
        if ( rankNumber > 0 ) then
                SuperInspect_HonorFramePvPIcon:SetTexture(format("%s%02d","Interface\\PvPRankBadges\\PvPRank",rankNumber));
                SuperInspect_HonorFramePvPIcon:Show();
        else
                SuperInspect_HonorFramePvPIcon:Hide();
        end

        -- Recenter rank text
        SuperInspect_HonorFrameCurrentPVPTitle:SetPoint("TOP", "$parent", "TOP", - (SuperInspect_HonorFrameCurrentPVPRank:GetWidth())/2, -18);

        SuperInspect.honor = 1;
        --SI_AddMessage("ADDING HONOR: OnShow");
end

--/script DEFAULT_CHAT_FRAME:AddMessage(UnitFactionGroup("target"));

function SuperInspect_HonorFrame_Clear()
        if (SuperInspect.name and not UnitExists("target")) then
                return;
        end
        -- Yesterday's values
        SuperInspect_HonorFrameYesterdayHKValue:SetText("");
        SuperInspect_HonorFrameYesterdayContributionValue:SetText("");

        -- This week's values
        SuperInspect_HonorFrameThisWeekHKValue:SetText("");
        SuperInspect_HonorFrameThisWeekContributionValue:SetText("");
        
        -- Last Week's values
        SuperInspect_HonorFrameLastWeekHKValue:SetText("");
        SuperInspect_HonorFrameLastWeekContributionValue:SetText("");
        SuperInspect_HonorFrameLastWeekStandingValue:SetText("");

        -- This session's values
        SuperInspect_HonorFrameCurrentHKValue:SetText("");
        SuperInspect_HonorFrameCurrentDKValue:SetText("");
        
        -- Lifetime stats
        SuperInspect_HonorFrameLifeTimeHKValue:SetText("");
        SuperInspect_HonorFrameLifeTimeDKValue:SetText("");

        SuperInspect_HonorFrameLifeTimeRankValue:SetText("");

        SuperInspect_HonorFrameCurrentPVPRank:SetText("");
        SuperInspect_HonorFrameCurrentPVPTitle:SetText("");
        SuperInspect_HonorFrameCurrentPVPTitle:Hide();
        SuperInspect_HonorFrameHonorPercent:SetText("");

        SuperInspect_HonorFramePvPIcon:Hide();
        SuperInspect_HonorFrameProgressBar:SetValue(0);
        SuperInspect_HonorFrameHonorPercent:SetText("");

end

function SuperInspect_HonorFrame_OnUpdate()
        if (this.requesting) then
                if ((GetTime() - this.requesting) >= 5) then
                        this.requesting = nil;
                        SuperInspect.honor = nil;
                        --SI_AddMessage("CLEARING HONOR: OnUpdate");
                        SuperInspect_HonorFrameCurrentPVPTitle:SetText(SI_REQUESTHONORFAILED);
                        SuperInspect_HonorFrameCurrentPVPTitle:Show();
                        SuperInspect_HonorFrameCurrentPVPRank:SetText("");
                        SuperInspect_HonorFrameCurrentPVPRank:Hide();
                        SuperInspect_HonorFrameHonorPercent:SetText("");
                        SuperInspect_HonorFrameCurrentPVPTitle:SetPoint("TOP", "$parent", "TOP", - SuperInspect_HonorFrameCurrentPVPRank:GetWidth()/2, -20);
                end                     
        end
end

function SuperInspect_InspectPaperDollItemSlotButton_OnEnter()
        GameTooltip_SetDefaultAnchor(GameTooltip, this);
        SuperInspect.uiwidth = UIParent:GetWidth() / SuperInspect_GetUIScale();
        if (SI_Save.default or (this:GetCenter(UIParent) / SuperInspect.uiwidth) < 0.7 ) then   
                GameTooltip:SetOwner(this, "ANCHOR_RIGHT");
        else
                GameTooltip:SetOwner(this, "ANCHOR_LEFT");
        end
        local name = string.gsub(this:GetName(), "SuperInspect_", "");
        --SI_AddMessage("setting TT");
        --if we've lost our target, but gathered inv info when we had a target, ask the server for the item info
        if ( not GameTooltip:SetInventoryItem(SuperInspect_InvFrame.unit, this:GetID()) ) then
                if (this.link) then
                        GameTooltip:SetHyperlink(this.link);--GetItemInfo(this.link)
                else
                        GameTooltip:SetText(TEXT(getglobal(strupper(strsub(name, 8)))));        
                end
        end
        CursorUpdate();
end

function SuperInspect_ModelFrame_OnLoad()
        this.rotation = 0.61;
        this.positionx = 0;
        this.positiony = 0;
        this.zoom = 0;
        SuperInspect_MoveFrame.panoffset = this.positionx;
        SuperInspect_MoveFrame.panoffsety = this.positiony;
        this:SetRotation(this.rotation);
        this:RefreshUnit();
        --, this.left_right, this.up_down
        --/script SuperInspect_ModelFrame:SetModelScale(2);
        --/script SuperInspect_ModelFrame:SetCamera(1)
end

function SuperInspect_Main_OnMouseDown(arg1)
        if (arg1 == "LeftButton") then
                this:StartMoving();
                if (UnitPVPName("player") == SuperInspectFrameHeader_Name:GetText()) then
                        AutoEquipCursorItem();
                end
        end
end

-- this function is called when the frame is stopped being dragged around
function SuperInspect_Main_OnMouseUp(arg1)
        if (arg1 == "LeftButton") then
                this:StopMovingOrSizing();
                
                -- save the position 
                SI_Save.framepos_L = SuperInspectFrame:GetLeft();
                SI_Save.framepos_T = SuperInspectFrame:GetTop();

        end
end

function SuperInspect_Move_OnMouseDown(arg1)
        if (arg1 == "LeftButton") then
                this:StartMoving();
                this.ismoving = 1;
                --SI_AddMessage(this.offset);
        end
        if (arg1 == "RightButton") then
                this:StartMoving();
                this.ispaning = 1;
                --SI_AddMessage(SuperInspect_ModelFrame.positionx);
                --SI_AddMessage(SuperInspect_ModelFrame.positiony);
        end
end

-- this function is called when the frame is stopped being dragged around
function SuperInspect_Move_OnMouseUp(arg1)
        if (arg1 == "LeftButton") then
                this:StopMovingOrSizing();
                this.ismoving = nil;
                this.offset = SuperInspect_ModelFrame.rotation * 50;
                --SI_AddMessage(this.offset);
                this:ClearAllPoints();
                this:SetPoint("TOP", "SuperInspect_ModelFrame", "TOP", 0, 0);

        end
        if (arg1 == "RightButton") then
                this:StopMovingOrSizing();
                this.ispaning = nil;
                this.panoffset = SuperInspect_ModelFrame.positionx * 100;
                this.panoffsety = SuperInspect_ModelFrame.positiony * 100;
                this:ClearAllPoints();
                this:SetPoint("TOP", "SuperInspect_ModelFrame", "TOP", 0, 0);
                --/script SuperInspect_MoveFrame:SetPoint("CENTER", "SuperInspect_ModelFrame", "CENTER", 0, 0);

        end
end

function SuperInspect_Move_OnMouseWheel( value )
        --local scrollBar = getglobal(this:GetName().."ScrollBar");
        if ( value > 0 ) then
                SuperInspect_ModelFrame.zoom = SuperInspect_ModelFrame.zoom + 0.5;
                SuperInspect_ModelFrame:SetPosition(SuperInspect_ModelFrame.zoom, SuperInspect_ModelFrame.positionx, SuperInspect_ModelFrame.positiony);
        else
                SuperInspect_ModelFrame.zoom = SuperInspect_ModelFrame.zoom - 0.5;
                SuperInspect_ModelFrame:SetPosition(SuperInspect_ModelFrame.zoom, SuperInspect_ModelFrame.positionx, SuperInspect_ModelFrame.positiony);
        end
end

function SuperInspect_Move_OnUpdate(elapsedTime)
        if ( this.ismoving ) then
                if (not this.offset) then
                        this.offset = 0;        
                end
                local move = this:GetCenter() + this.offset;
                local parent = this:GetParent():GetCenter();
                SuperInspect_ModelFrame.rotation = (move - parent) * 0.02;
                SuperInspect_ModelFrame:SetRotation(SuperInspect_ModelFrame.rotation);
        end
        if ( this.ispaning ) then
                if (not this.panoffset) then
                        this.panoffset = 0;     
                end
                local move = this:GetCenter() + this.panoffset;
                local parent = this:GetParent():GetCenter();
                local position = (move - parent) * 0.01;
                SuperInspect_ModelFrame.positionx = position;

                if (not this.panoffsety) then
                        this.panoffsety = -100; 
                end
                local movey = this:GetTop() + this.panoffsety;
                local parenty = this:GetParent():GetTop();
                local positiony = (movey - parenty) * 0.01;
                SuperInspect_ModelFrame.positiony = positiony;
                SuperInspect_ModelFrame:SetPosition(SuperInspect_ModelFrame.zoom, SuperInspect_ModelFrame.positionx, SuperInspect_ModelFrame.positiony);
                --/script SuperInspect_ModelFrame:SetPosition(1, 2, -100);
        end
end

function SuperInspect_ResetFrame()
        SuperInspectFrame:ClearAllPoints();
        if (not SI_Save.default) then
                SuperInspectFrame:SetPoint("CENTER", "UIParent", "CENTER", 0, 0);
                SI_Save.framepos_L = SuperInspectFrame:GetLeft();
                SI_Save.framepos_T = SuperInspectFrame:GetTop();        
        end
        if (not UnitExists("target")) then
                TargetUnit("player");   
        end
        if (SI_Save.default) then
                HideUIPanel(SuperInspectFrame);
                SuperInspect.isVisible = nil;
        end
        SuperInspect_InspectTargetHooked();
end

--/script SuperInspect_MoveFrame:ClearAllPoints(); SuperInspect_MoveFrame:SetPoint("CENTER", "UIParent", "CENTER", 0, 0);
--SuperInspect_MoveFrame


--/script TB_AddMessage(table.getn(SuperInspect));
--/script TB_AddMessage(table.getn(SuperInspect["Servers"][GetCVar("realmName")]["Mods"]["TipBuddy"]["Users"]));

function SuperInspect_SetDefaultStyleScale()
        if (SI_Save.default) then
                SuperInspectFrame:SetScale(3);
                local scale = UIParent:GetScale();
                SuperInspect_SetEffectiveScale(SuperInspectFrame, scale, "UIParent");
                --SuperInspect_ModelFrame:SetScale(SuperInspectFrame:GetEffectiveScale());
                SuperInspect_ModelFrame:RefreshUnit();
                SI_Save.scale = scale;
        end
end

function SI_MI2_BuildMobInfoTooltip( mobName, mobLevel )
        if (not MobInfoDB) then
                return; 
        end
        SuperInspect_Button_ShowMobInfo:Show();
        -- get mob data for targeted mob
        local simobData = MI2_GetMobData( mobName, mobLevel, "target" )
        simobData.combinedStr = ""

        MI2_MouseoverIndex = mobName..":"..mobLevel

        -- handle combined Mob mode : try to find the other Mobs with same
        -- name but differing level, add their data to the tooltip data
        if (mobLevel > 0) then
                for levelToCombine = mobLevel-3, mobLevel+3, 1 do
                        if levelToCombine ~= mobLevel  then
                                local dataToCombine = MI2_GetMobData( mobName, levelToCombine )
                                if dataToCombine.color then
                                        SI_MI2_AddTwoMobs( simobData, dataToCombine )
                                        simobData.combinedStr = simobData.combinedStr.." L"..levelToCombine
                                end
                        else
                                simobData.combinedStr = simobData.combinedStr.." L"..levelToCombine
                        end
                end
        end

        -- calculate number of mobs to next level based on mob experience
        if simobData.xp then
                local xpCurrent = UnitXP("player") + simobData.xp
                local xpToLevel = UnitXPMax("player") - xpCurrent
                simobData.mob2Level = ceil(abs(xpToLevel / simobData.xp))+1
        end

        -- display the Mob data to the game tooltip
        SI_MI2_BuildQualityString( simobData )

        SI_MI2_CreateNormalTooltip( simobData, MI2_MouseoverIndex )
end  -- of MI2_BuildMobInfoTooltip()

function SI_MI2_BuildQualityString( simobData )
        local rt = simobData.loots or 1 
 
        simobData.qualityStr = ""

        if  simobData.r1  then
                simobData.qualityStr = simobData.qualityStr ..mifontGray..simobData.r1.."("..ceil((simobData.r1/rt)*100).."%) "
        end
        if  simobData.r2  then
                simobData.qualityStr = simobData.qualityStr ..mifontWhite..simobData.r2.."("..ceil((simobData.r2/rt)*100).."%) "
        end
        if  simobData.r3  then
                simobData.qualityStr = simobData.qualityStr ..mifontGreen..simobData.r3.."("..ceil((simobData.r3/rt)*100).."%) "
        end
        if  simobData.r4  then
                simobData.qualityStr = simobData.qualityStr ..mifontBlue..simobData.r4.."("..ceil((simobData.r4/rt)*100).."%) "
        end
        if  simobData.r5  then
                simobData.qualityStr = simobData.qualityStr ..mifontMageta..simobData.r5.."("..ceil((simobData.r5/rt)*100).."%) "
        end
end  -- MI2_CreateQualityString

-----------------------------------------------------------------------------
-- MI2_AddTwoMobs()
--
-- add the data for two mobs,
-- the data of the second mob (simobData2) is added to the data of the first
-- mob (simobData1). The result is returned in "simobData1".
-----------------------------------------------------------------------------
function SI_MI2_AddTwoMobs( simobData1, simobData2 )
        simobData1.loots = (simobData1.loots or 0) + (simobData2.loots or 0)
        simobData1.kills = (simobData1.kills or 0) + (simobData2.kills or 0)
        simobData1.emptyLoots = (simobData1.emptyLoots or 0) + (simobData2.emptyLoots or 0)
        simobData1.clothCount = (simobData1.clothCount or 0) + (simobData2.clothCount or 0)
        simobData1.copper = (simobData1.copper or 0) + (simobData2.copper or 0)
        simobData1.itemValue = (simobData1.itemValue or 0) + (simobData2.itemValue or 0)
        simobData1.r1 = (simobData1.r1 or 0) + (simobData2.r1 or 0)
        simobData1.r2 = (simobData1.r2 or 0) + (simobData2.r2 or 0)
        simobData1.r3 = (simobData1.r3 or 0) + (simobData2.r3 or 0)
        simobData1.r4 = (simobData1.r4 or 0) + (simobData2.r4 or 0)
        simobData1.r5 = (simobData1.r5 or 0) + (simobData2.r5 or 0)
        if simobData2.mobType then simobData1.mobType = simobData2.mobType end
        if simobData2.xp then simobData1.xp = simobData2.xp end

        -- combine DPS od two mobs
        if not simobData1.dps then
                simobData1.dps = simobData2.dps
        else
                if simobData2.dps then
                        simobData1.dps = floor( ((2.0 * simobData1.dps) + simobData2.dps) / 3.0 )
                end
        end

        -- combine minimum and maximum damage   
        if (simobData2.minDamage or 99999) < (simobData1.minDamage or 99999) then
                simobData1.minDamage = simobData2.minDamage
        end
        if (simobData2.maxDamage or 0) > (simobData1.maxDamage or 0) then
                simobData1.maxDamage = simobData2.maxDamage
        end
        
        -- add loot item tables of the two mobs
        if simobData2.itemList then
                if not simobData1.itemList then simobData1.itemList = {} end
                for itemID, amount in simobData2.itemList do
                        simobData1.itemList[itemID] = (simobData1.itemList[itemID] or 0) + simobData2.itemList[itemID]
                end
        end

        if simobData1.loots == 0 then simobData1.loots = nil end
        if simobData1.kills == 0 then simobData1.kills = nil end
        if simobData1.emptyLoots == 0 then simobData1.emptyLoots = nil end
        if simobData1.clothCount == 0 then simobData1.clothCount = nil end
        if simobData1.copper == 0 then simobData1.copper = nil end
        if simobData1.itemValue == 0 then simobData1.itemValue = nil end
        if simobData1.dps == 0 then simobData1.dps = nil end
        if simobData1.r1 == 0 then simobData1.r1 = nil end
        if simobData1.r2 == 0 then simobData1.r2 = nil end
        if simobData1.r3 == 0 then simobData1.r3 = nil end
        if simobData1.r4 == 0 then simobData1.r4 = nil end
        if simobData1.r5 == 0 then simobData1.r5 = nil end
end  -- MI2_AddTwoMobs

function SI_MI2_CreateNormalTooltip( simobData, mobIndex )
        local copperAvg, itemValueAvg
        local text, textR = "", "";

        if simobData.class then
                text = text..mifontGold..MI_TXT_CLASS.."\n";
                textR = textR..mifontWhite..simobData.class.."\n";
        end

        if simobData.healthCur then
                text = text..mifontGold..MI_TXT_HEALTH.."\n";
                textR = textR..mifontWhite..simobData.healthCur.." / "..simobData.healthMax.."\n";
        end

        if simobData.manaMax and simobData.manaMax > 0 then
                text = text..mifontGold..MI_TXT_MANA.."\n";
                textR = textR..mifontWhite..simobData.manaCur.." / "..simobData.manaMax.."\n";
        end

        -- exit right here if mob does not exist in database
        if not simobData.color then
                SuperInspect_Button_ShowMobInfo:Hide(); 
                return;
        end
        
        local mobGivesXp = not (simobData.color.r == 0.5  and  simobData.color.g == 0.5  and  simobData.color.b == 0.5)
        if mobGivesXp and simobData.xp then
                text = text..mifontGold..MI_TXT_XP.."\n";
                textR = textR..mifontWhite..simobData.xp.."\n";

                text = text..mifontGold..MI_TXT_TO_LEVEL.."\n";
                textR = textR..mifontWhite..simobData.mob2Level.."\n";
        end

        if (simobData.minDamage or simobData.dps) then 
                text = text..mifontGold..MI_TXT_DAMAGE.."\n";
                textR = textR..mifontWhite..(simobData.minDamage or 0).."-"..(simobData.maxDamage or 0).."  ["..(simobData.dps or 0).."]".."\n";
        end

        text = text.."\n"..mifontGray.."["..MI_TXT_COMBINED..simobData.combinedStr.."]".."\n";
        textR = textR.."\n\n";


        if simobData.kills then
                text = text..mifontGold..MI_TXT_KILLS.."\n";
                textR = textR..mifontWhite..simobData.kills.."\n";
        end          

        if  simobData.loots then
                text = text..mifontGold..MI_TXT_TIMES_LOOTED.."\n";
                textR = textR..mifontWhite..simobData.loots.."\n";
        end

        if  simobData.emptyLoots then
                local emptyLootsStr = mifontWhite..simobData.emptyLoots
                if  simobData.loots  then
                        emptyLootsStr = emptyLootsStr.." ("..ceil((simobData.emptyLoots/simobData.loots)*100).."%) "
                end
                text = text..mifontGold..MI_TXT_EMPTY_LOOTS.."\n";
                textR = textR..emptyLootsStr.."\n";
        end

        if  simobData.qualityStr ~= "" then
                text = text.."\n"..mifontGold..MI_TXT_QUALITY.."\n";
                textR = textR.."\n"..simobData.qualityStr.."\n";
        end

        if simobData.clothCount then
                local clothStr = mifontWhite..simobData.clothCount
                if simobData.loots then
                        clothStr = clothStr.." ("..ceil((simobData.clothCount/simobData.loots)*100).."%) "
                end
                text = text..mifontGold..MI_TXT_CLOTH_DROP.."\n";
                textR = textR..clothStr.."\n";
        end

        if simobData.copper and simobData.loots then
                copperAvg = ceil( simobData.copper / simobData.loots )
                text = text..mifontGold..MI_TXT_COIN_DROP.."\n";
                textR = textR..mifontWhite..copper2text(copperAvg).."\n";
        end

        if simobData.itemValue and simobData.loots then
                itemValueAvg = ceil( simobData.itemValue / simobData.loots )
                text = text..mifontGold..MI_TEXT_ITEM_VALUE.."\n";
                textR = textR..mifontWhite..copper2text(itemValueAvg).."\n";
        end

        local totalValue = (copperAvg or 0) + (itemValueAvg or 0)
        if totalValue > 0 then
                text = text..mifontGold..MI_TXT_MOB_VALUE.."\n";
                textR = textR..mifontWhite..copper2text(totalValue).."\n";
        end

        if simobData.itemList then
                text = text.."\n";
                textR = textR.."\n";
                text, textR = SI_MI2_AddItemsToTooltip( simobData, text, textR )
        end

        SuperInspect_MobInfoText:SetText(text);
        SuperInspect_MobInfoTextR:SetText(textR);
        if (SI_Save.mi and SI_Save.mi == 1) then
                SuperInspect_MobInfoFrame:Show();
                local iHeight = SuperInspect_MobInfoText:GetHeight();
                SuperInspect_MobInfoFrame:SetHeight(SuperInspect_MobInfoText:GetHeight() + 50); 
        end
end  -- of MI2_CreateNormalTooltip()

function SI_MI2_AddItemsToTooltip( simobData, text, textR )
        for itemID, amount in simobData.itemList do
                local itemText, itemColor = MI2_GetLootItemString(itemID)
                local itemText = itemText.." ("..amount..")"

                if string.len(itemText) < 40 then
                        text = text..itemColor..itemText.."\n";
                        textR = textR.."\n";
                else
                        local pos = string.find( itemText, " ", 26 );
                        text = text..itemColor..string.sub(itemText,1,pos-1).."\n";
                        textR = textR.."\n";
                        text = text..itemColor..string.sub(itemText,pos+1).."\n";
                        textR = textR.."\n";
                end
        end
        return text, textR;
end -- of MI2_AddItemsToTooltip

function SuperInspect_MobInfoFrame_OnShow()
        SI_Save.mi = 1;
        SuperInspect_Button_ShowMobInfo:SetText(SI_MOBINFOHIDE);
        --if (SuperInspect_MobInfoText:GetText() and SuperInspect_MobInfoText:GetText() ~= "") then
                local iHeight = SuperInspect_MobInfoText:GetHeight();
                SuperInspect_MobInfoFrame:SetHeight(SuperInspect_MobInfoText:GetHeight() + 50); 
        --end
end