content: 
  
  
  sub init()
      m.title = m.top.findNode("title")
      m.title.text = tr("Loading...")
      m.overview = m.top.findNode("overview")
      m.poster = m.top.findNode("poster")
      m.rating = m.top.findnode("rating")
      m.infoBar = m.top.findnode("infoBar")
      m.progressBackground = m.top.findNode("progressBackground")
      m.progressBar = m.top.findnode("progressBar")
      m.playedIndicator = m.top.findNode("playedIndicator")
      m.checkmark = m.top.findNode("checkmark")
      m.checkmark.font.size = 35
      m.videoCodec = m.top.findNode("video_codec")
  end sub
  
  sub itemContentChanged()
      item = m.top.itemContent
      itemData = item.json
  
      if item.selectedVideoStreamId = "" and isValid(itemData.MediaSources)
          item.selectedVideoStreamId = itemData.MediaSources[0].id
      end if
      if isValid(itemData.indexNumber)
          indexNumber = itemData.indexNumber.toStr() + ". "
      else
          indexNumber = ""
      end if
      m.title.text = indexNumber + item.title
      m.overview.text = item.overview
      if isValid(itemData.PremiereDate)
          airDate = CreateObject("roDateTime")
          airDate.FromISO8601String(itemData.PremiereDate)
          m.top.findNode("aired").text = tr("Aired") + ": " + airDate.AsDateString("short-month-no-weekday")
      end if
      imageUrl = item.posterURL
      if m.global.session.user.settings["ui.tvshows.blurunwatched"] = true
          if itemData.lookup("Type") = "Episode"
              if not itemData.userdata.played
                  imageUrl = imageUrl + "&blur=15"
              end if
          end if
      end if
      m.poster.uri = imageUrl
      if type(itemData.RunTimeTicks) = "roInt" or type(itemData.RunTimeTicks) = "LongInteger"
          runTime = getRuntime()
          if runTime < 2
              m.top.findNode("runtime").text = "1 min"
          else
              m.top.findNode("runtime").text = stri(runTime).trim() + " mins"
          end if
          if m.global.session.user.settings["ui.design.hideclock"] <> true
              m.top.findNode("endtime").text = tr("Ends at %1").Replace("%1", getEndTime())
          end if
      end if
      if m.global.session.user.settings["ui.tvshows.disableCommunityRating"] = false
          if isValid(itemData.communityRating)
              m.top.findNode("star").visible = true
              m.top.findNode("communityRating").text = str(int(itemData.communityRating * 10) / 10)
          else
              m.top.findNode("star").visible = false
          end if
      else
          m.rating.visible = false
          m.infoBar.itemSpacings = [
              20
              -25
              20
              20
          ]
      end if
  
      if isValid(itemData.UserData) and isValid(itemData.UserData.Played) and itemData.UserData.Played = true
          m.playedIndicator.visible = true
      end if
  
      if isValid(itemData.UserData) and isValid(itemData.UserData.PlayedPercentage) and itemData.UserData.PlayedPercentage > 0
          m.progressBackground.width = m.poster.width
          m.progressBackground.visible = true
          progressWidthInPixels = int(m.progressBackground.width * itemData.UserData.PlayedPercentage / 100)
          m.progressBar.width = progressWidthInPixels
          m.progressBar.visible = true
      end if
  
      m.videoCodec.visible = false
      if isValid(itemData.MediaSources)
          for i = 0 to itemData.MediaSources.Count() - 1
              if item.selectedVideoStreamId = itemData.MediaSources[i].id and isValid(itemData.MediaSources[i].MediaStreams[0])
                  m.videoCodec.text = tr("Video") + ": " + itemData.MediaSources[i].MediaStreams[0].DisplayTitle
                  SetupAudioDisplay(itemData.MediaSources[i].MediaStreams, item.selectedAudioStreamIndex)
                  exit for
              end if
          end for
          m.videoCodec.visible = true
          DisplayVideoAvailable(itemData.MediaSources)
      end if
  end sub
  
  
  sub SetupAudioDisplay(mediaStreams as object, selectedAudioStreamIndex as integer)
      audioIdx = invalid
      if isValid(mediaStreams)
          for i = 0 to mediaStreams.Count() - 1
              if LCase(mediaStreams[i].Type) = "audio" and audioIdx = invalid
                  if selectedAudioStreamIndex > 0 and selectedAudioStreamIndex < mediaStreams.Count()
                      audioIdx = selectedAudioStreamIndex
                  else
                      audioIdx = i
                  end if
                  m.top.findNode("audio_codec").text = tr("Audio") + ": " + mediaStreams[audioIdx].DisplayTitle
              end if
              if isValid(audioIdx) then
                  exit for
              end if
          end for
      end if
      if isValid(audioIdx)
          m.top.findNode("audio_codec").visible = true
          DisplayAudioAvailable(mediaStreams)
      else
          m.top.findNode("audio_codec").visible = false
      end if
  end sub
  
  
  sub DisplayVideoAvailable(streams as object)
      count = 0
      for i = 0 to streams.Count() - 1
          if LCase(streams[i].VideoType) = "videofile"
              count++
          end if
      end for
      if count > 1
          m.top.findnode("video_codec_count").text = "+" + stri(count - 1).trim()
      end if
  end sub
  
  
  sub DisplayAudioAvailable(streams as object)
      count = 0
      for i = 0 to streams.Count() - 1
          if streams[i].Type = "Audio"
              count++
          end if
      end for
      if count > 1
          m.top.findnode("audio_codec_count").text = "+" + stri(count - 1).trim()
      end if
  end sub
  
  function getRuntime() as integer
      itemData = m.top.itemContent.json
  
  
      return int(itemData.RunTimeTicks / 600000000.0)
  end function
  
  function getEndTime() as string
      itemData = m.top.itemContent.json
      date = CreateObject("roDateTime")
      duration_s = int(itemData.RunTimeTicks / 10000000.0)
      date.fromSeconds(date.asSeconds() + duration_s)
      date.toLocalTime()
      return formatTime(date)
  end function
  
  sub focusChanged()
      if m.top.itemHasFocus = true
  
          if m.global.device.isAudioGuideEnabled = true
              txt2Speech = CreateObject("roTextToSpeech")
              txt2Speech.Flush()
              txt2Speech.Say(m.title.text)
              txt2Speech.Say(m.overview.text)
          end if
      end if
  end sub