local spellLeft = nil
local spellMiddle = nil
local spellRight = nil
local spellButton4 = nil
local spellButton5 = nil
local spellLeftShow = nil
local spellMiddleShow = nil
local spellRightShow = nil
local spellButton4Show = nil
local spellButton5Show = nil
local hlth, maxhlth, linenum = 1,2,1
local templeft=nil
local id=nil
local lspell=nil
local lspellrank=nil
local r=nil
local g=nil
local b=nil
local a=nil
local br=nil
local bg=nil
local bb=nil
local text=nil
local Heals=nil
local ri=nil
local DebuffType=nil
local uName=nil
local uBuff=nil
local spellLeftRecInstant=nil
local spellMiddleRecInstant=nil
local spellRightRecInstant=nil
local spellButton4RecInstant=nil
local spellButton5RecInstant=nil
local hlthdelta, tmpnum=0,0
local spellLeftTxt=nil
local spellLeftHeal=nil
local spellMiddleTxt=nil
local spellMiddleHeal=nil
local spellRightTxt=nil
local spellRightHeal=nil
local spellButton4Txt=nil
local spellButton4Heal=nil
local spellButton5Txt=nil
local spellButton5Heal=nil
local height = 20 
local width = 0
local txtL = nil
local txtR = nil
local ret_val, ret_heal = "  ", 0;
local tonumber=tonumber
local combo=nil
local linenum=1
local ModKey=""
local raidID=nil
local zone=nil;
local Instant_check=false
local top = nil
local x, y, z = nil,nil,nil
local format=format
local strlen=strlen
local strlower=strlower
local HealBot_CheckBuffs = {}
local HealBot_Tooltip_DirtyLines={}
local mins,secs=0,0
local sName,sRank=nil,nil
  
function HealBot_Tooltip_Clear_CheckBuffs()
  for x,_ in pairs(HealBot_CheckBuffs) do
    HealBot_CheckBuffs[x]=nil;
  end
  HealBot_Clear_CheckBuffs()
end

function HealBot_Tooltip_CheckBuffs(buff)
  HealBot_CheckBuffs[buff]=buff;
  HealBot_Set_CheckBuffs(buff)
  z=HealBot_AltBuffNames(buff)
  if z then 
    HealBot_CheckBuffs[z]=buff; 
    HealBot_Set_CheckBuffs(z)
  end
end

function HealBot_Tooltip_ReturnMinsSecs(s)
  mins=floor(s/60)
  secs=floor(s-(mins*60))
  if secs<10 then secs="0"..secs end
  return mins,secs
end

local UnitOffline=nil
function HealBot_Action_RefreshTooltip(unit, state)
  if HealBot_Config.ShowTooltip==0 then return end
  if not unit then return end;
  
  uName=UnitName(unit);
  if (not uName) then return end;

  if unit=="target" and HealBot_Config.TargetBarNormalMode==1 then
    HealBot_Action_RefreshTargetTooltip(uName, unit)
	return
  end
  
  hlth,maxhlth=HealBot_UnitHealth(unit, uName)

  if hlth>maxhlth then
    maxhlth=HealBot_CorrectPetHealth(unit,hlth,maxhlth,uName)
  end
  
  UnitOffline=HealBot_Action_GetTimeOffline(uName); --added by Diacono
  uBuff=HealBot_UnitBuff[uName]
  DebuffType=HealBot_UnitDebuff[uName];

  spellLeft = HealBot_Action_SpellPattern("Left", state);
  spellMiddle = HealBot_Action_SpellPattern("Middle", state);
  spellRight = HealBot_Action_SpellPattern("Right", state);
  spellButton4 = HealBot_Action_SpellPattern("Button4", state);
  spellButton5 = HealBot_Action_SpellPattern("Button5", state);
  linenum = 1

  spellLeftShow = spellLeft
  spellMiddleShow = spellMiddle
  spellRightShow = spellRight
  spellButton4Show = spellButton4
  spellButton5Show = spellButton5
  
  if not IsModifierKeyDown() and not HealBot_IsFighting and HealBot_Config.SmartCast==1 then 
    templeft=spellLeft;
    spellLeft=nil;
    spellLeft=HealBot_Action_SmartCast(unit);
    if not spellLeft then spellLeft=templeft; end;
  end
  if spellLeft and strlower(spellLeft)~=strlower(HEALBOT_DISABLED_TARGET) and strlower(spellLeft)~=strlower(HEALBOT_ASSIST) and strlower(spellLeft)~=strlower(HEALBOT_FOCUS) then
    
    if spellLeft then
      id=nil
      if not HealBot_Spells[spellLeft] then
        id = HealBot_GetSpellId(spellLeft);
      elseif HealBot_Spells[spellLeft].id then
        id = HealBot_Spells[spellLeft].id
      else
        id = HealBot_GetSpellId(spellLeft);
      end
	  if id then
        lspell, lspellrank = HealBot_GetSpellName(id)
        if lspellrank then
          spellLeft=lspell .. "(" .. lspellrank .. ")";
        else
          spellLeft=lspell;
        end
		spellLeftShow=lspell;
	  else
	    x=GetMacroIndexByName(spellLeft)
		if x==0 then spellLeft="" end
	  end
    else 
      spellLeft, spellLeftShow = HealBot_Tooltip_GetHealSpell(unit,HealBot_Action_SpellPattern("Left"),uName);
    end
  end
  if spellMiddle and strlower(spellMiddle)~=strlower(HEALBOT_DISABLED_TARGET) and strlower(spellMiddle)~=strlower(HEALBOT_ASSIST) and strlower(spellMiddle)~=strlower(HEALBOT_FOCUS) then
    x=GetMacroIndexByName(spellMiddle)
	if x==0 then spellMiddle, spellMiddleShow = HealBot_Tooltip_GetHealSpell(unit,spellMiddle,uName) end
  end
  if spellRight and strlower(spellRight)~=strlower(HEALBOT_DISABLED_TARGET) and strlower(spellRight)~=strlower(HEALBOT_ASSIST) and strlower(spellRight)~=strlower(HEALBOT_FOCUS) then
    x=GetMacroIndexByName(spellRight)
    if x==0 then spellRight, spellRightShow = HealBot_Tooltip_GetHealSpell(unit,spellRight,uName) end
  end
  if spellButton4 and strlower(spellButton4)~=strlower(HEALBOT_DISABLED_TARGET) and strlower(spellButton4)~=strlower(HEALBOT_ASSIST) and strlower(spellButton4)~=strlower(HEALBOT_FOCUS) then
    x=GetMacroIndexByName(spellButton4)
    if x==0 then spellButton4, spellButton4Show = HealBot_Tooltip_GetHealSpell(unit,spellButton4,uName) end
  end
  if spellButton5 and strlower(spellButton5)~=strlower(HEALBOT_DISABLED_TARGET) and strlower(spellButton5)~=strlower(HEALBOT_ASSIST) and strlower(spellButton5)~=strlower(HEALBOT_FOCUS) then
    x=GetMacroIndexByName(spellButton5)
    if x==0 then spellButton5, spellButton5Show = HealBot_Tooltip_GetHealSpell(unit,spellButton5,uName) end
  end
  
  HealBot_Tooltip_ClearLines();
    
  if HealBot_Config.Tooltip_ShowTarget==1 then
    if uName then
	  r,g,b=HealBot_Action_RetHealBot_ClassCol(unit, uName)
      if UnitClass(unit) then
	    if UnitName("target") and UnitName("target")==uName and HealBot_UnitSpec[uName]==" " and UnitInRange("target") == 1 then
		  NotifyInspect("target")
		end
		text = HealBot_UnitSpec[uName] or " "
        HealBot_Tooltip_SetLineLeft(uName,r,g,b,linenum,1)
        HealBot_Tooltip_SetLineRight("Level "..UnitLevel(unit)..text..UnitClass(unit),r,g,b,linenum,1) 		
      else 
        HealBot_Tooltip_SetLineLeft(uName,r,g,b,linenum,1)   
      end      
	  
      zone=nil;
      if HealBot_PlayerName==uName or UnitIsVisible(unit) then
        zone=GetRealZoneText();
      elseif GetNumRaidMembers()>0 and unit~="target" then
        if strsub(unit,1,4)~="raid" then
          if UnitInRaid(unit) then
            for r=1,40 do
              if UnitName("raid"..r)==uName then
                raidID=r
                _, _, _, _, _, _, zone, _, _ = GetRaidRosterInfo(raidID);
                do break end;
              end
            end
          end
        elseif strsub(unit,1,7)~="raidpet" then
          raidID=tonumber(strsub(unit,5))
          _, _, _, _, _, _, zone, _, _ = GetRaidRosterInfo(raidID);
        end
      else
        HealBot_TooltipInit();
        HealBot_ScanTooltip:SetUnit(unit)
        zone = HealBot_ScanTooltipTextLeft3:GetText()
        if zone == "PvP" then
          zone = HealBot_ScanTooltipTextLeft4:GetText()
        end
      end
      linenum=linenum+1
      if zone and not strfind(zone,"Level") then
 --       HealBot_Tooltip_SetLineLeft(HEALBOT_TOOLTIP_LOCATION..":",1,1,0.5,linenum,1);
        if UnitOffline then -- added by Diacono
    	  HealBot_Tooltip_SetLineLeft(HB_TOOLTIP_OFFLINE..": "..UnitOffline,1,1,1,linenum,1)
        else
		  if zone==HB_TOOLTIP_OFFLINE then HealBot_Action_UnitIsOffline(unit,uName,time()) end
		  HealBot_Tooltip_SetLineLeft(zone,1,1,1,linenum,1);
        end
	  elseif UnitOffline then
		HealBot_Tooltip_SetLineLeft(HB_TOOLTIP_OFFLINE..": "..UnitOffline,1,1,1,linenum,1)
      end
      if hlth and maxhlth then
        r,g,b,a=HealBot_HealthColor(unit,hlth,maxhlth,true,uName,false,uBuff,DebuffType,HealBot_RetHealsIn(uName));
        HealBot_Tooltip_SetLineRight(hlth.."/"..maxhlth.." (-"..maxhlth-hlth..")",r,g,b,linenum,1)
      end
      if DebuffType then
        linenum=linenum+1
        HealBot_Tooltip_SetLineLeft(uName.." suffers from "..HealBot_UnitDebuff[uName.."_debuff_name"],
                                           HealBot_Config.CDCBarColour[DebuffType].R+0.2,
                                           HealBot_Config.CDCBarColour[DebuffType].G+0.2,
                                           HealBot_Config.CDCBarColour[DebuffType].B+0.2,
                                           linenum,1)
        HealBot_Tooltip_SetLineRight(" ",0,0,0,linenum,0)
      end
	  linenum=linenum+1
      if uBuff then
        linenum=linenum+1
		br,bg,bb=HealBot_Options_RetBuffRGB(uBuff)
        HealBot_Tooltip_SetLineLeft("  Requires "..uBuff,br,bg,bb,linenum,1)
		HealBot_Tooltip_SetLineRight(" ",0,0,0,linenum,0)
      end
	  if HealBot_Config.Tooltip_ShowMyBuffs==1 then
	    d=false
        for x,y in pairs(HealBot_CheckBuffs) do
		  z=HealBot_RetMyBuffTime(uName,x)
          if z then
		    d=true
			z=z-GetTime()
			mins,secs=HealBot_Tooltip_ReturnMinsSecs(z)
            linenum=linenum+1
		    br,bg,bb=HealBot_Options_RetBuffRGB(y)
			if mins>0 then 
              HealBot_Tooltip_SetLineLeft("    "..x.."  "..mins..":"..secs.." mins",br,bg,bb,linenum,1)
			  HealBot_Tooltip_SetLineRight(" ",0,0,0,linenum,0)
			elseif tonumber(secs)>=0 and mins==0 then
			  HealBot_Tooltip_SetLineLeft("    "..x.."  "..secs.." secs",br,bg,bb,linenum,1)
			  HealBot_Tooltip_SetLineRight(" ",0,0,0,linenum,0)
			else
			  linenum=linenum-1
			  HealBot_Queue_MyBuffsCheck(uName,unit)
			  HealBot_AddDebug("Tooltip - Found debuff <1 buff="..x)
			end
		  end
        end
	  end
      if d then linenum=linenum+1 end
      if HealBot_Config.ProtectPvP==1 and UnitIsPVP(unit) and not UnitIsPVP("player") then 
        HealBot_Tooltip_SetLineLeft("    ----- PVP -----",1,0.5,0.5,linenum,1);
        HealBot_Tooltip_SetLineRight("----- PVP -----    ",1,0.5,0.5,linenum,1);
		linenum=linenum+1;
	  end
    end
  else
    HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_TAB_SPELLS,1,1,1,linenum,1)
	HealBot_Tooltip_SetLineRight(" ",0,0,0,linenum,0)
  end
  
  spellLeftRecInstant=false;
  spellMiddleRecInstant=false;
  spellRightRecInstant=false;
  spellButton4RecInstant=false;
  spellButton5RecInstant=false;
  
  if spellLeft=="" then spellLeft=nil; end
  if spellMiddle=="" then spellMiddle=nil; end
  if spellRight=="" then spellRight=nil; end
  if spellButton4=="" then spellButton4=nil; end
  if spellButton5=="" then spellButton5=nil; end
    
    if HealBot_Config.Tooltip_ShowSpellDetail==1 then

      if spellLeft then
        linenum=linenum+1
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONLEFT.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellLeftShow,1,1,0,linenum,1) 
        HealBot_Tooltip_SpellInfo(spellLeft);
        spellLeftRecInstant=HealBot_Tooltip_CheckForInstant(unit,spellLeft)
        linenum=linenum+1;
      end
      if spellMiddle then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONMIDDLE.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellMiddleShow,1,1,0,linenum,1) 
        HealBot_Tooltip_SpellInfo(spellMiddle);
        spellMiddleRecInstant=HealBot_Tooltip_CheckForInstant(unit,spellMiddle)
        linenum=linenum+1;
      end
      if spellRight then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONRIGHT.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellRightShow,1,1,0,linenum,1) 
        HealBot_Tooltip_SpellInfo(spellRight);
        spellRightRecInstant=HealBot_Tooltip_CheckForInstant(unit,spellRight)
        linenum=linenum+1;
      end
      if spellButton4 then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON4.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellButton4Show,1,1,0,linenum,1) 
        HealBot_Tooltip_SpellInfo(spellButton4);
        spellButton4RecInstant=HealBot_Tooltip_CheckForInstant(unit,spellButton4)
        linenum=linenum+1;
      end
      if spellButton5 then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON5.." "..HEALBOT_OPTIONS_COMBOBUTTON..": "..spellButton5Show,1,1,0,linenum,1) 
        HealBot_Tooltip_SpellInfo(spellButton5);
        spellButton5RecInstant=HealBot_Tooltip_CheckForInstant(unit,spellButton5);
        linenum=linenum+1;
      end
    else
      hlthdelta=maxhlth-hlth;
      spellLeftTxt, spellLeftHeal="",0
      spellMiddleTxt, spellMiddleHeal="",0
      spellRightTxt, spellRightHeal="",0
      spellButton4Txt, spellButton4Heal="",0
      spellButton5Txt, spellButton5Heal="",0
      tmpnum=0;
      if spellLeft then 
        spellLeftTxt, spellLeftHeal=HealBot_Tooltip_SpellSummary(spellLeft);
        r,g,b,a,spellLeftRecInstant,spellLeftHeal=HealBot_Tooltip_SetQuickTipsColours(spellLeftHeal,hlthdelta,unit,spellLeft)
        linenum=linenum+1
        HealBot_Tooltip_SetLineRight(spellLeftTxt,r,g,b,linenum,a) 
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONLEFT..": "..spellLeftShow,1,1,0,linenum,a) 
      end
      if spellMiddle then
        spellMiddleTxt, spellMiddleHeal=HealBot_Tooltip_SpellSummary(spellMiddle);
        r,g,b,a,spellMiddleRecInstant,spellMiddleHeal=HealBot_Tooltip_SetQuickTipsColours(spellMiddleHeal,hlthdelta,unit,spellMiddle)
        linenum=linenum+1
        HealBot_Tooltip_SetLineRight(HealBot_Tooltip_SpellSummary(spellMiddle),r,g,b,linenum,a) 
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONMIDDLE..": "..spellMiddleShow,1,1,0,linenum,a) 
      end
      if spellRight then
        spellRightTxt, spellRightHeal=HealBot_Tooltip_SpellSummary(spellRight);
        r,g,b,a,spellRightRecInstant,spellRightHeal=HealBot_Tooltip_SetQuickTipsColours(spellRightHeal,hlthdelta,unit,spellRight)
        linenum=linenum+1
        HealBot_Tooltip_SetLineRight(HealBot_Tooltip_SpellSummary(spellRight),r,g,b,linenum,a) 
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTONRIGHT..": "..spellRightShow,1,1,0,linenum,a) 
      end
      if spellButton4 then
        spellButton4Txt, spellButton4Heal=HealBot_Tooltip_SpellSummary(spellButton4);
        r,g,b,a,spellButton4RecInstant,spellButton4Heal=HealBot_Tooltip_SetQuickTipsColours(spellButton4Heal,hlthdelta,unit,spellButton4)
        linenum=linenum+1
        HealBot_Tooltip_SetLineRight(HealBot_Tooltip_SpellSummary(spellButton4),r,g,b,linenum,a) 
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON4..": "..spellButton4Show,1,1,0,linenum,a) 
      end
      if spellButton5 then
        spellButton5Txt, spellButton5Heal=HealBot_Tooltip_SpellSummary(spellButton5);
        r,g,b,a,spellButton5RecInstant,spellButton5Heal=HealBot_Tooltip_SetQuickTipsColours(spellButton5Heal,hlthdelta,unit,spellButton5)
        linenum=linenum+1
        HealBot_Tooltip_SetLineRight(HealBot_Tooltip_SpellSummary(spellButton5),r,g,b,linenum,a) 
        HealBot_Tooltip_SetLineLeft(HEALBOT_OPTIONS_BUTTON5..": "..spellButton5Show,1,1,0,linenum,a) 
      end
    end      
    if HealBot_Config.Tooltip_Recommend==1 then
      Instant_check=false;
      if HealBot_Config.Tooltip_ShowSpellDetail==0 then linenum=linenum+1; end
      linenum=linenum+1
      HealBot_Tooltip_SetLineLeft(HEALBOT_TOOLTIP_RECOMMENDTEXT,0.8,0.8,0,linenum,1) 
      if spellLeftRecInstant then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft("   "..HEALBOT_OPTIONS_BUTTONLEFT..":",1,1,0.2,linenum,1);
        HealBot_Tooltip_SetLineRight(spellLeftShow.."    ",1,1,1,linenum,1);
        Instant_check=true;
      end
      if spellMiddleRecInstant then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft("   "..HEALBOT_OPTIONS_BUTTONMIDDLE..":",1,1,0.2,linenum,1);
        HealBot_Tooltip_SetLineRight(spellMiddleShow.."    ",1,1,1,linenum,1);
        Instant_check=true;
      end
      if spellRightRecInstant then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft("   "..HEALBOT_OPTIONS_BUTTONRIGHT..":",1,1,0.2,linenum,1);
        HealBot_Tooltip_SetLineRight(spellRightShow.."    ",1,1,1,linenum,1);
        Instant_check=true;
      end
      if spellButton4RecInstant then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft("   "..HEALBOT_OPTIONS_BUTTON4..":",1,1,0.2,linenum,1);
        HealBot_Tooltip_SetLineRight(spellButton4Show.."    ",1,1,1,linenum,1);
        Instant_check=true;
      end
      if spellButton5RecInstant then
        linenum=linenum+1;
        HealBot_Tooltip_SetLineLeft("   "..HEALBOT_OPTIONS_BUTTON5..":",1,1,0.2,linenum,1);
        HealBot_Tooltip_SetLineRight(spellButton5Show.."    ",1,1,1,linenum,1);
        Instant_check=true;
      end
      if not Instant_check then
        linenum=linenum+1
        HealBot_Tooltip_SetLineLeft("  None",0.4,0.4,0.4,linenum,1) 
      end
    else
      if HealBot_Config.Tooltip_ShowSpellDetail==1 then linenum=linenum-1; end
    end
  
    HealBot_ToolTip_PreDefined(uName)
  
    height = 20 
    width = 0
    for x = 1, linenum do
      txtL = getglobal("HealBot_TooltipTextL" .. x)
      txtR = getglobal("HealBot_TooltipTextR" .. x)
      height = height + txtL:GetHeight() + 2
      if (txtL:GetWidth() + txtR:GetWidth() + 25 > width) then
        width = txtL:GetWidth() + txtR:GetWidth() + 25
      end
    end
    HealBot_ToolTip_SetTooltipPos();
    HealBot_Tooltip:SetWidth(width)
    HealBot_Tooltip:SetHeight(height)
    HealBot_Tooltip:Show();
end

local innerFocus
function HealBot_Tooltip_SpellInfo(spellName)
  text=nil
  innerFocus=HealBot_retInnerFocus()
  if HealBot_Spells[spellName] then
    if HealBot_Spells[spellName].HealsDur>0 then
      linenum=linenum+1
      HealBot_Tooltip_SetLineLeft(HEALBOT_WORDS_CAST..": "..HealBot_Spells[spellName].CastTime.." "..HEALBOT_WORDS_SEC..".",0.8,0.8,0.8,linenum,1)
      if innerFocus then
        HealBot_Tooltip_SetLineRight("Mana: 0",0.5,0.5,1,linenum,1) 
      else
        HealBot_Tooltip_SetLineRight("Mana: "..HealBot_Spells[spellName].Mana,0.5,0.5,1,linenum,1) 
      end
      if HealBot_Spells[spellName].HealsMax>0 then
        Heals = HEALBOT_HEAL.." "
        if HealBot_Spells[spellName].Shield then
          Heals = HEALBOT_TOOLTIP_SHIELD.." "
          text=Heals..format("%d", HealBot_Spells[spellName].HealsMax)
        else
          if HealBot_Spells[spellName].HealsMin<HealBot_Spells[spellName].HealsMax then
            text=Heals..format("%d", HealBot_Spells[spellName].HealsMin + HealBot_Spells[spellName].RealHealing) .." "..HEALBOT_WORDS_TO.." "..format("%d",HealBot_Spells[spellName].HealsMax + HealBot_Spells[spellName].RealHealing)
          else
            text=Heals..format("%d", HealBot_Spells[spellName].HealsMax + HealBot_Spells[spellName].RealHealing)
          end
        end
        linenum=linenum+1
        HealBot_Tooltip_SetLineLeft(text,1,1,1,linenum,1)
      end
      if HealBot_Spells[spellName].HealsExt>0 then
        text=HEALBOT_HEAL.." "..HealBot_Spells[spellName].HealsDur.." "..HEALBOT_WORDS_OVER.." "..HealBot_Spells[spellName].Duration-HealBot_Spells[spellName].CastTime.." sec."
        linenum=linenum+1
        HealBot_Tooltip_SetLineLeft(text,1,1,1,linenum,1)
      end
      if not HealBot_Spells[spellName].Shield then
        text=HEALBOT_TOOLTIP_ITEMBONUS.." +"..GetSpellBonusHealing().." | "..HEALBOT_TOOLTIP_ACTUALBONUS.." +"..HealBot_Spells[spellName].RealHealing.." "
        linenum=linenum+1
        HealBot_Tooltip_SetLineLeft(text,0.8,0.8,0.8,linenum,1)
      end
    end
  elseif HealBot_OtherSpells[spellName] then
    linenum=linenum+1
    HealBot_Tooltip_SetLineLeft(HEALBOT_WORDS_CAST..": "..HealBot_OtherSpells[spellName].CastTime.." "..HEALBOT_WORDS_SEC..".",0.8,0.8,0.8,linenum,1) 
    HealBot_Tooltip_SetLineRight("Mana: "..HealBot_OtherSpells[spellName].Mana,0.5,0.5,1,linenum,1)    
  end
end

function HealBot_Tooltip_SpellSummary(spellName)
  ret_val, ret_heal = "  ", 0
  if HealBot_Spells[spellName] then
    if HealBot_Spells[spellName].HealsDur>0 then
      if HealBot_Spells[spellName].HealsMax>0 then
        Heals = " "..HEALBOT_HEAL.." "
        if HealBot_Spells[spellName].Shield then
          Heals = " "..HEALBOT_TOOLTIP_SHIELD.." "
          ret_heal=HealBot_Spells[spellName].HealsMax
          ret_val=ret_val..Heals..format("%d", ret_heal)
          ret_heal=0-ret_heal
        else
          if HealBot_Spells[spellName].HealsMin<HealBot_Spells[spellName].HealsMax then
            ret_heal=((HealBot_Spells[spellName].HealsMin+HealBot_Spells[spellName].HealsMax)/2) + HealBot_Spells[spellName].RealHealing
          else
            ret_heal=HealBot_Spells[spellName].HealsMax + HealBot_Spells[spellName].RealHealing
          end
          ret_val=ret_val..Heals..format("%d", ret_heal)
        end
      end
      if HealBot_Spells[spellName].HealsExt>0 then
        ret_heal=HealBot_Spells[spellName].HealsDur;
        ret_val=ret_val.." HoT "..format("%d", ret_heal);
        ret_heal=0-ret_heal;
      end
--      ret_val=ret_val.." "..HEALBOT_WORDS_FOR.." "..HealBot_Spells[spellName].Mana.." Mana";
    end
  elseif HealBot_OtherSpells[spellName] then
    innerFocus=HealBot_retInnerFocus()
    if innerFocus then
      ret_val = " -   0 Mana"
    else
      ret_val = " -  "..HealBot_OtherSpells[spellName].Mana.." Mana"
    end
  else
    ret_heal=-1;
  end
  if strlen(ret_val)<5 then ret_val = " - "..spellName; end
  return ret_val,ret_heal;
end

function HealBot_Tooltip_CheckForInstant(unit,spellName)
  if HealBot_Spells[spellName] then
    if HealBot_Spells[spellName].Buff then
      if HealBot_HasMyBuff(HealBot_Spells[spellName].Buff,unit) then return false end;  
      return true;
    end
  end
  return false;
end

function HealBot_Tooltip_SetQuickTipsColours(healval,hlthdelta,unit,spellName)
  r,g,b,a,ri=0.5,0.5,1,1,false;
  ri=HealBot_Tooltip_CheckForInstant(unit,spellName)
  if healval==-1 then
--    r, g, b=0.58,0.58,1;
  elseif healval>0 then
    if healval>hlthdelta then
      tmpnum=(healval-hlthdelta);
      a=(hlthdelta-tmpnum)/(hlthdelta+1);
    else
      a=((healval)/(hlthdelta+1))*1.35;
    end
  elseif healval==0 then
--    r, g, b=0.8,1,0.2;
  else
    healval=0-healval;
    if (healval*.72)>hlthdelta then
      tmpnum=((healval)-hlthdelta);
      a=((hlthdelta-tmpnum)/(hlthdelta+1))*1.35;
    else
      A=(healval/(hlthdelta+1))*1.5;
    end
    if not ri then
      a=0.4
    end
  end
  if a<0.4 then 
    a=0.4;
  elseif a>1 then 
    a=1;
  end
  return r,g,b,a,ri,healval;
end

function HealBot_Action_RefreshTargetTooltip(unitName, unit)
  HealBot_TooltipInit();
  HealBot_Tooltip_ClearLines();
  linenum=1
  r,g,b=HealBot_Action_RetHealBot_ClassCol(unit, unitName)
  HealBot_Tooltip_SetLineLeft(unitName,r,g,b,linenum,1)
  if UnitClass(unit) then
    text = HealBot_UnitSpec[unitName] or " "
    HealBot_Tooltip_SetLineRight(" Level "..UnitLevel(unit)..text..UnitClass(unit),r,g,b,linenum,1);
  end
  linenum=linenum+1
  HealBot_Tooltip_SetLineLeft(HEALBOT_TOOLTIP_TARGETBAR,1,1,0.5,linenum,1);
  HealBot_Tooltip_SetLineRight(HEALBOT_OPTIONS_TAB_SPELLS.." "..HEALBOT_SKIN_DISTEXT,1,1,0.5,linenum,1);
  linenum=linenum+2
  
  if HealBot_Config.SmartCast==1 then
    HealBot_Tooltip_SetLineLeft(" "..HEALBOT_OPTIONS_BUTTONLEFT..":",1,1,0.2,linenum,1)
    HealBot_Tooltip_SetLineRight(HEALBOT_TITAN_SMARTCAST.." ",1,1,1,linenum,1);
  end
  if HealBot_UnitID[unitName] then
    linenum=linenum+1
    HealBot_Tooltip_SetLineLeft(" "..HEALBOT_OPTIONS_BUTTONRIGHT..":",1,1,0.2,linenum,1)
    if HealBot_Panel_RetMyHealTarget(unitName) then
      HealBot_Tooltip_SetLineRight(HEALBOT_WORDS_REMOVEFROM.." "..HEALBOT_OPTIONS_TARGETHEALS.." ",1,1,1,linenum,1);
    else
      HealBot_Tooltip_SetLineRight(HEALBOT_WORDS_ADDTO.." "..HEALBOT_OPTIONS_TARGETHEALS.." ",1,1,1,linenum,1);
    end
  end
  
    height = 20 
    width = 0
    for x = 1, linenum do
      txtL = getglobal("HealBot_TooltipTextL" .. x)
      txtR = getglobal("HealBot_TooltipTextR" .. x)
      height = height + txtL:GetHeight() + 2
      if (txtL:GetWidth() + txtR:GetWidth() + 25 > width) then
        width = txtL:GetWidth() + txtR:GetWidth() + 25
      end
    end
    HealBot_ToolTip_SetTooltipPos();
    HealBot_Tooltip:SetWidth(width)
    HealBot_Tooltip:SetHeight(height)
    HealBot_Tooltip:Show();
end

function HealBot_ToolTip_PreDefined(unitName)
  if HealBot_Config.Tooltip_PreDefined==1 then
    linenum=linenum+2
    HealBot_Tooltip_SetLineLeft("   "..HEALBOT_OPTIONS_CTRL.."+"..HEALBOT_OPTIONS_ALT.."+"..HEALBOT_OPTIONS_BUTTONLEFT..":",1,1,0.2,linenum,1)
    if HealBot_Action_RetMyTarget(unitName) then
      HealBot_Tooltip_SetLineRight(HEALBOT_SKIN_DISTEXT.."    ",1,1,1,linenum,1)
    else
      HealBot_Tooltip_SetLineRight(HEALBOT_SKIN_ENTEXT.."    ",1,1,1,linenum,1)
    end
  
    linenum=linenum+1
    HealBot_Tooltip_SetLineLeft("   "..HEALBOT_OPTIONS_CTRL.."+"..HEALBOT_OPTIONS_ALT.."+"..HEALBOT_OPTIONS_BUTTONMIDDLE..":",1,1,0.2,linenum,1)
    HealBot_Tooltip_SetLineRight(HEALBOT_PANEL_BLACKLIST.."    ",1,1,1,linenum,1)

    linenum=linenum+1
    HealBot_Tooltip_SetLineLeft("   "..HEALBOT_OPTIONS_CTRL.."+"..HEALBOT_OPTIONS_ALT.."+"..HEALBOT_OPTIONS_BUTTONRIGHT..":",1,1,0.2,linenum,1)
    if HealBot_Panel_RetMyHealTarget(unitName) then
      HealBot_Tooltip_SetLineRight(HEALBOT_WORDS_REMOVEFROM.." "..HEALBOT_OPTIONS_TARGETHEALS.."    ",1,1,1,linenum,1)
    else
      HealBot_Tooltip_SetLineRight(HEALBOT_WORDS_ADDTO.." "..HEALBOT_OPTIONS_TARGETHEALS.."    ",1,1,1,linenum,1)
    end
  end

end

function HealBot_ToolTip_SetTooltipPos()
    HealBot_Tooltip:ClearAllPoints();
    if HealBot_Config.TooltipPos>1 then
      top = HealBot_Action:GetTop();
      x, y = GetCursorPosition();
      x=x/UIParent:GetScale();
      y=y/UIParent:GetScale();
      if HealBot_Config.TooltipPos==2 then
        HealBot_Tooltip:SetPoint("TOPRIGHT","HealBot_Action","TOPLEFT",0,0-(top-(y+35)));
      elseif HealBot_Config.TooltipPos==3 then
        HealBot_Tooltip:SetPoint("TOPLEFT","HealBot_Action","TOPRIGHT",0,0-(top-(y+35)));
      elseif HealBot_Config.TooltipPos==4 then
        HealBot_Tooltip:SetPoint("BOTTOM","HealBot_Action","TOP",0,0);
      elseif HealBot_Config.TooltipPos==5 then
        HealBot_Tooltip:SetPoint("TOP","HealBot_Action","BOTTOM",0,0);
      else
        HealBot_Tooltip:SetPoint("TOPLEFT","WorldFrame","BOTTOMLEFT",x+25,y-20);
      end
    else
      HealBot_Tooltip:SetPoint("BOTTOMRIGHT","WorldFrame","BOTTOMRIGHT",-105,105);
    end
end

function HealBot_Tooltip_SetLineLeft(Text,R,G,B,lNo,a)
  if lNo>40 then return end
  txtL = getglobal("HealBot_TooltipTextL" .. lNo)
  txtL:SetTextColor(R,G,B,a)
  txtL:SetText(Text)
  txtL:Show()
  HealBot_Tooltip_DirtyLines[lNo]=true
end

function HealBot_Tooltip_SetLineRight(Text,R,G,B,lNo,a)
  if lNo>40 then return end
  txtR = getglobal("HealBot_TooltipTextR" .. lNo)
  txtR:SetTextColor(R,G,B,a)
  txtR:SetText(Text)
  txtR:Show()
  HealBot_Tooltip_DirtyLines[lNo]=true
end

function HealBot_Tooltip_ClearLines()
  for x,_ in pairs(HealBot_Tooltip_DirtyLines) do
    txtR = getglobal("HealBot_TooltipTextR" .. x)
    txtR:SetText(" ")
    txtL = getglobal("HealBot_TooltipTextL" .. x)
    txtL:SetText(" ")
	HealBot_Tooltip_DirtyLines[x]=nil
  end
end

local timeOffline,uOffline = nil,nil
local hours, minutes, seconds
function HealBot_Action_GetTimeOffline(unitName)
  uOffline=HealBot_Action_retUnitOffline(unitName)
  timeOffline=nil
  if uOffline then
  	timeOffline = time() - uOffline;
  	seconds = timeOffline % 60;
		minutes = math.floor(timeOffline / 60) % 60
		hours = math.floor(timeOffline / 3600)
		timeOffline = "";
		if hours > 0 then
			if hours == 1 then
				timeOffline = hours.." hour ";
			else
				timeOffline = hours.." hours ";
			end
		end
		if minutes > 0 then
			if minutes == 1 then
				timeOffline = timeOffline..minutes.." min ";
			else
				timeOffline = timeOffline..minutes.." mins ";
			end
		end
		if seconds > 0 then
			if seconds == 1 then
				timeOffline = timeOffline..seconds.." sec";
			else
				timeOffline = timeOffline..seconds.." secs";
			end
		end						
	end  	
  return timeOffline;
end

function HealBot_Tooltip_GetHealSpell(unit,pattern,unitName)
 
  if not HealBot_Spells[pattern] then
    id = HealBot_GetSpellId(pattern);
  elseif HealBot_Spells[pattern].id then
    id = HealBot_Spells[pattern].id
  else
    id = HealBot_GetSpellId(pattern);
  end
  sName, sRank = HealBot_GetSpellName(id)
  if not sName then 
    if pattern then
      if unitName~=HealBot_PlayerName then
        if IsItemInRange(pattern,unit)~=1 then
          return nil
        else
          return pattern,pattern;
        end
      else
        w, _ = IsUsableItem(pattern, unit)
        if not w then 
          return nil
        else
          return pattern,pattern;
        end
      end
    else
      return nil
    end
  end

  if sRank then
    sNameRank=sName .. "(" .. sRank .. ")";
  else
    sNameRank=sName
  end
  
  if unitName~=HealBot_PlayerName then
    if sName==HEALBOT_PRAYER_OF_HEALING then
      if UnitInParty(unit) then
        --if UnitInRange(unit)~=1 then return nil end;
      	if HealBot_UnitInRange(HEALBOT_POWER_WORD_FORTITUDE, unit)~=1 then return nil end;
      else
        return nil;
      end
    else
      --if UnitInRange(unit)~=1 then return nil end;
      if HealBot_UnitInRange(sName, unit)~=1 then return nil end;
    end
  end
 
  return sNameRank, sName;
end
