summaryrefslogtreecommitdiffstats
path: root/debian/webinterface-default
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:25 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-10 18:07:25 +0000
commitd2c5a3255ca77b59775a54ecb70fabc86335296a (patch)
tree348ae3ff176c7c9c9ebe9624e45a7e12bae61155 /debian/webinterface-default
parentAdding upstream version 2:20.4+dfsg. (diff)
downloadkodi-d2c5a3255ca77b59775a54ecb70fabc86335296a.tar.xz
kodi-d2c5a3255ca77b59775a54ecb70fabc86335296a.zip
Adding debian version 2:20.4+dfsg-1.debian/2%20.4+dfsg-1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'debian/webinterface-default')
-rw-r--r--debian/webinterface-default/addon.xml145
-rw-r--r--debian/webinterface-default/css/core.css794
-rw-r--r--debian/webinterface-default/css/ipad.css9
-rw-r--r--debian/webinterface-default/favicon.icobin0 -> 370070 bytes
-rw-r--r--debian/webinterface-default/icon.pngbin0 -> 6129 bytes
-rw-r--r--debian/webinterface-default/images/DefaultAlbumCover.pngbin0 -> 46672 bytes
-rw-r--r--debian/webinterface-default/images/DefaultVideo.pngbin0 -> 44464 bytes
-rw-r--r--debian/webinterface-default/images/ajax-loader.gifbin0 -> 4782 bytes
-rw-r--r--debian/webinterface-default/images/close-button.pngbin0 -> 1649 bytes
-rwxr-xr-xdebian/webinterface-default/images/remote.jpgbin0 -> 44656 bytes
-rwxr-xr-xdebian/webinterface-default/index.html73
-rwxr-xr-xdebian/webinterface-default/js/MediaLibrary.js1420
-rwxr-xr-xdebian/webinterface-default/js/NowPlayingManager.js661
-rw-r--r--debian/webinterface-default/js/json2.js492
-rw-r--r--debian/webinterface-default/js/xbmc.core.js90
-rw-r--r--debian/webinterface-default/js/xbmc.init.js27
-rw-r--r--debian/webinterface-default/js/xbmc.launcher.js46
-rw-r--r--debian/webinterface-default/js/xbmc.rpc.js49
18 files changed, 3806 insertions, 0 deletions
diff --git a/debian/webinterface-default/addon.xml b/debian/webinterface-default/addon.xml
new file mode 100644
index 0000000..e61262a
--- /dev/null
+++ b/debian/webinterface-default/addon.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<addon
+ id="webinterface.default"
+ version="2.2.33"
+ name="Default webinterface"
+ provider-name="Team Kodi">
+ <requires>
+ <import addon="xbmc.json" version="6.0.0"/>
+ </requires>
+ <extension
+ point="xbmc.webinterface"/>
+ <extension point="xbmc.addon.metadata">
+ <summary lang="af_ZA">Span Kodi Web Koppelvlak. (Kodi se verstek web koppelvlak)</summary>
+ <summary lang="am_ET">የ Kodi የዌብ ገጽታዎች (የ Kodi ነባር የዌብ ገጽታዎች)</summary>
+ <summary lang="ar_SA">واجهه فريق إكس بي إم سي للشبكة العنكبوتية (واجهه الشبكة العنكبوتية المبدئية لـ إكس بي إم سي)</summary>
+ <summary lang="be_BY">Team Kodi Web Interface. (Kodi's default web interface)</summary>
+ <summary lang="bg_BG">Уеб интерфейс на Team Kodi. (стандартният уеб интерфейс на Kodi)</summary>
+ <summary lang="ca_ES">Interfície web de l'equip Kodi. (la interfície web per defecte del Kodi)</summary>
+ <summary lang="cs_CZ">Webové rozhraní týmu Kodi (Výchozí webové rozhraní Kodi).</summary>
+ <summary lang="cy_GB">Rhyngwyneb Gwe Team Kodi (Rhyngwyneb gwe rhagosodedig Kodi)</summary>
+ <summary lang="da_DK">Team Kodi Web-grænseflade. (Kodi's standard webgrænseflade)</summary>
+ <summary lang="de_DE">Team Kodi Webinterface. (Standardwebinterface von Kodi)</summary>
+ <summary lang="el_GR">Διεπαφή Ιστού της Team Kodi. (Προεπιλεγμένη διεπαφή ιστού του Kodi)</summary>
+ <summary lang="en_AU">Team Kodi Web Interface. (Kodi's default web interface)</summary>
+ <summary lang="en_GB">Team Kodi Web Interface. (Kodi's default web interface)</summary>
+ <summary lang="en_NZ">Team Kodi Web Interface. (Kodi's default web interface)</summary>
+ <summary lang="en_US">Team Kodi Web Interface. (Kodi's default web interface)</summary>
+ <summary lang="es_AR">Interfaz Web del Equipo de Kodi. (Interfaz web por defecto de Kodi)</summary>
+ <summary lang="es_ES">Interfaz web de Kodi. (Interfaz web por defecto de Kodi)</summary>
+ <summary lang="es_MX">Interfaz Web del Equipo de Kodi (Interfaz Web por defecto de Kodi)</summary>
+ <summary lang="et_EE">Kodi meeskonna veebikeskkond. (Vaikimisi keskkond)</summary>
+ <summary lang="eu_ES">Kodi taldean Web Interfazea. (Kodi-ren lehenetsiriko web interfazea)</summary>
+ <summary lang="fa_AF">نمایه وب تیم Kodi.(رابط پیش فرض Kodi)</summary>
+ <summary lang="fa_IR">رابط وب تیم Kodi. (رابط وب استاندارد Kodi)</summary>
+ <summary lang="fi_FI">Team Kodin web-käyttöliittymä. (Kodin oletus-web-käyttöliittymä)</summary>
+ <summary lang="fr_CA">Interface Web de l'équipe Kodi. (Interface Web par défaut de Kodi)</summary>
+ <summary lang="fr_FR">Interface Web de l'Équipe Kodi (interface d'origine de Kodi)</summary>
+ <summary lang="gl_ES">Interface web da equipa de Kodi. (Interface web predefinida de Kodi)</summary>
+ <summary lang="he_IL">ממשק הדפדפן הרשמי של Kodi. (ברירת המחדל)</summary>
+ <summary lang="hr_HR">Tim Kodi Web sučelje. (Kodijevo uobičajeno web sučelje)</summary>
+ <summary lang="hu_HU">Az Kodi csapat Webes kezelőfelülete (Kodi alapértelmezett webes kezelőfelülete)</summary>
+ <summary lang="id_ID">Antar Muka Web Tim Kodi. (Antar muka web bawaan Kodi)</summary>
+ <summary lang="is_IS">Team Kodi Vefviðmót. (Sjálfgefið vefviðmót á Kodi)</summary>
+ <summary lang="it_IT">Interfaccia Web del Team Kodi. (Interfaccia web di default per Kodi)</summary>
+ <summary lang="ja_JP">Team Kodi Web Interface. (Kodi's default web interface)</summary>
+ <summary lang="ko_KR">Team Kodi 웹 인터페이스. (Kodi 기본 웹 인터페이스)</summary>
+ <summary lang="lt_LT">Komandos Kodi Web sąsaja.(Kodi numatytoji žiniatinklio sąsaja)</summary>
+ <summary lang="lv_LV">Team Kodi tīmekļa saskarne. (Kodi noklusētā tīmekļa saskarne)</summary>
+ <summary lang="mk_MK">Веб интерфејс на Kodi тимот. (Kodi's подразбирачки веб интерфејс)</summary>
+ <summary lang="mn_MN">Kodi багийн вэб интерфэйс. (Kodi-ийн үндсэн вэб интерфэйс)</summary>
+ <summary lang="ms_MY">Antaramuka Sesawang Pasukan-Kodi (antaramuka sesawang lalai Kodi) </summary>
+ <summary lang="mt_MT">Web interface ta' Team Kodi. (Il-Web interface normali ta' Kodi)</summary>
+ <summary lang="my_MM">Team Kodi ဝက်ဘ် အသွင်အပြင် (Kodi ၏ မူရင် ဝက်ဘ် အသွင်အပြင်)</summary>
+ <summary lang="nb_NO">Team Kodi nettgrensesnitt. (Kodis standard nettgrensesnitt)</summary>
+ <summary lang="nl_NL">Team Kodi Webinterface. (Kodi's standaard webinterface)</summary>
+ <summary lang="pl_PL">Interfejs webowy Kodi. (Domyślny)</summary>
+ <summary lang="pt_BR">Interface Web da Equipe Kodi. (interface web padrão do Kodi)</summary>
+ <summary lang="pt_PT">Interface da Web da Team Kodi. (Interface da Web predefinida do Kodi)</summary>
+ <summary lang="ro_RO">Interfață web Kodi. (interfață web implicită pentru Kodi)</summary>
+ <summary lang="ru_RU">Веб-интерфейс от разработчиков Kodi (веб-интерфейс Kodi по умолчанию).</summary>
+ <summary lang="sk_SK">Webové rozhranie tímu Kodi. (predvolené webové rozhranie pre Kodi)</summary>
+ <summary lang="sl_SI">Spletni vmesnik ekipe Kodi. (Privzet spletni vmesnik za Kodi)</summary>
+ <summary lang="sr_RS">Web интерфејс Kodi Тима (подразуевани web интерфејс Kodi-jа)</summary>
+ <summary lang="sr_RS@latin">Web interfejs Kodi Tima (podrazuevani web interfejs Kodija)</summary>
+ <summary lang="sv_SE">Team Kodi webbgränsnitt. (Kodi's standardwebbgränssnitt)</summary>
+ <summary lang="szl">Webowy interfejs ôd Team Kodi (wychodny webowy interface we Kodi).</summary>
+ <summary lang="ta_IN">கோடி குழுமத்தின் இணைய இடைமுகம். (கோடியின் நிரந்தர இணைய இடைமுகம்)</summary>
+ <summary lang="te_IN">టీమ్-కోడి వెబ్ ఇంటర్ఫేస్. (కోడి యొక్క డిఫాల్ట్ వెబ్ ఇంటర్ఫేస్)</summary>
+ <summary lang="tg_TJ">Интерфейси веби гурӯҳи кории Kodi Web. (Интерфейси веби пешфарз барои Kodi)</summary>
+ <summary lang="th_TH">ทีมส่วนประสานหน้าเว็บ Kodi (ส่วนประสานหน้าเว็บพื้นฐานของ Kodi)</summary>
+ <summary lang="tr_TR">Kodi Takımı Web Arayüzü. (Kodi'nin varsayılan web arayüzü)</summary>
+ <summary lang="uk_UA">Веб-інтерфейс Kodi (Типовий веб-інтерфейс для Kodi)</summary>
+ <summary lang="uz_UZ">Kodi guruhi veb Interfeysi. (Kodi andoza veb interfeysi)</summary>
+ <summary lang="vi_VN">Đội ngũ giao diện Web Kodi. (Giao diện Web mặc định của Kodi)</summary>
+ <summary lang="zh_CN">Kodi 团队开发的 Web 界面。(Kodi 的默认 web 界面)</summary>
+ <summary lang="zh_TW">Kodi團隊網頁介面。(Kodi的預設網頁介面)</summary>
+ <description lang="af_ZA">Verstek web koppelvlak vir Kodi; Ontwerp vir toestelle van alle resolusies</description>
+ <description lang="am_ET">ነባር የዌብ ገጽታዎች ለ Kodi ፡ የተነደፈው ለሁሉም አካላቶች resolutions ነው </description>
+ <description lang="ar_SA">واجهه الشبكة العنكبوتية المبدئية لـ إكس بي إم سي، مُصمَمة لتناسب كافة قياسات أبعاد الشاشات</description>
+ <description lang="be_BY">Стандартны вэб-інтэрфэйс да Kodi; распрацаваны для прыладаў зь любымі разрознасьцямі</description>
+ <description lang="bg_BG">Стандартния уеб интерфейс на Kodi; Направен е за устройства с най-различни резолюции</description>
+ <description lang="ca_ES">Interfície web per defecte del Kodi; Dissenyada per dispositius de totes les resolucions</description>
+ <description lang="cs_CZ">Výchozí webové rozhraní Kodi navržené pro zařízení s libovolným rozlišením</description>
+ <description lang="cy_GB">Rhyngwyneb gwe rhagosodedig Kodi. Wedi ei gynllunio ar gyfer cydraniad pob dyfais</description>
+ <description lang="da_DK">Standard webgrænseflade til Kodi; designet til enheder i alle opløsninger</description>
+ <description lang="de_DE">Standard Kodi Webinterface - Für alle Geräte und Auflösungen geeignet</description>
+ <description lang="el_GR">Προεπιλεγμένη διεπαφή ιστού για το Kodi. Σχεδιασμένη για συσκευές όλων των αναλύσεων.</description>
+ <description lang="en_AU">Default web interface for Kodi; Designed for devices of all resolutions</description>
+ <description lang="en_GB">Default web interface for Kodi; Designed for devices of all resolutions</description>
+ <description lang="en_NZ">Default web interface for Kodi; Designed for devices of all resolutions</description>
+ <description lang="en_US">Default web interface for Kodi; Designed for devices of all resolutions</description>
+ <description lang="es_AR">Interfaz web por defecto de Kodi. Diseñada para dispositivos de cualquier resolución</description>
+ <description lang="es_ES">Interfaz web por defecto de Kodi. Diseñada para dispositivos de cualquier resolución</description>
+ <description lang="es_MX">Interfaz Web por defecto para Kodi; Diseñado para dispositivos de todas las resoluciones</description>
+ <description lang="et_EE">Kodi vaikimisi veebikeskkond; Disainitud erinevate resolutsioonidega seadmetele.</description>
+ <description lang="eu_ES">Kodi-ren lehenetsiriko web interfazea. Erresoluzio guztietako gailentzat diseinatua</description>
+ <description lang="fa_AF">رابط پیش فرض Kodiوطراحی شده برای هر رزولیشن</description>
+ <description lang="fa_IR">رابط استاندارد وب برای Kodi. قابل استفاده برای همه دستگاه ها و همه رزولوشن ها</description>
+ <description lang="fi_FI">Kodin oletus-web-käyttöliittymä. Suunniteltu käytettäväksi kaiken kokoisilla laitteilla.</description>
+ <description lang="fr_CA">Interface Web par défaut de Kodi - Conçue pour les appareils de toutes résolutions</description>
+ <description lang="fr_FR">Interface Web d'origine de Kodi ; adaptée aux appareils de toutes résolutions</description>
+ <description lang="gl_ES">Interface web predefinida para Kodi, deseñada para dispositivos de todas as resolucións</description>
+ <description lang="he_IL">ממשק דפדפן ברירת המחדל עבור Kodi; מותאם למכשירים בעלי אבחנות שונות</description>
+ <description lang="hr_HR">Uobičajeno web sučelje za Kodi; Dizajnirano za uređaje svih razlučivosti</description>
+ <description lang="hu_HU">A Kodi alapértelmezett webes kezelőfelülete; Minden felbontásra alkalmas</description>
+ <description lang="hy_AM">Նախնական տեսք Kodi-ի համար; Նախատեսված է բոլոր կրիչների համար</description>
+ <description lang="id_ID">Antar muka web bawaan bagi Kodi; Dirancang untuk perangkat dengan semua resolusi</description>
+ <description lang="is_IS">Sjálfgefið vefviðmót fyrir Kodi; Hannað fyrir tæki með allskonar upplausnir</description>
+ <description lang="it_IT">Interfaccia Web di default per Kodi; Realizzata per periferiche con qualunque risoluzione</description>
+ <description lang="ja_JP">Kodi のデフォルト Web インターフェースです。さまざまな解像度のデバイス用にデザインされています。</description>
+ <description lang="ko_KR">Kodi 기본 웹 인터페이스; 모든 해상도의 기기를 위해 디자인 됨</description>
+ <description lang="lt_LT">Numatytoji Kodi Web sąsaja skirta visų rezoliucijų prietaisams</description>
+ <description lang="lv_LV">Noklusētā Kodi tīmekļa sakarne; Piemērota visu izšķirtspēju iekārtām</description>
+ <description lang="mk_MK">Подразбирачки веб интерфејс за Kodi; Дизајниран за уреди со сите резолуции</description>
+ <description lang="mn_MN">Kod-ийн үндсэн вэб интерфэйс; Бүх төрлийн нарийвчлалтай төхөөрөмжид зориулагдсан.</description>
+ <description lang="ms_MY">Antaramuka sesawang lalai untuk Kodi; Direka untuk peranti pelbagai resolusi</description>
+ <description lang="mt_MT">Il-Web interface in-normali ta' Kodi; Iddiżinjata għal apparat ta' kull reżoluzzjoni</description>
+ <description lang="my_MM">Kodi အတွက် မူရင်း ဝက်ဘ် အသွင်ပြင် ၊ စက်များ အားလုံး၏ resolutions အတွက် ရေးဆွဲထားသည်။</description>
+ <description lang="nb_NO">Standard nettgrensesnitt for Kodi; Laget for alle oppløsninger</description>
+ <description lang="nl_NL">Standaard Kodi-webinterface; geschikt voor alle resoluties</description>
+ <description lang="pl_PL">Domyślny interfejs webowy Kodi; Zaprojektowany dla urządzeń o ekranach w dowolnej rozdzielczości</description>
+ <description lang="pt_BR">Interface web padrão para Kodi; Concebida para dispositivos de todas as resoluções</description>
+ <description lang="pt_PT">Interface da Web ppredefinida do Kodi; Criada para dispositivos de todas as resoluções.</description>
+ <description lang="ro_RO">Interfață web implicită pentru Kodi, realizată de echipa Kodi pentru dispozitive cu orice rezoluție.</description>
+ <description lang="ru_RU">Веб-интерфейс Kodi по умолчанию. Разработан для устройств с любыми разрешениями.</description>
+ <description lang="si_LK">Kodi' සඳහා නියත වෙබ් අතුරුමුහුණත; සෑම විභේදනයකම උපකරණ සඳහා නිර්මාණය කර ඇත</description>
+ <description lang="sk_SK">Predvolené webové rozhranie pre Kodi; Navrhnuté pre zariadenia zobrazujúce v akomkoľvek rozlíšení</description>
+ <description lang="sl_SI">Privzet spletni vmesnik za Kodi, ustvarjen za naprave vseh ločljivosti</description>
+ <description lang="sr_RS">Подразумевани web интерфејс Kodi; Намењен уређајима свих резолуција</description>
+ <description lang="sr_RS@latin">Podrazumevani web interfejs Kodi; Namenjen uređajima svih rezolucija</description>
+ <description lang="sv_SE">Standardwebbgränssnitt för Kodi; Utformat för alla enheter oavsett skärmupplösning</description>
+ <description lang="szl">Wychodny webowy interface we Kodi. Zrychtowany dlŏ maszin we wszyjskich rozdziylczościach.</description>
+ <description lang="ta_IN">கோடி இற்கான நிரந்தர இணைய இடைமுகம்; சகல சாதனங்களின் திரைகளுக்கும் வடிவமைக்கப்பட்டது</description>
+ <description lang="te_IN">కోడి డిఫాల్ట్ వెబ్ ఇంటర్ఫేస్; అన్ని వైశాల్యాలు పరికరాల కోసం రూపొందించబడింది</description>
+ <description lang="tg_TJ">Интерфейси веби пешфарз барои Kodi; Барои ҳар гуна дастгоҳ бо возеҳии экранаш гуногун эҷод карда шудааст</description>
+ <description lang="th_TH">ส่วนประสานหน้าเว็บพื้นฐานสำหรับ Kodi ได้ออกแบบรองรับความละเอียดหน้าจอของอุปกรณ์ทั้งหมด</description>
+ <description lang="tr_TR">Kodi için varsayılan web arayüzü; Bütün çözünürlüklerde tüm cihazlar için dizayn edilmiştir.</description>
+ <description lang="uk_UA">Типовий веб-інтерфейс для Kodi; Розроблений для пристроїв з будь-якою роздільною здатністю</description>
+ <description lang="uz_UZ">Kodi uchun andoza veb interfeysi; barcha ekran o'lchamlari bilan uskunalar uchun yaratilgan</description>
+ <description lang="vi_VN">Giao diện Web mặc định cho Kodi; Thiết kế cho các thiết bị ở tất cả độ phân giải khác nhau</description>
+ <description lang="zh_CN">Kodi 的默认 web 界面;为支持所有分辨率的设备而设计</description>
+ <description lang="zh_TW">Kodi的預設網頁介面;針對所有解析度的設備而設計</description>
+ <platform>all</platform>
+ </extension>
+</addon>
diff --git a/debian/webinterface-default/css/core.css b/debian/webinterface-default/css/core.css
new file mode 100644
index 0000000..5371c4a
--- /dev/null
+++ b/debian/webinterface-default/css/core.css
@@ -0,0 +1,794 @@
+body {
+ font-family: Arial, Verdana, sans-serif;
+ margin: 0;
+ padding: 0;
+}
+
+#header {
+ position: relative;
+ height: 50px;
+ border-bottom: 1px solid #000;
+ z-index: 200;
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAVIAAAAxCAYAAACIwiGvAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7r2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS41LWMwMjEgNzkuMTU1NzcyLCAyMDE0LzAxLzEzLTE5OjQ0OjAwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxNC0xMi0wNVQxNDozMDoyNyswMTowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE0LTEyLTA2VDE4OjI2OjUwKzAxOjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNC0xMi0wNlQxODoyNjo1MCswMTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDozZGEwMjM1Zi1iOTdlLTQ3ODMtOTZjMy0xMDBhYzMzYWI5OGQ8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPmFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2YmMwNTFmNC1iY2I0LTExNzctYTRhYy1lNmU3M2I3NjVlMDI8L3htcE1NOkRvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDo1ZTc3Y2MyYS00OTE2LTQ4ZjctOGJiZC05YjYyM2Q1NTc1YjU8L3htcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5jcmVhdGVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NWU3N2NjMmEtNDkxNi00OGY3LThiYmQtOWI2MjNkNTU3NWI1PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTEyLTA1VDE0OjMwOjI3KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6NDIyYTA5YzQtZjMwZi00OGM3LWFlYTUtMDZmYzk3NmZlMTk3PC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTEyLTA1VDE0OjQwOjQ5KzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6YWN0aW9uPnNhdmVkPC9zdEV2dDphY3Rpb24+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDppbnN0YW5jZUlEPnhtcC5paWQ6M2RhMDIzNWYtYjk3ZS00NzgzLTk2YzMtMTAwYWMzM2FiOThkPC9zdEV2dDppbnN0YW5jZUlEPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6d2hlbj4yMDE0LTEyLTA2VDE4OjI2OjUwKzAxOjAwPC9zdEV2dDp3aGVuPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6c29mdHdhcmVBZ2VudD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNCAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyMDAwMC8xMDAwMDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT42NTUzNTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzM4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjQ5PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg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') 1px 1px no-repeat #fff;
+}
+
+#remoteContainer {
+ background: url("../images/remote.jpg") no-repeat;
+ width: 659px;
+ height: 213px;
+ position: relative;
+ margin: auto;
+ margin-top: 50px;
+}
+
+.remote_key {
+ cursor: pointer;
+ position: absolute;
+}
+
+#navigation {
+ float: right;
+}
+
+#spinner {
+ float: right;
+ padding: 11px 10px;
+}
+
+#commsErrorPanel {
+ float: left;
+ line-height: 50px;
+ background: #c00;
+ color: #fff;
+ font-size: 20px;
+ padding-left: 10px;
+ width: 330px;
+}
+
+#navigation ul {
+ list-style-type: none;
+ border-right: 1px solid #969696;
+ margin: 0;
+ padding: 0;
+}
+
+#navigation ul li {
+ float: left;
+ color: #000;
+ cursor: pointer;
+ line-height: 50px;
+ margin: 0;
+ padding: 0 24px;
+ border-left: 1px solid #969696;
+ font-family: Verdana, sans-serif;
+ font-size: 18px;
+ font-weight: 700;
+}
+
+#navigation ul li.selected,
+#navigation ul li:hover {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAzCAIAAADZxfV4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjgxMkRGQzczQkFDMDExREY5RDE0QzJCMjZBM0JGMURBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjgxMkRGQzc0QkFDMDExREY5RDE0QzJCMjZBM0JGMURBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODEyREZDNzFCQUMwMTFERjlEMTRDMkIyNkEzQkYxREEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODEyREZDNzJCQUMwMTFERjlEMTRDMkIyNkEzQkYxREEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4vOcxrAAAAVUlEQVR42lyMUQ7AMAhCF+9/px5MIFNpl2YfREF8z1orSAaAYAnUnsdzdiR+vRLsuzNZ36bLyLM3p36zuhpWzp/7Zn/c5tA8zc3eeUvXbi/tXHwFGAC2dpagcbC63AAAAABJRU5ErkJggg%3D%3D') repeat-x;
+ color: #fff;
+}
+
+.floatableAlbum {
+ float: left;
+ width: 130px;
+ height: 150px;
+ padding: 10px 10px 15px 10px;
+}
+
+.floatableMovieCover,
+.floatableProfileThumb {
+ float: left;
+ width: 130px;
+ height: 200px;
+ padding: 10px;
+}
+
+.floatableAlbum:hover,
+.floatableTVShowCover:hover,
+.floatableMovieCover:hover,
+.floatableProfileThumb:hover {
+ background: #aeaeae;
+}
+
+.albumView .floatableAlbum:hover {
+ background: transparent;
+}
+
+.tvshowContainer .floatableTVShowCover:hover {
+ background: #fff;
+}
+
+.floatableTVShowCover {
+ float: left;
+ padding: 10px;
+ width: 379px;
+ height: 70px;
+}
+
+.floatableTVShowCoverSeason {
+ width: 500px;
+ height: 70px;
+ margin-top: 30px;
+}
+
+.toggle .activeMode {
+ font-weight: 700;
+}
+
+#tvshowLibraryContainer {
+ padding-top: 40px;
+}
+
+#libraryContainer .floatableAlbum,
+#movieLibraryContainer .floatableMovieCover,
+#profilesContainer .floatableProfileThumb,
+#tvshowLibraryContainer .floatableTVShowCover {
+ cursor: pointer;
+}
+
+.floatableAlbum div.imgWrapper,
+.floatableMovieCover div.imgWrapper,
+.floatableProfileThumb div.imgWrapper,
+.floatableTVShowCover div.imgWrapper {
+ width: 130px;
+ height: 130px;
+ display: table-cell;
+ vertical-align: middle;
+ text-align: center;
+ overflow: hidden;
+}
+
+.floatableTVShowCoverSeason div.imgWrapper {
+ margin: auto;
+ height: 70px;
+ width: 379px;
+ display: block;
+}
+
+div.imgWrapper div.inner {
+ overflow: hidden;
+ width: 130px;
+}
+
+.floatableMovieCover div.imgWrapper,
+.floatableMovieCover div.imgWrapper div.inner,
+.floatableProfileThumb div.imgWrapper,
+.floatableProfileThumb div.imgWrapper div.inner {
+ height: 190px;
+}
+
+#overlay {
+ top: 50px;
+ left: 0;
+ right: 0;
+ bottom: 150px;
+ background: #3f3f3f;
+ position: fixed;
+ opacity: 0.8;
+ z-index: 2000;
+ /* Above contentContainer's */
+}
+
+.floatableTVShowCover div.imgWrapper,
+.floatableTVShowCover img,
+.floatableTVShowCover div.imgWrapper div.inner,
+.floatableTVShowCoverSeason div.imgWrapper,
+.floatableTVShowCoverSeason img,
+.floatableTVShowCoverSeason div.imgWrapper div.inner {
+ height: 70px;
+ width: 379px;
+}
+
+.floatableAlbum img {
+ width: 130px;
+}
+
+.floatableMovieCover img,
+.floatableProfileThumb img {
+ height: 180px;
+}
+
+.floatableAlbum p.album,
+.floatableMovieCover p.album,
+.floatableProfileThumb p.album {
+ font-size: 12px;
+ font-weight: 700;
+ color: #000;
+ text-align: center;
+ margin: 0 -5px;
+ padding: 0;
+ width: 130px;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+.floatableAlbum p.artist,
+.floatableMovieCover p.artist,
+.floatableProfileThumb p.artist {
+ font-size: 11px;
+ color: #777;
+ text-align: center;
+ margin: 0;
+ padding: 0;
+}
+
+.contentContainer {
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: absolute;
+ top: 51px;
+ bottom: 1px;
+ left: 0;
+ right: 0;
+ background: #fff;
+ padding-bottom: 149px;
+}
+
+.footerPadding {
+ clear: both;
+}
+
+.albumContainer {
+ top: 74px;
+}
+
+.albumView .trackRow td,
+.seasonView .episodeRow td {
+ cursor: pointer;
+ line-height: 14px;
+ font-size: 14px;
+ padding: 1px 0;
+ padding-left: 4px;
+}
+
+.albumView .tr0,
+.seasonView .tr0 {
+ background-color: #efefef;
+}
+
+.albumView .tr0:hover,
+.albumView .tr1:hover,
+.seasonView .tr0:hover,
+.seasonView .tr1:hover {
+ background-color: blue;
+ color: #fff;
+}
+
+.seasonView .tr0:hover td.info,
+.seasonView .tr1:hover td.info {
+ background-color: cyan;
+}
+
+.albumView,
+.seasonView {
+ width: 100%;
+ height: 100%;
+ border-collapse: collapse;
+}
+
+.seasonView td.episodeThumb {
+ text-align: center;
+}
+
+.seasonView td.episodeNumber {
+ text-align: left;
+}
+
+.seasonView td.info {
+ background: url('data:image/png;base64,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%3D%3D') no-repeat;
+ background-size: 40%;
+ background-position: 50% 50%;
+}
+
+.seasonView td.episodeThumb img {
+ height: 30px;
+}
+
+.albumView td.albumThumb {
+ padding-left: 0px;
+ border-right: 1px solid #aeaeae;
+}
+
+.albumView td.time,
+.albumView th.time {
+ text-align: right;
+ padding-right: 4px;
+}
+
+.albumView tr.headerRow,
+#albumSelector table {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk4NTQ0NDZGQ0U1ODExREZCMjM4ODgyQjJEQTE5ODBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjk4NTQ0NDcwQ0U1ODExREZCMjM4ODgyQjJEQTE5ODBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTg1NDQ0NkRDRTU4MTFERkIyMzg4ODJCMkRBMTk4MEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTg1NDQ0NkVDRTU4MTFERkIyMzg4ODJCMkRBMTk4MEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7FuFIdAAAAOklEQVR42kyMUQoAMAhC0+j+J+s2ffXTVtDYA1EUpLsjImhmVFU2IsKqGm1uz8zxX7sBeF1zv44AAwDVBhSDNN7oJQAAAABJRU5ErkJggg%3D%3D') repeat-x;
+}
+
+.albumView th,
+.seasonView th {
+ font-size: 11px;
+ text-align: left;
+ border-left: 1px solid #aeaeae;
+ border-bottom: 1px solid #aeaeae;
+ padding-left: 4px;
+ height: 13px;
+ padding-top: 1px;
+}
+
+.albumView tr.headerRow,
+.seasonView tr.headerRow {
+ background-position: 0 -1px;
+}
+
+.seasonView tr.headerRow th.thumbHeader {
+ width: 40px;
+}
+
+.albumView .albumThumb,
+.albumView .albumBG {
+ width: 120px;
+ background: #efefef;
+ border-right: 1px solid #aeaeae;
+ vertical-align: top;
+}
+
+.albumView .fillerTrackRow2 td {
+ height: 100%;
+ line-height: 100%;
+}
+
+/* Album Selector */
+
+#albumSelector {
+ height: 23px;
+ font-family: Arial, sans-serif;
+ font-size: 12px;
+ font-weight: 700;
+}
+
+#albumSelector table {
+ width: 100%;
+ border: 1px solid #aeaeae;
+ border-top: 0px;
+ height: 23px;
+ border-collapse: collapse;
+}
+
+#albumSelector td {
+ padding-top: 2px;
+}
+
+#albumSelector .prevAlbum,
+#albumSelector .allAlbums {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAIAAADJDItPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkJCOEEyQzlGQ0U1QTExREY4MUI0RjIyREY1QUFBQTlBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkJCOEEyQ0EwQ0U1QTExREY4MUI0RjIyREY1QUFBQTlBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6QkI4QTJDOURDRTVBMTFERjgxQjRGMjJERjVBQUFBOUEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6QkI4QTJDOUVDRTVBMTFERjgxQjRGMjJERjVBQUFBOUEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Hnv/HAAAA1ElEQVR42mxQOw5EUBSd9/IyCxA2YQlaO1JbgkVIiIpKgR1oNBqdEKERVD7xmzkzk5gYc6r7zn3nnnMvWdf1dkHf923bchxHH2eM49g0je/7qqoOw8AOxbIs6CVJYppmnudgtm1j+75DhGllWdq2HYbhIQDPpmmCjed5ruvO8/wTghVFoWlalmXXgPCiPM8riiLLMiFkPQM/SNd1sEfINE0ty4rj+FDruv5qfx4wxrQoigzDqKoKDIrvYvc3JEkSRTEIAsdxKKUEsf9era5rQRCeAgwAxPWf44ZS0FcAAAAASUVORK5CYII%3D') no-repeat;
+}
+
+/* This must appear before #albumSelector .allAlbums */
+
+#albumSelector .allAlbums {
+ width: 94px;
+ border-right: 1px solid #aeaeae;
+ text-align: center;
+ padding-left: 10px;
+ cursor: pointer;
+ background-position: 10px center;
+}
+
+#albumSelector .activeAlbumTitle {
+ text-align: center;
+}
+
+#albumSelector .nextAlbum {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAALCAIAAADJDItPAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjdCMUE3MDBGQ0U1QzExREZBREU0QkQ5NzdFRENBNkQxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjdCMUE3MDEwQ0U1QzExREZBREU0QkQ5NzdFRENBNkQxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6N0IxQTcwMERDRTVDMTFERkFERTRCRDk3N0VEQ0E2RDEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6N0IxQTcwMEVDRTVDMTFERkFERTRCRDk3N0VEQ0E2RDEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz62tw0dAAAA3UlEQVR42myQPQ5EUBSF573414jQUEh0Go1GrRGFKKiESuxCYztWYAMqy6ATEg0NmbkiMWTmlPede75zH5rneZomURR5nn/9CC/LUhRFXdfjOK7r+n4K9X2f5zkYNU1LksQwDJZlSZI8t1HXdVmWXWm2bUdRpKoqsBBCBIz2fb+em6Zp29b3fc/zoBAG3v4UTKqqKssSgo/tbdvubQHsOE4QBJIkEVDvHm6aZhzHuq5zHIcx/rIVRUnT1LIsaE5R1OkmwELTdBiGrusKgsAwzB10HDYMgyzLf3/tI8AAgcVrkw2eqPgAAAAASUVORK5CYII%3D') no-repeat;
+}
+
+#albumSelector .prevAlbum,
+#albumSelector .nextAlbum {
+ width: 28px;
+ border-left: 1px solid #aeaeae;
+ cursor: pointer;
+ background-position: center center;
+}
+
+/* Movie Overlay */
+
+.moviePopoverContainer,
+.episodePopoverContainer {
+ z-index: 3000;
+ /* Above overlay */
+ border: 1px solid #000;
+ padding: 10px;
+ margin: 10px;
+ position: fixed;
+ background: #3f3f3f;
+ top: 50px;
+ bottom: 150px;
+ left: 10%;
+ right: 10%;
+ opacity: 0.9;
+}
+
+.episodePopoverContainer {
+ bottom: none;
+ top: 30%;
+}
+
+.moviePopoverContainer .closeButton,
+.episodePopoverContainer .closeButton {
+ float: right;
+ cursor: pointer;
+}
+
+.moviePopoverContainer .movieCover {
+ height: 100%;
+ padding-right: 20px;
+ float: left;
+ z-index: 3100;
+}
+
+.episodePopoverContainer .episodeCover {
+ width: 40%;
+ padding-right: 20px;
+ float: left;
+ z-index: 3100;
+}
+
+.moviePopoverContainer .movieTitle,
+.episodePopoverContainer .episodeTitle {
+ font-size: 24px;
+ font-weight: 700;
+ color: #fff;
+ margin: 0;
+}
+
+.moviePopoverContainer .runtime,
+.moviePopoverContainer .director,
+.moviePopoverContainer .genre,
+.moviePopoverContainer .plot,
+.episodePopoverContainer .runtime,
+.episodePopoverContainer .director,
+.episodePopoverContainer .genre,
+.episodePopoverContainer .episode,
+.episodePopoverContainer .season,
+.episodePopoverContainer .plot {
+ color: #fff;
+}
+
+.movieTitle .year,
+.episodeTitle .year {
+ font-weight: 400;
+ font-size: 18px;
+}
+
+.playIcon {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH4AAAB+CAYAAADiI6WIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY3NEJBNzU2QkM0OTExREZBNjg4RTExODNGRTMxNzlDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjY3NEJBNzU3QkM0OTExREZBNjg4RTExODNGRTMxNzlDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6Njc0QkE3NTRCQzQ5MTFERkE2ODhFMTE4M0ZFMzE3OUMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6Njc0QkE3NTVCQzQ5MTFERkE2ODhFMTE4M0ZFMzE3OUMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6EY6YgAAAd50lEQVR42uxdCYwc1Zn+qqrn9Iznto1tPINtMD6wjQFjDgNLQhYlJgkKIecCClJWSsgqJBGKFolspCyXokDYDWGTYAJJOJLsAiExEI5wBAg3GIyN8QH2+BrP2HMffdV+r+q9ntc11T09PX1U21Nyubtrqrur6/v/7//+/10hHH2b4XPMPtpuQugoAtfQQDbS/A1Hg2GEShxYL4iG9uh9bqQA3Q9gO81z/dEoVaMIlSjg+qPpc444ZsnfJx4reKBcHjd9wBfgxWx3D8Pdo+IY97jcbc/5dikzQ6gEAfd6sNjKuFcT2YYqoLkWOKYOmDMTmM3nLY1AUz3/xr/X0AqqdOD5xOCHRInwINHu7wS6etz9wAFgXy+wpx/YPwAc5Dl8iSFpFKZ2DfFSM4BQCQFuyZut6LqqggAT3BO4L5kHLJ4LtM0CWhsINgGvKpMWYfhwPzyWZGsfbEtXH+ZO0PtoDPv2Ah/tAna0A5v3cKdRbCPaB6QRWPLjYh4jsIN+Y4N0PbZG36ZG2+KxspLAHg+s5n7WQmDZHGAePbqxSp7kBTikfYiZBnidy+MeLjc1Y6Ah2AfJADSCXe8Dr70HvPAB8Cb/vo9/jshTo56PtINmCEYAPdvQ4rTYKwjorOOA008BLlwCnDmbr2t4vFzjW0sL6t5AnqnHey/E1ng85uH0mET5MG1hJ43gTeDpl4Enif7bPK9L6gRb0wiBMgAjQKB7HbOWcXnxUuDja4B1i4CVBNvUAS7XADd8cjKvLB8PeMPnIkyPelSe77cT7ZG3gOf/BvxpK/AcdcGHMmLYGgPEgwC+ERAvNyWW4nnNLNe7P0vAP95Kai+XJ5bLvcyjrPS7GfcE2XgKsOGT9+mvLQ14y/Oos0lcer5KA8RxAo5N9PxngUdfAR7pcV4mGEBlC0UF3wgI4ALLCsbqlWuBy84ALqBYm6U8WYBdoYGhAxzzicmZgDve3wyf/FAXHJaHbSARVUZgSflPDfDBk8BDZIH7RigO5SWHfdJE+0gG3vA4kpNjU5idcBbwlfOBL1OZN5dr1lDuEWDRFHfMGAe4yQLvJ0T0sFOmGYiK/0rpSQZ4/yFgPXXAw7z2PZrnx4oBvlVg0NX9csIzX8ykWPvC5cB/fgz4FNOwauHZlXIv0zwpLG9k1KeakglwuQbeG+/VdakfqButMAamnM2CyShMlxH1nh43C4hpNl1QR7QKDLrSZOUEec1ngB98AbiKXj5D/KFK7qq4ENYAj6VQ3sUE3vCIPp2RFK0pA1C6gGlo22k0AJ7T+BHwUdQtCllHmsd7y6fCketPAi6/DPgRPWA1D5jCy6fJG2R7PDw2QQCKAbzXTWOa/tAZoEIer+V9WMXfTuF62i7gYDfQ7gO8UarA6/m4o8/4409YB1xLL/+3Y2nx4sur5Q0xNGEU8Shzo4SANzwCNKaFgJD8rSo9JPCzTwY+Rpc3d1IE8tBIoTzfKgC1O2xHxb6WXn4jY/knSedWhQTd0mRu2CfnLlXgDU8NQYUAU0tJxesaRrdTgXNE+fl9YGvUqQkl1ZTsUgFeT9PEb6xeAFxyJXDDcmCpJWm9Uv6iiDTzWJp0o5SB92qAmOYRldp5DH9L5wDLNzPlGwT2I89NvlYeAFcxXfyu6SuAK68A/qONwtbSYnlUK3rYE7yZpQa8twwc1+i/Qnq/MAg6yNyFwBlbgd2M+7s8JQsjl3E/l8CbHuXecCZj+VeB77fQ68skteuxPJ7FjSt14L0C0JDAh+SxWdQ+SxkWCf6+TmCbhzQC5/E6vYu96Vzgu18Erq6V8bxKXnk6Lz9agPfWASDBV55fT2IkU55F1A92AFs0qWAHCXhvTK9fC3yPoF9FWjerJOfHtVhuI31r2dECvJf61Q0Uz6fTV6iJzqTnHyD472u0nxMDsCYJuKGxlcC3bg0B/xIpnp4eqpQxLCZBj6e44Ucz8PAgGtLyfYJfuYSevwn4qMut8/v19ika8ErI1VCZfu1fgH8XoKvSa1SL58YU8GkfFfiWJoDreBtPAFa/Tq/vo+jLFfiTAT7RUULsVO0XU73/oIkUpTw9quXmmAJ+QqVfUwO/EaidB6x4CXgz7Hb30tv3Cwq83thS0QCc8zXgRl5cixJyMQ10Ywr4Cb1f93zlQMzxm0j9ba8Br/De9kw21ltZgq7aHyp5YSdSyF1PFbrYlCmb6pxgZwjGFPBjz7W1mK/U/nygdYC3+F2C7yObJkzX2cZ1YYyNTNu+uRo4zdA8fVJXNLUltqi8lwZGm6m/CnzlFOALshaml/6NfAGvd6JwGJ2i43MX8iJMrfwYngI9p5sqdqlUj2LP+FdmToz7p0scQtmAb2bBEE6jC5X7yRcD31IK3poCPa+eH9FQXgwcQ011NVGe7QN+ToHX29WF4bV8nBS/EJirKk6qd0yhNtXpwW+P4cgZ5WhoFc+Y1FAC5X+moD7XYf5E84c5EY8PTRB4R8WT4j+9lt9tacWGaAEBFzeisrkZzeecg/rTT0f5jBm8QgPR7m4MvPceul96Cf3btyM6OJiw1lLfFPgqVRbbV/jvPeDFDuBZiWXGpd1QhqAnOpLQuxddAFxez/daWhwqhIc5TZoVFZh/xRVou/pq1Cxa5CtCon196Hn5Zey77z50bNiAof37J86FAfT8uARfufdSUv064Ir1bj1/L5KHcNmTSecM7TxhbA2nAVd+Alin55jxSaZYmZwrvsOqqcHy227D8dddh7KGBsQGBhAfGRndw2HY3I1QCNNoFDM/8xmHFex4HH2bNiEaiyV1hw5yOpeuYcfUUjwG+WNfBz445Lbk6X1RjckCr75nGoPJqi8B1zbxeYUmPJBn4NUPXnrzzZj/jW8gIgAfGnLo3TAM59HZEyfbjiHYBLqqrQ0zLroI9aedhuE9ezD44YdjvqeUgNeBkz14yvm3hheBv8MZ2ucQ8KQ83luLb6CYuOoMYI1eVLDzDLyhKlef+xwW33gjYsPDsKM8Yo4St2Ek35aEMSgD4LHaxYsx65JLUDV7tqMDhnt6ElZdSsB7x4aHpde/DezocMZvJHVKNrIFPlGhY9p2+iVMIVTfd70tOZ/AO82VVVU4iRRfPX8+YvR0X6C9F6+OiUdSvQgDJhVK45lnYgZDgBGJYGDbNkRoSCby3wMol8BDK+lqQ5Ganwee4fE+jHZ5sLNJ53Tga04FPkvLalID3AqVMonvaT7vPNSdcgriw8OSyZO/WbzO5FicYIf7+1HZ2orFP/sZVv3xj5j5qU8lBkWUmsqPYnTKj9XAScuA8zHaocfIJo/Xad5kHFmyCji3QgM9XqAfJy6w6eyzEaKwE8DpwI45387MFGNM86I0osbzz8eK++/HSb/+NWoYCqIllv+rDhwCJOquELOti+AM2knYg5EN8IpFpi0E/qkNmGdowBfKqkOUlLUrVriAxOPjAu3n+T5xgD8i5ohEkR7OvvxynPL001jw/e/DYrYQLaEKZFwDil6/nDidKr3eSlfUMccrz/K/uSvo7dWZSMU8AF/e1ISquXOdlGwyXp7qPSL2R2kAIX7PCTfcgFWPP45ZF1/sVCwiJQK8uldzgemnunRfr5VxMwY+qQVuFnDyYsYPRbvxAoLveHxdnZOzx6PRrL08Ew0g8v8wDWA6076T/vAHLLvnHqcqGHTv93bcOAc4Y5rTUzsxjYBfNug7VZg+3KvuRGAtlXxlzrt5ZrhZ5eUwxMw3OkhZUnwmx6IUfyL/P+aLX8Sqhx/GoptuQhnZIMjxX5+7h0563AKX7quQpvHGTEPzYu6ZOUtpQepAMX54wjOzADar0MD4b1NERpg2Wi0taL3mGqx69lnMvuwyJrLVgTQAPWGfzqdrXMzq4T/pV1qqdzyeNL+McaM1CDP22OPE6gmJu/Heo6p/VP6ioad6yRIsuftunPTAA2g899xApn9xTXifwn/kyHmS/UPjebzhUfNVpPnTxYRDdkCsPFPwMzGGcWO+9jpO8EXhqGXdOqwQ9H/LLahauLBgjVOZ3htVVGsFZi1whuMl5odKG+NtT9GmZT6w0kCAWrV8AMsZxaf7LFn+ddK/mhoc++1vY+UTT2Det74FI0D0r7Cis+Jkx/ETcd47MVhKjzcp6BYcwwwhEMBn6dW5CAPe+C/oX5R5K9vacPytt2L5Y485haC4ZQWC/hXCSxim+djiAd1OBTykhYRmA4vqgGlGQGhsPFWfq/g+7jmy9i+qfzGKwPq1a7F8wwYsuv12TFu6tOjpn0JYTLrQ5Dwk5mhKS/Wqw8o0evuJFfINgQF/nDidaU6fCw3gHGPaJwzANk3M+frXsfwvf0Hrtdci1NCQiP9GEUAXeyMxbHOm3ElQvZmO6tXomMaZQFsZgjXZbS7FXTYZQqoMQDQTi/SvorUV83/0I4f+Z37+80lToRZ6qybglPULZZw3U3m83jRtMBWY0Qw0GwEDPpW4y4UxTPY8sQnlHxsZQe3q1Vj8u99hCdO/mpUrC9qopTATcl7M5g2nR/bYXN6P6kM8c2ad+4aS2HKl9LOp+3vfJ9oUojSAOB9nXHoplj/1FNquuw6hlpaC9kIW/M5w3UzWbhiP6hXNl9W4s0NPtwPk6UiRY+cidmfyOXYG3+81AKf6x3h/3A9/iKUPPugwQSGUv0KXrD19uvOQNAWv4Ve5c6Zl4ckzhbArtDiZaHzPNk5n6/nZMIToKhYNh1F31lkO+E3r1hXE88WV0dVrG1zgx9Ts/cRdOdVAQxCXrrDzBHQuNYDvNQn6pwFUzJ6NE9avR+MFF+QVfOWs1GrVVaNU7xvj9eKN8Pi6QPZBz5Di86UBstUB6j0i9oeam7HgjjswbeHCvAq+uAu8VTvaWGOmA16UJyoZ32uK1RqXCy/LOA/PMHZPVDuk/C7eXUH9VfPnY9711yd3Cc8DOwplP935l5hPOSXVi0sJlbndqYu+jbcKYKE9dtJMI8AXcZ95f9NFF6HuvPPySvmyc0YVfHrimD4327LcTvqBonjkkZpzRfsZvy8WczqXNF5yScaGnY3Hy2bWCviMHzFTVPxKMlfPt7jLWS1AnjPt5JNRVl1diJDq2xHDe8Ai1YfsgIJv57AnzkRz82y/z++7hPgqq693Onna+UXcd53dMXm8bMyPB9Lti5Ce5fWaCiOg7VTx33uW6L0ePxK8PJcdNHIVBvRjsd5exLq78xpb7TTCb0wKaAesR7FdYM/PZ2ueHnQH333XGctv5PG+pcLS9En840wxIkGK8YbylnE8OluxlWkNP1tWGXvXTWcgx6EHH8xbm72aUyDiTpxl+wGf1IlWLKUddldHDJ68z1Hlzs5z3720n8PnVkUFep58Et2PP57XVZ1Fg9Dg6EqXSZdk+rBDuBvoL+XZq3La0SKHYk/U7K1p0xDp7MSua691x/nnsXgjXL3XXeVqTH8Q00dkhgeA7ljQgExT3sxn1W4yGsDr6abI2QcGsPOqq9D/1lt57cQq7hZdPTyYDHwikTA9oDvLxPQDh8LI86IoExUp2kjZbGvx2dJ5tnV+/bOEp9sUctu/+U10PPBAXkFXV9EHDPS5ixul9Hh9bV4BfOeQjPNBVvfFTs8y+SyjvNwBfWjzZmy59FIcuPvu9APXc+jxhxiyDzsPSR7vq+qdKetoJQcJfn8pFHFyOZImZxqAx8TMW2IyBwwPY/8vf4n3PvEJdP/1rwUBXXlwB2l+wAXeuxxvkqhMrJBF4Dt4ds9xQLMdLJTd9Gec5kwBhvccv2O5ep/3Gs3aWuc93U88gb233ILDjz6atDR5ITbh4nuBA/bYGD8GeGUVIo8/dIBv4tkLjIAAng4M5XXeY+OBmKv3qddiciWrqgqDW7di349/jE7G8khvb2Jx5ILUO+Qu4vRu4CO4U6ApbBMRM+TzPmEdvQT+Qyb/Z5YHlNIzBSjvni+OizhOwEUJdu/tt2PPrbdipL09Mfq04ELYTePCO4GdSF4DKi3Vi0Egw/vcFQ8jtNayIHW6zAWI2Zwz5jzZo0bM2CHG0x965BG033gjel98sSiAw4Ms43vfXnfRQjWqO6k0E/JJ55x17/mm7V00nDqgKSjAZ3IdufLoVJ/jHJc5uVlRgYE33sDe225D529+4/SlL2YnVX1Zkw8I+qA7v21EAz6txzvKnnl8OwPETgq8pjgCMlTaR9xlEqdTAZ3J+7zniDq7RfEW7ejAbtL6gTvvxMiePYkBasV2DOXebwPvwl27xrsa+xjg9feK+k3PVmDj2cCpIRR+AOB4+ftEvTqtB493nkzPnMpbOIyD992H9htucFrXxFaGYGyKy8nU0Y3AJj4dwuj6EWljvPJ6cfLwDr75MMVBC1BhF9nTswEsU/DTfi/PN5mPC+D7X34Z7TffjK4HH/T1mmJvMXlNW6jmO9wFCoWw885onVbVi5OHmM9vp9dvmQWsiBeLyrwzU+chdvtSvIjjQq2T1od37MB+Qet33YXIoUMI6mATBd6LwFtxd326YaQYsBvyYVS14MQwD3SQMl5fQ+CLTvcqvk8wTmdrIJZQ68PD2HfHHY5469+8ORBxPB3NG27RZvgt4A0+7daAT0v18ADvtOp9CLy5Bzg0H2gshteLVEl0WrDENOVZVu4yysslrVuM4+Kx929/w+6bbkI3H22p1oO6woWt0fxrwNZ97ooVg0iewjxpM9N8VkTS/bZ3gHf8RFYhtkhfn7PWjGFZGRd3UhV8Up4j0zMxslXQ+vbvfAebPvlJHH7qKZgS9CC3Wygm7OfTF8jQcTeNG/bEdzsd8LYnzos3dxD1f1ApjhgYuzhwvvPSaGenky7pwOesQUUySEguc7LnJz/BOxddhD2M56KTRKksYqQw2UysmMa97BbuHMb2TeXSebxO9/3ttCJ+6HagsNOaiouL9PejT6RNgpa1VSkm3f4u1Lrwcir2zocewnuf/jS2f+97jscH3cPhU3wRadgzxIkMvVWmcRGkWW8+lIY5Yqp8y3fvfhX4+0rgxGp5+40C/rCef/wDMRqASKnsyCTmlJZxXAxfElW3oU2bnDgugI/LlSpKbaUqhewuOugzDvZOxwsdeEzE45WVKLofoFp4gaa0q5Dz1asL7H7+eWcdGTG3fNY9aBirRWOKMyExU7Jd11+PjRdeiP333++0mVsl5OVeISa2v1LXdblFm0GMrk+YkpwzWYUq0ZRMGqleAZyiJk7zmyQv12vSOHQvliQZGUHzunWOxxtjUv00a9Jo6ZnYDhJoQen7773X6f8WQuktRqQXbASyzLz6/wu4a8gFvktT9ClnmR9vMSKdFcoOkUJmAIvbgBZVvzfyDLy6AJFHV7W2YvqaNQ4t+w4I81mkSFC6qLz1v/IKdnz3u2ingBtub085rXOpAK+v7nknHZ65+5/5dD/c+nwYSD/TaiYer8+iFe+kLmCsX10lDcIsAPDOF5Oqe557DtULFqB21SoYQmmIDpieIdTiuGofN7mH9+7F7ptvxs5rrkHfxo1OemaluI5SAV7FYGG8bxDs9cDdYTd3P+TxdmQDvNfpHMon3Q+JKbFP5K7GYJsT/OHZAC++Q8whd+jxx531ZIQBiJGmouBiqp1Ai8EKouI2SIbYt349dpDWOx97zAkVVgqgS23BQcXfRNj+OfCnbcATcJrgE2lcbLwEzMjA49U0p2JmBTGfyszpwPnfAK5ZADQYGFvwzwfwurWLHy4WEGw491zULFuGsuZmx9NFoWd42zb0v/MO+kjtI11diYs3UvzoUlxiNCJBeYSp+y3AjRGnFRYHNeCjnjI8Mknn/NJEyO8TNNLLT399A7DhSuDLlbIJpVDFDlOL+X3cHZFJLxfx3FlbVva/t4BANqZMVsUrRCnoBu8B/i/i1ld6ZQoX1ZIue7z7OJHMYVh+SddG4NEXaGmmVhcs1I9XwCqBZosFhYXgk+XVUl85Ol3OroordwOPU8m9BLcxZkDz9IxqbGaG91ovEA3JL9v1KPDABzQCCyjodJ1+saiQRaVibApwy6X4d55kbJdxvUery2dcVLUmeI+TNlrBIK0uvgxYJmZL1lvv8hXjJ5tBlGKMj2sqnsG8i3H9l0T6LQl8nyboMl4dLpvQnPTBYogOKaB+CXCC6UkBpoDPzfuj8jWdbPhm4LftwNNwO1r0SN014WibC00W30XLqwCOPR6YrS9sMwX85N+v+FvE19uAP79KQcene2RNfsBTnrXzBbw+gFb/kjClZUczvb4VaIyNU9WbAj6zc/UO8euB5/4M/Abu6JgujeKzWgtpsh6fSPd4gUMUep2zgcWzmGbHMHbm3CngM3+/GtkiXv8eeIOp2118uk1SfB/GdrQoCPC2TyHJJuf0CPDnASfOAGpSef4U8OnPVb1gxL17GNj0C+AXPPaeFte97e0otMd7PT/OK+oi7fcQ/MUtQHXMJ+ZPAZ++HKtA3wC8fzvwP3SojVLBdyPDZtd8Am948nzVZcum4uii5x86BlhE2p8WSyH4poAfK+RUPYRJ+qY76OlDbjlWga4GSGRcqMlnjPd6vaNHCH7nFl5wEzB/DlAXRfKKR5gCfkz9Xd28PwCv/wr41fCopx+Wnj6cjYLPN9XbHvBjgvbfAfbWMM2j2m9RJ5hTHj+m/m5Id74TeOZe4J6oG9M7tJJseKJFmkIAPybWy98T43/dBH83r7h+PjCnnL8xPo7oOxqAt7WbJNoW9hHY/ybDP0oRbzuDXR0hp8f0KHLY1zUfjWq253fF+GJgK7DzII9T9LVOB8qiE6zyHSnAGxq12xKAN90y7L2vAX+B0/CWpN5Hcg16vjx+DOVLix3aA3z0Pn9kPXAMhV+dOslA7vqhBRl4We9I5OfipjzIOP5z4NftwLN82Y7RDhVD2dTgi+nxfko/IvcR/qI9G91B+5XHAnOrJPXbE4j7pQS84bkRKsPZCfQzVdtA4O8fchtchJd3aqCH8+Hp+QY+1W92wI+6hZ4dpP9D9P6ZzUBtCKM9CMwjCHhbc1mnAwmfPgFs+Snwu81ul6kdmnLv14ozMeRx/Eq+O87YGk3FtKKUoLBB/tL2V4Ftve569c00ggpD8wqjhIGH9mMtiSTd+gDTtEf/lwJu0PVy0dhyUMbzAa0Mm/ehC4XqMeUVfAp8MUrnMGlvC5V/O829nHl/E9O/kLISPfUrBeBtTyFGbFv4G38LPM/99zvd0S5CwImu0F3Sywc0ao/71EjyQseF2HTsnPVr4a6OJDpwToPbiVPsc2YBK9cCZ58JLKcRlOlvsiZRAMon8HrHRP2R6PYxPXv1ReDFw+6cNEqtq3Z0PZbnldqLBbz3fikcy6UBVHOnozuL4zUKA2gBFhP8NacCS+fwuFo8Le75gGIBr1OYnqbRdePULp106zdfAl7pc3Py/TKG92qADyN5RiqggCPRi9FNzc/7yz0MUCd3QfsLxbCtVcBJxwOzyAIV5VqVyEDycC4zD8Drm46QGn4lENxL76ZL730FeIN5+ZtRd465w7IIowOuhi/rXl5Q0IsFvJ8BqE6zeggQe61kgjqeNLeVLEDwT1wKzJ8PzBahIKQBorcFWD4Ug3HEmO7NhicntT1MM+Ty9gCVefvbFKh06817Xe/eJ4FWsVuJNn28+pj544tx81Fk8OHBS/WQFgZQKfdqyQTCCBrp8ccwHrQeRwNYBLTxce4MGgetxAhpHwSkHx83nhHoXh5x0YxRhneSyncT8J0fMRU77JajVXm1X3q27t0qhkfgM6dssW88AmAA3hBgaWGgTDJApXxUhiAYoYEnNDfTGKgF5sx1q4ItfF1PwVApev9WuosoWiE5+MPweDZGERGdSWJ0zyiRi4klWphgH6YLdxDkve1Mv3hsf9RV4zrQAxrQwxLsiCbwvRMU2AiIxwUF/FQiULGArgcqPGFBfy5Ww64TKynTOmppHdP5vIYnlJe5mYLJD7XEcEsiEhWAE6UIURuh3O6jIOsjor19rvru1YAd0mh7UD4qrw57YndMq18kzTEXhC1Io4y83uBtxFJGoJhA1wU6Mzg731RGlwx1J5+vhxbTU2DypuH6rkD1Pka1Ok1Uo/K4p34BBGxV9iAPL7N92FgZQFgT85a2q4mjLe3R8sn+jDRtC0nNyh4P1ju+6s9TgR3YrRTGFXpvon7jDY+YNz27d4RVqmzN65k6mHpLo+1hCT9lbpfAPS2pAaW2j9g2Uoh3I8NsLlWo8TMEw1OkQxBj95EIfDo9YKcB1chCxKai60yPTQFfZFYYzyiOCBCz2f5fgAEArFexS9eRpekAAAAASUVORK5CYII%3D') center center no-repeat;
+ position: absolute;
+ z-index: 3500;
+ cursor: pointer;
+ opacity: 0.8;
+ width: 100px;
+}
+
+
+.playIcon:hover {
+ opacity: 1;
+}
+
+/* Effects */
+
+#topScrollFade {
+ position: fixed;
+ top: 51px;
+ height: 33px;
+ z-index: 101;
+ left: 0;
+ right: 0;
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAhCAYAAAAYucG/AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjYwREM0NTA2QkM1MzExREY4OEFDQUU5NTc5MTFCNkUxIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjYwREM0NTA3QkM1MzExREY4OEFDQUU5NTc5MTFCNkUxIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NjBEQzQ1MDRCQzUzMTFERjg4QUNBRTk1NzkxMUI2RTEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NjBEQzQ1MDVCQzUzMTFERjg4QUNBRTk1NzkxMUI2RTEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4NLytwAAAANElEQVR42mL4DwRMDEAAIv6AiN8g4hec+AkifmAhvoOIb6isb3jFvmHRhs3kn6gu+A0QYACIHCJCHDLYgwAAAABJRU5ErkJggg%3D%3D') top left repeat-x;
+}
+
+/* Now Playing */
+
+#footerPopover {
+ position: fixed;
+ height: 150px;
+ bottom: 0;
+ left: 0;
+ right: 16px;
+ z-index: 10000;
+ /* Top most always */
+ background: #333;
+ opacity: 0.98;
+}
+
+#nowPlayingPanel {
+ height: 130px;
+ width: 600px;
+ padding: 10px;
+}
+
+#audioCoverArt img {
+ width: 100px;
+ height: 100px;
+ float: left;
+ padding: 0 10px 10px 0;
+}
+
+#videoCoverArt img {
+ height: 100px;
+ float: left;
+ padding: 0 10px 10px 0;
+}
+
+#audioArtistTitle,
+#videoShowTitle {
+ float: left;
+ padding: 5px 5px 0 0;
+ color: #777;
+}
+
+#audioAlbumTitle:before {
+ content: ' - ';
+}
+
+#audioAlbumTitle {
+ padding-top: 5px;
+ color: #777;
+}
+
+#audioTrackWrap,
+#videoTrackWrap {
+ width: 365px;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+#audioTrackTitle,
+#videoTitle {
+ color: #fff;
+ white-space: nowrap;
+ overflow: hidden;
+ font-size: 16px;
+ font-weight: 700;
+ padding: 5px 0;
+ width: 365px;
+}
+
+#audioDuration,
+#videoDuration {
+ float: right;
+ color: #808080;
+ font-size: 20px;
+ font-weight: 700;
+ padding: 0 5px 5px 0;
+}
+
+#progressBar {
+ background: url('data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAAAAAAdccqdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUCB1jsGfiYOJh4gJCdiY2JlYABfcAiC/XwOEAAAAASUVORK5CYII=') repeat-x scroll 0 0 transparent;
+ border: 1px solid rgba(0, 0, 0, 0.7);
+ float: left;
+ height: 8px;
+ padding: 0;
+ position: relative;
+ width: 365px;
+ -moz-border-radius: 20px 20px 20px 20px;
+ border-radius: 20px 20px 20px 20px;
+ -webkit-border-radius: 20px 20px 20px 20px;
+}
+
+#progressBar .elapsedTime {
+ background: url('data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAICAAAAAAdccqdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABdJREFUCB1j+M/0g+kr02emj0D4mekrAD41B7hJ9Jz5AAAAAElFTkSuQmCC') repeat-x scroll 0 0 transparent;
+ height: 8px;
+ left: 0;
+ min-width: 5px;
+ width: 0;
+ position: relative;
+ -moz-border-radius: 20px 20px 20px 20px;
+ border-radius: 20px 20px 20px 20px;
+ -webkit-border-radius: 20px 20px 20px 20px;
+}
+
+#progressBar .progressIndicator {
+ background: url('data:image/png;charset=utf-8;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAMpJREFUeNp8kD0OgzAMhe0QWAB1RoKbVKrE0L3H4AztSM/AYaoiVepNuABDGPhN/dIODJQnWYmTL8+O2VpLUJZlJ1kKiSN99ZaomqZ5IWGAApVKqWsYhuT7vqPGcaSu62hZlrvAN07TNBfoGccxMTOtBRNjDM3zfNYoBxc4bElrDbCAY+t53oF2JKCBI/V9v8c5V4D1NE0XebUJSTWAD4URoMdhGJzzOnD2m0LlfiZ9lkmS2CiKbBAELrDHGe7A8Grg+Z+B10g+AgwAK9Fl++J3PdcAAAAASUVORK5CYII=') no-repeat scroll 0 0 transparent;
+ height: 10px;
+ left: 0;
+ position: absolute;
+ top: -1px;
+ width: 10px;
+}
+
+#nowPlayingPlaylist,
+#nextTrack {
+ width: 416px;
+ float: left;
+ cursor: pointer;
+ z-index: 1000;
+}
+
+#nowPlayingPlaylist {
+ clear: both;
+ color: #fff;
+ position: relative;
+ top: -16px;
+}
+
+#nowPlayingPlaylist ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+#nowPlayingPlaylist li {
+ padding-bottom: 2px;
+ padding-left: 4px;
+}
+
+#nowPlayingPlaylist li:hover {
+ cursor: pointer;
+ background: #004986;
+}
+
+#nowPlayingPlaylist li span.duration,
+#nextTrack span.duration {
+ float: right;
+ height: 14px;
+ padding-right: 4px;
+ font-size: 12px;
+}
+
+#nowPlayingPlaylist li div.trackInfo,
+#nextTrack div.trackInfo {
+ width: 364px;
+ height: 14px;
+ font-size: 12px;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+#nowPlayingPlaylist li.activeItem div.trackInfo {
+ width: 362px;
+ padding-left: 10px;
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAOCAYAAAAWo42rAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAIZJREFUeNpi/P//PwMxgImBSECyQlWCKkFuBOI9QBwLxBxQPgaGMS4A8R0g7gNiFWwKYVb/gGI/IJ4GxJHoNjNCg+ckEHMA8V8gFgPi10BsiKyQBeZUIGYFYi4gPg7Ek9FNhCnkBJkOxAuBeBYQv8Ll621A7AfETIR8rYBLAQwzUj2uAQIMAPXkkCPo9C41AAAAAElFTkSuQmCC') no-repeat;
+}
+
+#nextTrack,
+#nextText,
+#nowPlayingPlaylist {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAOCAIAAABhIeELAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNoMxSEOACAMA8CmAdai5ibBwf9fCOJy8DQyE1WFtTfuPZRMW4y/FFSIIwZ7/1ojgCfAAEzrAiPgCWVXAAAAAElFTkSuQmCC') repeat-x #606060;
+ border: 1px solid #222;
+}
+
+#nextTrack {
+ border-left: 0px;
+ color: #ddd;
+ padding-left: 4px;
+}
+
+#nextText {
+ clear: both;
+ float: left;
+ color: #457cbf;
+ font-size: 12px;
+ font-weight: 700;
+ width: 54px;
+ border-right: 0px;
+ height: 14px;
+ padding-left: 4px;
+}
+
+#playbackControls span,
+#playbackControls span:hover {
+ width: 24px;
+ height: 24px;
+ float: left;
+ display: block;
+ -moz-background-size: 24px;
+ background-size: 24px;
+ -webkit-background-size: 24px;
+ -o-background-size: 24px;
+ -khtml-background-size: 24px;
+ cursor: pointer;
+}
+
+#pbPrev {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAxVJREFUeNrsWU1q20AUluxgsEBgCDjUYBAYui7kArlAu4+7T/dt9m0OkAMkB+gFeoFeoNB1wCAwuNhgCLjIUDDuN+W5vEzejEbyWKqKBx4zaKQ33/d+5k/hdrsNmlzCI4EjAc8EwjAspQh6eqhiSBcSQdrCaxtIBllDVhjrseRYfgjg2w6qM8ipAXBeUYSWkDnG/VUZAXyjwA4JuK+iiEwx/uagBChUEsHiamAVEisVItCTCd9GFGIq1HoGHWleaJUmgHeV1fvaY+X6Gb5blohl5cEBpKN1LaBv6pUA3ku0kNkQ8MW+sQPdfSLCPbKE7tQLAQG8Co9JkcRznBBGNINZSRQiIISN0TKeiOjGehZOzgQoYUdVgbeQmPDE5phbOVNlwsOmCvBkxJTCdFcSwvOstCx6hiypVMJOKt4lTGjcgHAMnQlQQnEXznwmrKMX/kzP7NEp4XLywBmf531MlSVJLGidkXBZCTyxfs0bzpkBl0yAZp6/sV9mhfXshSXPBcJn9UDM2rnbXSi8I3ltecfWdw4Z5AzzaMAnEuiy9srBSOckLwRwA0UOzY9CXwz5gOad9K1WVgZ8wYnwMl/K13ssRsrq73WL7ayO6pMDcAlHlEegzeIvKwE8JotfGPquIJcF8yBjq287j8A+W4ALAi9Z/SWq2wJWdyo+CVxKwFn5fIhZquVR188CifhPEvgCeWcBqvoeqiCw0c6wRZLtG6o3kK9C3wNkjOZ9idyKJHwmAplpznUkoe57rtG8kbyBvnvyxo8CarsGfCKBtWnVK0hEhdRbKWzIU2PJU4YSm9amE0Oy7Y6QvT33MWojNkYIXEmeQnVNU29egvdMk4F4pMSzV2zBSOvc0NHVS8I2l99djpQc8CCotwwMuKwE5qzdoXubOqzf1y695k4E6Dj3xAvSce7A4Du69aVjrW0hm2qH6lHFDhhplwrTQisx3RLza5SI7muqsH6ibZtT0631/30zZ1HanLtRC4nm3E5bwikImvJ/QLt2SYIm/qFhCpr7j0xIvOb9pbSEVv3/iZtWjgTqLr8FGAAhgOqLmi3nxQAAAABJRU5ErkJggg%3D%3D') no-repeat;
+}
+
+#pbPrev:hover {
+ background: url('data:image/png;base64,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') no-repeat;
+}
+
+#pbStop {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAp1JREFUeNrsWV9rwkAMb3UIFsaEgmJhUBB82Os+1D7APsc+2l73IAiFQUWh4BAqlBWXg7ClsWnvSv/Y0cBRLXfN75fkcrk7+3K5WH2WkdVzGQh0LXf0j23blT4C82gCjxm0e2jqtyN0jaEl0E7QjqAvqajvD3PmjyEBGOvCw0XgVUQRiUBv1CoBGKOs/YjWrkOUJz5B/7FRAtB3DA8fwyUvPL7QqjF8K80Z66C3HoQwUwQCPrYWAtBPKVzlWF25PzSNZ5w3HoYg98YWvhfXRgDBr6GNWfwGVSciI+KzeaQ8sJFIGBEQwKt4PdSZDkHPHOdVKQltAmidJwK+0DI1kODGUvo+uJcp5rKFbNUWeDSg+vYGdVmoe1VpJQaWHssUQZPgGYmAvHIQiz4BDJ0leXXQzdE1kVC66BxbIiZtD3gsrYUdlDkh6s7DJBPABYfm5rBsYWnICykznIvYSj1AwSemdUrNJCLmBbewGs3ptDdIgWuDou4E4DaaffdkfXDZ3MgSIPUKrU105RXas2bfd2gvmn2PhICDGFMphBwWPonVsSCGRMB4RWDKqstbkVjAeEWAhtT5hgicpbAfNvUDgYFAVr6l2d6xTAWMVwTOUr7tWBwpO44K8u1EKmHbFMQwkdYnfjKXwoCYMJ7x2qNA3kxqIQMO9AgnRoyFxVxECCx0CRgUZ6ayYNhKs1DEwsjtMHxcFj7lBHAjQTt6eRuJFsCP2S4syttYjQq2c79ekLZzDYvHrB9qL2RYwu7Iqzke6LZlfaVrTl7tpNJ+VDApQ5ayfDx4ahq80uGzzBNWLSW2VvaQad0kCeFkbluY/f712WgJiX6cTjMS/bwfYLnZt/p4Q5OT5vp3RyYs9f27pRTiuft74mFPPBAwlx8BBgDogIiBqL/sAAAAAABJRU5ErkJggg%3D%3D') no-repeat;
+}
+
+#pbStop:hover {
+ background: url('data:image/png;base64,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') no-repeat;
+}
+
+#pbPause {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAApxJREFUeNrsWY1qgzAQ1rYILQiC0EKhIPQR9lB9mj3A3ml9gUJBEAoTBEFQGEh3GddxvSXROGvqMBD8T74v+XKXO93r9eqMucyckZeJgO2yoBeu63ZqBNZRAAcf6hLqCupc8loNtYRaQS2gr7xjX3fXLr1hQgC+8+CwgRoqADcVQSiD+gH9fg5GAN4XYHcIvK8iiCTQf/1QAiiVSDLiomMhiUJIBNopJd+uUGJCaoGijbhJWp0JwHti1Nfstpj6C3yXddCymMEtVI89SqG9pFcC8E7EJFMj8PSv2oG210iEzkgGbce9EJCAF/I4myy8lgZhjxZMS8KIgEQ2ypHpiQgfrF9y4gRmDQt2MPA4gDFapFtZIw4zT4ymMqKyeTR4RoJasQjxGG0ldmRRiQV7HniHcMZ+HcSxa00AFxTV4aXPBdtyFr7NM7kVIq5WM7Chdr4PU9mRRIp+RoZLS+Bu9C1vNi8KXHICuOJ/tN/Fw/Y8CxldCzKLtGDXPjlvvd2Fht/g8EJuHaHzA3n+zj45wPNjy+ZzMvo+x8UltCTnxZPELIUCn5QAdeXVkxCoFPikBOZEf+UzoGc45lNQPxGYCOgJ1CyGtV4YjrqJQKmzuZbKUoFPSqBSeGWbxdf5poXE692isMCgk1fWEffiB3Z9Mmg70O0OeGoxB83V6DDE5ilss6GDd04Nz48d9R+yzWXeJiamgLeW5bNV4NIS+CDnHuZtbFgf0a+nwKUmgOHc3SyowrkHgvf46KvCWpUjS1hQvR94AvYsqZAYeWLMEtM0ygqTTkOMfsS2zbEuaz3TWA4R+aQsMxANAJ5n5rSR4f/OjWpIjCc7TT4c7/8BlnaJnDH+oSENjPcfmWThje8vpUZa9v8TTzHxRMC8fAkwABzhg7l0cw47AAAAAElFTkSuQmCC') no-repeat;
+}
+
+#pbPause:hover {
+ background: url('data:image/png;base64,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') no-repeat;
+}
+
+#pbPlay {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAv9JREFUeNrsWl1q20AQ9k8RRGASELjEUBAY8tDXXCDXaHuAHqAHaA+Q9r19L31vLpAL9LUPBoOgoJCAwMUgg6hxZ2DaTiea1Wq1trolA4tiodV838zs7Owow91uNwhZRoPA5YFA3/KI/xgOh04vgXUUweUExgQG/h0rj5YwKhhrGCvQVznq+4P5rx8tCcDcBC4JAXcRJFKA3uKgBGAOWvsJWduHoCe+gf7VXgnAs2O4pBQudeHxnaxawru2NXNj8taxEmZIIJNzvRCA51DhvMbq6P68bTzTuplRCEpvLOF9pTcCBP4MxljEb+a6EAWRVKwj9MBCI9GKgAIe4/XOZzoEPVNaV40krAmQdZ4y8EbLeCAhjYX6vkovc8xNG9n8UODJgPjuBekakO65004MLGciU2T7BC9IZOxWTFjsCVDonLJbd7Y52hMJ1MXX2ClhsvbATKS1vIcyJyfddZh0ArTh8NycN20sYv7Ekxe2wnAJYWv0AAdfta1TQF6DomeeSBTCC0lbArcOetEDr4DEe9PiayG31gRYvcJrE1c5h/HRgzdWIiONTR6IRfhUHZVzb0wcw6gSYRSbCByJ6tKXoDc+A4kLx/mlgvEeAX5C23hOi+iBSyBx6eCNjXaK7ONMfNHRG//Eof63N0LuSuB54ovXrsQBBSvON5BhFr4J/NBWu0f5BMDftpxzpGC8R2Cj5VsPckNWdwmbWMuOI0O+jbQS1kGuYTx3AU8YIm1/kp25LUwoGeMTUZe7LNR38N6rDu/gLZySMBqzEK8+H3dQjNZ+0RG8xFDYpNFChFHioPQDAH8Jo9NBiHRHJgK1XQm4l7LStaLOwNZS6QSeXXvoUIypI/KLAPZQM9uuBLdcpB3nlOpx7Wnhz4T1c+udmErYG3ZrSg3dgwjpmvIUrJX2I4Mlc5GyUmo87Rs86khF5slda6GlaDKd7ZOE0plbGkP2v+6NNpAIozstSIT5fUDk5nQQ4heamjQX3jcyZasP7yulEs/9fycOUR7+V6Jv+SnAAJqtxFYrTd5IAAAAAElFTkSuQmCC') no-repeat;
+}
+
+#pbPlay:hover {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAACGdJREFUeNrsmm2MlNUVx393ZoEFBEZQEbS6vgSb2pJp6Ic2sVltTNM2IjO8CGjpzggCNVJ2P9T4krjuBxKTJu7SxhZRmCGACIgzQD/S4vZDU7VtJtYPaKwZFQUB8VnK8vbc555+4D7jnWdnZ2dwbWPCk5ws8/LM/f/P+d9zzj0PSkT4Ol8xvubXZQL/76vFfTF37txL+pHC3n0phWpXkASSSpGIfkcEDygJlATpT8+7t3gpa+3fv7/qtXI3cTMEdhf2tSlYqyBDDcAjXoInkBdYvyh9b/l/RmDHK3sTCtWLIjNqOhDygnQtXTjPa5ZASzPrbN1VTAWGHEoSVGdfT0FRQT9Qun/RvFL03pd2700CSYF2gRRURS2DkNq6q5hddl+qKWk1HIHcjmJODfV6WUFPx5JUvlmnb3m5mBHoBtoie6UvuzTVNaoSemF7IQreU9Cz/P50n/u9u58sKPf1gXXpEavkppcKnZZIwiGRf+iBdHZUCPxhayGnqAJfUor0qp+nyw7o0Cq/CxWRCSD1yDy/rdAmQoGLWSy8Kf/LZUNJNEXgt7lXe5Wi03krvyYzP+t4POaAr0VErJlGiPwu/2oOx1ki9P0qO7+rHoFhC9mzm/ektEinbwTfCNpILfChtQBjgXHWWp1/j7Gfx4HY3U8WYlGphdeazPysNpKvrCnS+ezmPammK/EzG/cktCanNVgrdT24oJbnYxZgCH48MNHaFcAE+16rQyRmidQk0fXggqzWlJy1c89s3JNoikBgpFcbSeiLnvcCIR3NXvbeuAXWakFPtptxKnCltcn2swlOROJA3Dpi6PpCWhvx7PqJwEhvwwSefm53mzaScaTT8/iqBeVIpnG9P86Cm2wBXwVcDVxj/15l359kibTaiIWSikej8fiqBWVtpMfBkHn6ud1tDREIDGu1AWvlpx5e1FfD+8oCaLEEJgJT5syIfe+um+I/A2YA11mbCUy3RKZYaY239w0rqaceXtSnDeUQS2BY2xABbSTj6K+nVvFzItBiPXoFkIgpZn77avXYA7Pjj00ay63AN6xdB1xrozLVRsPdGyGJKjxa01PBYiQzYiXuf/dMSsUohMXqN12Lr6xRqKLAp1qpXDt7uvr+D2+MrbnoCM6/Vjb73zkh7wMDwOfASeAzwLPvnQbOAhcA36Zb46baX/fu/DwscmJIt8+aUBw2AtpIux+AtXo9iYqkzwnAJG24whgwBmIw7kdtsYU/viV2z8Sx3OJEYoaVU8KJxFj7W9E6gh9QDDFpI+11JeQbkn4g+IGgA+mvAx5nH1SyUGCYYARcuymhvjX/m/HFt0wl6RCYDkyzG3+CQyAGKHc/6ED6Q0y++aJS1+xGtZYkSoXoSg1EwI1Cq0FaAzP0y+PiTLzrxvhP26aYG/72sRwcvEBgZXPeMR/QVkaVVkQHlOSL0pysGwFtSOiL3mfDE0tGIoBTC1qAMYFhjBFhOLtxiro9NSv2i9um8R0nI1Wl1aiENjyxpBRi0mbowSm6ByrWSCseyUhxEWJRCUVtTJzJP7g+1vGTW9XiRCtXOvKJu/KsklEdXNEIVKyZM0VoAiowQiN29XjuvG0atztSjEa3IVwt1Tv+koZc4lojwbsQ4P3ruGw9dII3gcDpVsPfqzpL1MNVvYmbI+C2ysYCCcwIk75PT3Po9U/YO+jzfqQGBFESjeCqllCApwPQAcx9dFtyBPA44LUF4Yd1IGoXAvy/H+FPf/6A/YM+R2sUssAhUUE899FtyRCTDvDqR8BICbjTIkwyfCqNev4CcA44X2v7DJzj2BtHeM07xwfAp8BxW5VPAWfs/ToipRBT0tkUpfp7wCEAtAP5Ot6XCPhBBWeideC9k7z+1nH+aQEft3YiQuC8S8DVf6T6lkZKo/2VlBVIagQJhdK5YEGciilOhzn/jC/H/nqY7W8d5zXgQ+Aj4GPgqCXhWQmdi+yBqP5TThrtr0vgYF9H0dd4vgY/IHHHI1syw0wZQu/7ofeBgbhiwAgcG6T/Lx+p3x8dpOSAPwwcAY7Zxu4/jv51rUbujke2ZPyAhK/B13gH+zqKdSVko5CHiwd5EbpryEgc7fsWxCl7kvvo3ZM8cegz9Z7N59pG57QFPGhfn4tkH1PrwO8H0q2+2AD5EdOoPdCsFyScRLTNWZ3r/MeGbF+N9OlGQAHm3556w7YG8dAf9vMzlmitvkcOrEsP2ftzVuc6A5G2UFAKtb6hA82bGzJlX5O3YUNrumevyLVFZBSatoDOWg97tt8/bqUSZpsBx/vnI73/EPCzV+TatKY7xOBr8m9uyJQbioCNQpcg4fwyARSA79aQETUyUszpJsONHlrgzomGmxEFRgrOpM5TqK6mphJvb856OpBspQsMJDmrY1OuRhSideCs9fKgI5tzkY0aHFiXNsOBn9WxKacDSTprZ9/enPWafkLzzpblRd/Q5xvwLzZSmZuXVZEwkWLmOz2++1c7G9XUm8zdvGxTThsy4Zq+oe+dLcuLX2o6fcMDm3IizmxUSUkM6cM7VpQjA11Vo5MccZwIcP3SF9tUjAKiKu2LUuQ/3L78y81Gw2vm4hdzUjXgFQ/oObLzoejIpUKokck0wIzFL3QC3aASTj+d/2TnitGZTofXNfe90CtSNehFkDJCz4lXVjb9fOCqhRszKLoVqmpgpRR9x3Y9NLrPB8Jr6oKNKRFykacrCHgiFLFPaAYKK4f0LFPSG5N2fN6uFCnFkOOhpxTZk3tWFr/SZ2ST0xsTAr0wis/IIK+g61Rh5Vf7jAzALpIdf+/zPQJrLZHEJYD2LPD1Z/etKl8q85ZLvdEu2gV0jblnQ0qEdiuR5DCEPNsOl5Si3//j6uJohE5d/s8elwl8ueu/AwCDqx8QqEWrWwAAAABJRU5ErkJggg%3D%3D') no-repeat;
+}
+
+#pbNext {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAvpJREFUeNrsWV1q20AQtmJjiCA0IAgkUDAUAi0ECr1ALpADuNdo39u+pweI39tcoAfoBQKFQAuGgCGQkIAhxUEGkeB+E0ZhWO9IK3llVcYDg2ytdne++dvZ3WA2m7WaTMEawBqARwBBEJQaBGN08dgGb4Hpd6h8GoMT8AR8h/mSkvP5AYC+ER4RC16GCMgY846XCgB9SNsvWds+iCxxifnvKgWAb9t49NhdbO7xl7UaY6xHS9+QrfVCcTMCMDL7egGA72jCVxatk/mvivozx80eu6BpjQuMF3sDwMLvg9uG/47KBqIBpGfEEVlgqIEoBEARnvz11mc6xDw7HFe5IJwBsHbeCOEzNeMBhKksmu+3aeUiAF6LYKtU+AwQlBD+FAaA9xRgu6LfhWua8wBimxNGSteY+8oZALvOgRjgFm2XyywRIAPFw454dZ66kguAnkhvCfvh45IBtDn+0rRNK/YoFwB3fCvGGhVd6j2CiDjFpvSLFCll3rD0kwtLUpfwrNAxe4BNNicAN/9BxXzjDEDUK7I2yTLxIXhLaXvHmUzr+wF8Aj7KASBlCFlG1QKh4T55ZUIf/J2EtbTRu29o6yt99/mb3Rw3Sgw3CrMAbBrVpQuRACesUdMa9D/V9N4CbhQrMs4B6Ijf04KTuFjjqCSAqSKjNYgXoWdrWHZp9P8T2o61uClDnYoyRz+j7ZAtcu9joo1WdTTJaLv3NUlVAAbgU6XtB/g97eKqAPCgRbsjXZNwSH0DxSIf0fYZPCk47qYi41wMTLV860Ck8YEi3Bn4iyyJC1KoZcdORr7tUlntsJhNWLifSvtXtJ0uuGfuautTx1j1qNKLBWLaWGTtfc/YLWxaH7I7DRd0c3mEE5vVqK2clptrKifO66zkIM+BsMDTYUJeOT023CiqUfjIcJ+50n71dmQrsSdu/KnESpwLrcTJnDLoczrzLLz/s9EcEM04nTZANPN+wMjNvVYTb2gsaa55d2TKUt+8W0rFn+u/J24irQHUTf8EGABePUpJ23F8cgAAAABJRU5ErkJggg%3D%3D') no-repeat;
+}
+
+#pbNext:hover {
+ background: url('data:image/png;base64,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') no-repeat;
+}
+
+.tvshowContainer .seasonPicker {
+ position: absolute;
+ right: 5px;
+ top: 0px;
+}
+
+
+.tvshowContainer .active {
+ font-weight: bold;
+}
+
+.tvshowContainer .episodeListingsContainer {
+ position: absolute;
+ top: 40px;
+ left: 500px;
+ width: 500px;
+ padding-bottom: 149px;
+}
+
+.tvshowContainer .episodeListingsContainer ul {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+}
+
+.episodeListingsContainer li {
+ clear: both;
+}
+
+.episodeListingsContainer li img {
+ height: 30px;
+ float: left;
+}
+
+.tvshowContainer .showDetails {
+ text-align: center;
+ width: 100%;
+ height: 18px;
+ position: relative;
+ padding-top: 5px;
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAXCAIAAABF+LJYAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyBpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBXaW5kb3dzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk4NTQ0NDZGQ0U1ODExREZCMjM4ODgyQjJEQTE5ODBBIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjk4NTQ0NDcwQ0U1ODExREZCMjM4ODgyQjJEQTE5ODBBIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTg1NDQ0NkRDRTU4MTFERkIyMzg4ODJCMkRBMTk4MEEiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTg1NDQ0NkVDRTU4MTFERkIyMzg4ODJCMkRBMTk4MEEiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz7FuFIdAAAAOklEQVR42kyMUQoAMAhC0+j+J+s2ffXTVtDYA1EUpLsjImhmVFU2IsKqGm1uz8zxX7sBeF1zv44AAwDVBhSDNN7oJQAAAABJRU5ErkJggg%3D%3D') repeat-x;
+}
+
+.contentContainer .toggle {
+ position: absolute;
+ font-size: 12px;
+ font-weight: 500;
+ left: 5px;
+ top: 4px;
+}
+
+.tvshowContainer .showDetails p {
+ margin: 0;
+ padding: 0;
+}
+
+.tvshowContainer .showDetails .showTitle {
+ font-size: 12px;
+ font-weight: 700;
+}
+
+.tvshowContainer .showDetails span.heading {
+ font-weight: 700;
+} \ No newline at end of file
diff --git a/debian/webinterface-default/css/ipad.css b/debian/webinterface-default/css/ipad.css
new file mode 100644
index 0000000..9441022
--- /dev/null
+++ b/debian/webinterface-default/css/ipad.css
@@ -0,0 +1,9 @@
+.contentContainer {
+ overflow-x: hidden;
+ overflow-y: auto;
+ position: absolute;
+ height: auto;
+ bottom: auto;
+ background: #fff;
+ padding-bottom: 150px;
+} \ No newline at end of file
diff --git a/debian/webinterface-default/favicon.ico b/debian/webinterface-default/favicon.ico
new file mode 100644
index 0000000..078637f
--- /dev/null
+++ b/debian/webinterface-default/favicon.ico
Binary files differ
diff --git a/debian/webinterface-default/icon.png b/debian/webinterface-default/icon.png
new file mode 100644
index 0000000..cca2499
--- /dev/null
+++ b/debian/webinterface-default/icon.png
Binary files differ
diff --git a/debian/webinterface-default/images/DefaultAlbumCover.png b/debian/webinterface-default/images/DefaultAlbumCover.png
new file mode 100644
index 0000000..bbfd653
--- /dev/null
+++ b/debian/webinterface-default/images/DefaultAlbumCover.png
Binary files differ
diff --git a/debian/webinterface-default/images/DefaultVideo.png b/debian/webinterface-default/images/DefaultVideo.png
new file mode 100644
index 0000000..1aa81a1
--- /dev/null
+++ b/debian/webinterface-default/images/DefaultVideo.png
Binary files differ
diff --git a/debian/webinterface-default/images/ajax-loader.gif b/debian/webinterface-default/images/ajax-loader.gif
new file mode 100644
index 0000000..4fb7c23
--- /dev/null
+++ b/debian/webinterface-default/images/ajax-loader.gif
Binary files differ
diff --git a/debian/webinterface-default/images/close-button.png b/debian/webinterface-default/images/close-button.png
new file mode 100644
index 0000000..628fbf6
--- /dev/null
+++ b/debian/webinterface-default/images/close-button.png
Binary files differ
diff --git a/debian/webinterface-default/images/remote.jpg b/debian/webinterface-default/images/remote.jpg
new file mode 100755
index 0000000..8e10d59
--- /dev/null
+++ b/debian/webinterface-default/images/remote.jpg
Binary files differ
diff --git a/debian/webinterface-default/index.html b/debian/webinterface-default/index.html
new file mode 100755
index 0000000..40b5303
--- /dev/null
+++ b/debian/webinterface-default/index.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Kodi</title>
+ <meta http-equiv="Content-Language" content="EN" />
+ <meta http-equiv="Content-Type" content="UTF-8" />
+ <!-- <link rel="search" href="provider.xml" type="application/opensearchdescription+xml" title="Kodi Library" /> -->
+ <link rel="icon" href="favicon.ico" type="image/x-icon">
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
+ <!-- <link href="/images/logo.png" rel="image_src" /> -->
+ <meta name="robots" content="NOINDEX, NOFOLLOW">
+ <link href="css/core.css?1.3.57" rel="stylesheet" type="text/css">
+ <link href="css/ipad.css?1.0.5" rel="stylesheet" media="only screen and (max-device-width: 1024px)" type="text/css">
+ </head>
+ <body>
+ <div id="header">
+ <div id="commsErrorPanel" style="display: none;"></div>
+ <div id="navigation">
+ <ul>
+ <li id="profiles">Profiles</li>
+ <li id="remoteControl">Remote</li>
+ <li id="movieLibrary">Movies</li>
+ <li id="tvshowLibrary">TV Shows</li>
+ <li id="musicLibrary">Music</li>
+ </ul>
+ </div>
+ <img src="images/ajax-loader.gif" alt="Loading please wait" id="spinner" style="display: none">
+ </div>
+ <div id="body">
+ <div id="topScrollFade" style="display: none;"></div>
+ <div id="content"></div>
+ <div id="overlay" style="display: none;"></div>
+ </div>
+ <div id="footerPopover">
+ <div id="nowPlayingPanel" style="display: none;">
+ <div id="nowPlayingContent">
+ <div id="audioDescription">
+ <div id="audioCoverArt"></div>
+ <div id="audioTrackWrap">
+ <div id="audioArtistTitle"></div>
+ <div id="audioAlbumTitle"></div>
+ </div>
+ <div id="audioTrackTitle"></div>
+ <div id="audioDuration"></div>
+ </div>
+ <div id="videoDescription">
+ <div id="videoCoverArt"></div>
+ <div id="videoTrackWrap">
+ <div id="videoShowTitle"></div>
+ </div>
+ <div id="videoTitle"></div>
+ <div id="videoDuration"></div>
+ </div>
+ </div>
+ <div id="playbackControls">
+ <span id="pbPrev" title="Previous"></span>
+ <span id="pbPause" title="Pause"></span>
+ <span id="pbPlay" title="Play"></span>
+ <span id="pbStop" title="Stop"></span>
+ <span id="pbNext" title="Next"></span>
+ <div id="progressBar">
+ <div class="elapsedTime" style="width: 0%"></div>
+ <span class="progressIndicator"></span>
+ </div>
+ </div>
+ <span id="nextText">Next:</span>
+ <div id="nextTrack" style="display: none;"></div>
+ <div id="nowPlayingPlaylist" style="display: none;"></div>
+ </div>
+ </div>
+ <script type="text/javascript" src="js/xbmc.launcher.js?v=2.1.0"></script>
+ </body>
+</html>
diff --git a/debian/webinterface-default/js/MediaLibrary.js b/debian/webinterface-default/js/MediaLibrary.js
new file mode 100755
index 0000000..3c1a1bc
--- /dev/null
+++ b/debian/webinterface-default/js/MediaLibrary.js
@@ -0,0 +1,1420 @@
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+var MediaLibrary = function () {
+ this.init();
+};
+MediaLibrary.prototype = {
+ playlists: {},
+
+ init: function () {
+ this.bindControls();
+ this.getPlaylists();
+ },
+ bindControls: function () {
+ $('#musicLibrary').click(jQuery.proxy(this.musicLibraryOpen, this));
+ $('#movieLibrary').click(jQuery.proxy(this.movieLibraryOpen, this));
+ $('#tvshowLibrary').click(jQuery.proxy(this.tvshowLibraryOpen, this));
+ $('#pictureLibrary').click(jQuery.proxy(this.pictureLibraryOpen, this));
+ $('#remoteControl').click(jQuery.proxy(this.remoteControlOpen, this));
+ $('#profiles').click(jQuery.proxy(this.profilesOpen, this));
+ $('#overlay').click(jQuery.proxy(this.hideOverlay, this));
+ $(window).resize(jQuery.proxy(this.updatePlayButtonLocation, this));
+ $(document).on('keydown', jQuery.proxy(this.handleKeyPress, this));
+ $(document).on('contextmenu', jQuery.proxy(this.handleContextMenu, this));
+ },
+ resetPage: function () {
+ $('#musicLibrary').removeClass('selected');
+ $('#movieLibrary').removeClass('selected');
+ $('#tvshowLibrary').removeClass('selected');
+ $('#remoteControl').removeClass('selected');
+ $('#pictureLibrary').removeClass('selected');
+ $('#profiles').removeClass('selected');
+ this.hideOverlay();
+ },
+ replaceAll: function (haystack, needle, thread) {
+ return (haystack || '').split(needle || '').join(thread || '');
+ },
+ getPlaylists: function () {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Playlist.GetPlaylists',
+ 'timeout': 3000,
+ 'success': function (data) {
+ if (data && data.result && data.result.length > 0) {
+ $.each($(data.result), jQuery.proxy(function (i, item) {
+ this.playlists[item.type] = item.playlistid;
+ }, this));
+ }
+ },
+ 'error': function (data, error) {
+ xbmc.core.displayCommunicationError();
+ setTimeout(jQuery.proxy(this.updateState, this), 2000);
+ }
+ });
+ },
+ remoteControlOpen: function (event) {
+ this.resetPage();
+ this.textBuffer = '';
+ $('#remoteControl').addClass('selected');
+ $('.contentContainer').hide();
+ var libraryContainer = $('#remoteContainer');
+ if (!libraryContainer || libraryContainer.length === 0) {
+ $('#spinner').show();
+ libraryContainer = $('<div>');
+ libraryContainer.attr('id', 'remoteContainer')
+ .addClass('contentContainer');
+ $('#content').append(libraryContainer);
+ var keys = [{
+ name: 'up',
+ width: '40px',
+ height: '30px',
+ top: '28px',
+ left: '58px'
+ },
+ {
+ name: 'down',
+ width: '40px',
+ height: '30px',
+ top: '122px',
+ left: '58px'
+ },
+ {
+ name: 'left',
+ width: '40px',
+ height: '30px',
+ top: '74px',
+ left: '15px'
+ },
+ {
+ name: 'right',
+ width: '40px',
+ height: '30px',
+ top: '74px',
+ left: '104px'
+ },
+ {
+ name: 'ok',
+ width: '40px',
+ height: '30px',
+ top: '74px',
+ left: '58px'
+ },
+ {
+ name: 'back',
+ width: '40px',
+ height: '30px',
+ top: '13px',
+ left: '161px'
+ },
+ {
+ name: 'home',
+ width: '40px',
+ height: '30px',
+ top: '154px',
+ left: '8px'
+ },
+ {
+ name: 'mute',
+ width: '40px',
+ height: '30px',
+ top: '107px',
+ left: '391px'
+ },
+ {
+ name: 'power',
+ width: '30px',
+ height: '30px',
+ top: '-3px',
+ left: '13px'
+ },
+ {
+ name: 'volumeup',
+ width: '30px',
+ height: '30px',
+ top: '49px',
+ left: '422px'
+ },
+ {
+ name: 'volumedown',
+ width: '30px',
+ height: '30px',
+ top: '49px',
+ left: '367px'
+ },
+ {
+ name: 'playpause',
+ width: '32px',
+ height: '23px',
+ top: '62px',
+ left: '260px'
+ },
+ {
+ name: 'stop',
+ width: '32px',
+ height: '23px',
+ top: '62px',
+ left: '211px'
+ },
+ {
+ name: 'next',
+ width: '38px',
+ height: '25px',
+ top: '102px',
+ left: '304px'
+ },
+ {
+ name: 'previous',
+ width: '38px',
+ height: '25px',
+ top: '101px',
+ left: '160px'
+ },
+ {
+ name: 'forward',
+ width: '32px',
+ height: '23px',
+ top: '102px',
+ left: '259px'
+ },
+ {
+ name: 'rewind',
+ width: '32px',
+ height: '23px',
+ top: '101px',
+ left: '211px'
+ },
+ {
+ name: 'cleanlib_a',
+ width: '46px',
+ height: '26px',
+ top: '47px',
+ left: '553px'
+ },
+ {
+ name: 'updatelib_a',
+ width: '46px',
+ height: '26px',
+ top: '47px',
+ left: '492px'
+ },
+ {
+ name: 'cleanlib_v',
+ width: '46px',
+ height: '26px',
+ top: '111px',
+ left: '553px'
+ },
+ {
+ name: 'updatelib_v',
+ width: '46px',
+ height: '26px',
+ top: '111px',
+ left: '492px'
+ }
+ ];
+ for (var akey in keys) {
+ var aremotekey = $('<p>').attr('id', keys[akey]['name']);
+ aremotekey.addClass('remote_key')
+ .css('height', keys[akey]['height'])
+ .css('width', keys[akey]['width'])
+ .css('top', keys[akey]['top'])
+ .css('left', keys[akey]['left'])
+ .bind('click', {
+ key: keys[akey]['name']
+ }, jQuery.proxy(this.pressRemoteKey, this));
+ libraryContainer.append(aremotekey);
+ }
+ } else {
+ libraryContainer.show();
+ libraryContainer.trigger('scroll');
+ }
+
+ $('#spinner').hide();
+ },
+ shouldHandleEvent: function (event) {
+ var inRemoteControl = $('#remoteControl').hasClass('selected');
+ return (!event.ctrlKey && !event.altKey && inRemoteControl);
+ },
+ handleKeyPress: function (event) {
+ if (!this.shouldHandleEvent(event)) {
+ return true;
+ }
+
+ var keys = {
+ 8: 'back', // Back space
+ 13: 'ok', // Enter
+ 27: 'home', // Escape
+ 32: 'playpause', // Space bar
+ 37: 'left', // Left
+ 38: 'up', // Up
+ 39: 'right', // Right
+ 40: 'down', // Down
+ 93: 'contextmenu', // "Right Click"
+ 107: 'volumeup', // + (num keypad)
+ 109: 'volumedown', // - (num keypad)
+ 187: 'volumeup', // + (alnum keypad)
+ 189: 'volumedown' // - (alnum keypad)
+ };
+ var which = event.which;
+ var key = keys[which];
+
+ event.data = {
+ key: key
+ };
+
+ if (!key) {
+ event.data.key = 'text';
+
+ if (event.key && event.key.length === 1) {
+ event.data.text = event.key;
+ } else {
+ // Letters
+ if (which >= 65 && which <= 90) {
+ var offset = event.shiftKey ? 0 : 32;
+ event.data.text = String.fromCharCode(which + offset);
+ }
+
+ // Digits
+ if (which >= 96 && which <= 105) {
+ event.data.text = (which - 96) + "";
+ }
+ }
+ }
+
+ if (event.data.key) {
+ this.pressRemoteKey(event);
+ return false;
+ }
+ },
+ handleContextMenu: function (event) {
+ if (!this.shouldHandleEvent(event)) {
+ return true;
+ }
+ if (
+ (event.target == document) || //Chrome/Opera
+ (event.clientX === event.clientY && event.clientX === 0) //FF/IE
+ ) {
+ return false;
+ } //keyboard event. cancel it.
+ return true;
+ },
+ rpcCall: function (method, params) {
+ var callObj = {
+ 'method': method
+ };
+ if (params) {
+ callObj.params = params;
+ }
+ return xbmc.rpc.request(callObj);
+ },
+ typeRemoteText: function (event) {
+ if (event.data.key === 'text' || ((event.data.key === 'playpause' || event.data.key === 'back') && this
+ .textBuffer.length)) {
+ if (event.data.key === 'back') {
+ this.textBuffer = this.textBuffer.substring(0, this.textBuffer.length - 1);
+ } else if (event.data.key === 'playpause') {
+ this.textBuffer += ' ';
+ } else if (event.data.text && event.data.text.length) {
+ this.textBuffer += event.data.text;
+ }
+ console.log(this.textBuffer);
+ return this.rpcCall('Input.SendText', {
+ 'text': this.textBuffer,
+ 'done': false
+ });
+ } else {
+ this.textBuffer = '';
+ }
+ },
+ pressRemoteKey: function (event) {
+ var player = -1,
+ keyPressed = event.data.key;
+ $('#spinner').show();
+ if (this.typeRemoteText(event)) {
+ return true;
+ }
+
+ switch (keyPressed) {
+ case 'up':
+ return this.rpcCall('Input.Up');
+ case 'down':
+ return this.rpcCall('Input.Down');
+ case 'left':
+ return this.rpcCall('Input.Left');
+ case 'right':
+ return this.rpcCall('Input.Right');
+ case 'ok':
+ return this.rpcCall('Input.Select');
+ case 'cleanlib_a':
+ return this.rpcCall('AudioLibrary.Clean');
+ case 'updatelib_a':
+ return this.rpcCall('AudioLibrary.Scan');
+ case 'cleanlib_v':
+ return this.rpcCall('VideoLibrary.Clean');
+ case 'updatelib_v':
+ return this.rpcCall('VideoLibrary.Scan');
+ case 'back':
+ return this.rpcCall('Input.Back');
+ case 'home':
+ return this.rpcCall('Input.Home');
+ case 'power':
+ return this.rpcCall('System.Shutdown');
+ case 'contextmenu':
+ return this.rpcCall('Input.ContextMenu');
+ case 'mute':
+ return this.rpcCall('Application.SetMute', {
+ 'mute': 'toggle'
+ });
+ case 'volumeup':
+ return this.rpcCall('Application.SetVolume', {
+ 'volume': 'increment'
+ });
+ case 'volumedown':
+ return this.rpcCall('Application.SetVolume', {
+ 'volume': 'decrement'
+ });
+ }
+
+ // TODO: Get active player
+ if ($('#videoDescription').is(':visible')) {
+ player = this.playlists["video"];
+ } else if ($('#audioDescription').is(':visible')) {
+ player = this.playlists["audio"];
+ }
+
+ if (player >= 0) {
+ switch (keyPressed) {
+ case 'playpause':
+ return this.rpcCall('Player.PlayPause', {
+ 'playerid': player
+ });
+ case 'stop':
+ return this.rpcCall('Player.Stop', {
+ 'playerid': player
+ });
+ case 'next':
+ return this.rpcCall('Player.GoTo', {
+ 'playerid': player,
+ 'to': 'next'
+ });
+ case 'previous':
+ return this.rpcCall('Player.GoTo', {
+ 'playerid': player,
+ 'to': 'previous'
+ });
+ case 'forward':
+ return this.rpcCall('Player.SetSpeed', {
+ 'playerid': player,
+ 'speed': 'increment'
+ });
+ case 'rewind':
+ return this.rpcCall('Player.SetSpeed', {
+ 'playerid': player,
+ 'speed': 'decrement'
+ });
+ }
+ }
+ },
+ musicLibraryOpen: function (event) {
+ this.resetPage();
+ $('#musicLibrary').addClass('selected');
+ $('.contentContainer').hide();
+ var libraryContainer = $('#libraryContainer');
+ if (!libraryContainer || libraryContainer.length === 0) {
+ $('#spinner').show();
+ libraryContainer = $('<div>');
+ libraryContainer.attr('id', 'libraryContainer')
+ .addClass('contentContainer');
+ $('#content').append(libraryContainer);
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'AudioLibrary.GetAlbums',
+ 'params': {
+ 'limits': {
+ 'start': 0
+ },
+ 'properties': [
+ 'description',
+ 'theme',
+ 'mood',
+ 'style',
+ 'type',
+ 'albumlabel',
+ 'artist',
+ 'genre',
+ 'rating',
+ 'title',
+ 'year',
+ 'thumbnail'
+ ],
+ 'sort': {
+ 'method': 'artist'
+ }
+ },
+ 'success': function (data) {
+ if (data && data.result && data.result.albums) {
+ this.albumList = data.result.albums;
+ $.each($(this.albumList), jQuery.proxy(function (i, item) {
+ var floatableAlbum = this.generateThumb('album', item
+ .thumbnail, item.title, item.artist);
+ floatableAlbum.bind('click', {
+ album: item
+ }, jQuery.proxy(this.displayAlbumDetails, this));
+ libraryContainer.append(floatableAlbum);
+ }, this));
+ libraryContainer.append($('<div>').addClass('footerPadding'));
+ $('#spinner').hide();
+ libraryContainer.bind('scroll', {
+ activeLibrary: libraryContainer
+ }, jQuery.proxy(this.updateScrollEffects, this));
+ libraryContainer.trigger('scroll');
+ myScroll = new iScroll('libraryContainer');
+ } else {
+ libraryContainer.html('');
+ }
+ }
+ });
+ } else {
+ libraryContainer.show();
+ libraryContainer.trigger('scroll');
+ }
+ },
+ getThumbnailPath: function (thumbnail) {
+ return thumbnail ? ('image/' + encodeURI(thumbnail)) : xbmc.core.DEFAULT_ALBUM_COVER;
+ },
+ generateThumb: function (type, thumbnail, title, artist) {
+ title = title || '';
+ artist = artist || '';
+
+ var showTitle = title,
+ showArtist = artist;
+ var floatableAlbum = $('<div>');
+ var path = this.getThumbnailPath(thumbnail);
+ if (title.length > 21) {
+ showTitle = $.trim(title.substr(0, 18)) + '...';
+ }
+ if (artist.length > 22) {
+ showArtist = $.trim(artist.substr(0, 20)) + '...';
+ }
+ var className = '';
+ var code = '';
+ switch (type) {
+ case 'album':
+ className = 'floatableAlbum';
+ code = '<p class="album" title="' + title + '">' + showTitle + '</p><p class="artist" title="' +
+ artist + '">' + artist + '</p>';
+ break;
+ case 'movie':
+ className = 'floatableMovieCover';
+ code = '<p class="album" title="' + title + '">' + showTitle + '</p>';
+ break;
+ case 'tvshow':
+ className = 'floatableTVShowCover';
+ break;
+ case 'tvshowseason':
+ className = 'floatableTVShowCoverSeason';
+ break;
+ case 'image':
+ case 'directory':
+ className = 'floatableAlbum';
+ code = '<p class="album" title="' + title + '">' + showTitle + '</p>';
+ break;
+ case 'profile':
+ className = 'floatableProfileThumb';
+ code = '<p class="album" title="' + title + '">' + showTitle + '</p>';
+ break;
+ }
+ return floatableAlbum.addClass(className).html('<div class="imgWrapper"><div class="inner"><img src="' +
+ path + '" alt="' + title + '" /></div></div>' + code);
+ },
+ showAlbumSelectorBlock: function (album) {
+ if (album) {
+ var prevAlbum = null,
+ nextAlbum = null;
+ $.each($(this.albumList), jQuery.proxy(function (i, item) {
+ if (item.albumid == album.albumid) {
+ if (this.albumList.length > 1) {
+ prevAlbum = this.albumList[i <= 0 ? this.albumList.length - 1 : i - 1];
+ nextAlbum = this.albumList[i >= this.albumList.length ? 0 : i + 1];
+ }
+ return false; /* .each break */
+ }
+ }, this));
+ var albumSelectorBlock = $('#albumSelector');
+ if (!albumSelectorBlock || albumSelectorBlock.length === 0) {
+ albumSelectorBlock = $('<div>');
+ albumSelectorBlock.attr('id', 'albumSelector')
+ .html(
+ '<table><tr><td class="allAlbums">All Albums</td><td class="activeAlbumTitle"></td>' +
+ '<td class="prevAlbum">&nbsp;</td><td class="nextAlbum">&nbsp;</td></tr></table>'
+ );
+ $('#content').prepend(albumSelectorBlock);
+ $('#albumSelector .allAlbums').bind('click', jQuery.proxy(this.hideAlbumDetails, this));
+ }
+ $('#albumSelector .prevAlbum').unbind();
+ $('#albumSelector .nextAlbum').unbind();
+ if (prevAlbum) {
+ $('#albumSelector .prevAlbum').bind('click', {
+ album: prevAlbum
+ }, jQuery.proxy(this.displayAlbumDetails, this));
+ }
+ if (nextAlbum) {
+ $('#albumSelector .nextAlbum').bind('click', {
+ album: nextAlbum
+ }, jQuery.proxy(this.displayAlbumDetails, this));
+ }
+ $('#albumSelector .activeAlbumTitle').html(album.title || 'Unknown Album');
+ albumSelectorBlock.show();
+ }
+ },
+ hideAlbumDetails: function () {
+ $('.contentContainer').hide();
+ this.musicLibraryOpen();
+ },
+ displayAlbumDetails: function (event) {
+ this.showAlbumSelectorBlock(event.data.album);
+ var albumDetailsContainer = $('#albumDetails' + event.data.album.albumid);
+ $('#topScrollFade').hide();
+ if (!albumDetailsContainer || albumDetailsContainer.length === 0) {
+ $('#spinner').show();
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'AudioLibrary.GetSongs',
+ 'params': {
+ 'properties': [
+ 'title',
+ 'artist',
+ 'genre',
+ 'track',
+ 'duration',
+ 'year',
+ 'rating',
+ 'playcount'
+ ],
+ 'sort': {
+ 'method': 'track'
+ },
+ 'filter': {
+ 'albumid': event.data.album.albumid
+ }
+ },
+ 'success': function (data) {
+ albumDetailsContainer = $('<div>');
+ albumDetailsContainer.attr('id', 'albumDetails' + event.data.album.albumid)
+ .addClass('contentContainer')
+ .addClass('albumContainer')
+ .html(
+ '<table class="albumView"><thead><tr class="headerRow"><th>Artwork</th><th>&nbsp;</th>' +
+ '<th>Name</th><th class="time">Time</th><th>Artist</th><th>Genre</th></tr></thead>' +
+ '<tbody class="resultSet"></tbody></table>'
+ );
+ $('.contentContainer').hide();
+ $('#content').append(albumDetailsContainer);
+ var albumThumbnail = event.data.album.thumbnail;
+ var albumTitle = event.data.album.title || 'Unknown Album';
+ var albumArtist = event.data.album.artist.join(', ') || 'Unknown Artist';
+ var trackCount = data.result.limits.total;
+ $.each($(data.result.songs), jQuery.proxy(function (i, item) {
+ var trackRow, trackNumberTD;
+ if (i === 0) {
+ trackRow = $('<tr>').addClass('trackRow').addClass('tr' +
+ i % 2);
+ trackRow.append($('<td>').attr('rowspan', ++trackCount + 1)
+ .addClass('albumThumb'));
+ for (var a = 0; a < 5; a++) {
+ trackRow.append($('<td>').html('&nbsp').attr('style',
+ 'display: none'));
+ }
+ $('#albumDetails' + event.data.album.albumid +
+ ' .resultSet').append(trackRow);
+ }
+ trackRow = $('<tr>').addClass('trackRow').addClass('tr' + i % 2)
+ .bind('click', {
+ album: event.data.album,
+ itmnbr: i
+ }, jQuery.proxy(this.playTrack, this));
+ trackNumberTD = $('<td>').html(item.track);
+
+ trackRow.append(trackNumberTD);
+ var trackTitleTD = $('<td>').html(item.title);
+
+ trackRow.append(trackTitleTD);
+ var trackDurationTD = $('<td>')
+ .addClass('time')
+ .html(xbmc.core.durationToString(item.duration));
+
+ trackRow.append(trackDurationTD);
+ var trackArtistTD = $('<td>').html(item.artist.join(', '));
+
+ trackRow.append(trackArtistTD);
+ var trackGenreTD = $('<td>').html(item.genre.join(', '));
+
+ trackRow.append(trackGenreTD);
+ $('#albumDetails' + event.data.album.albumid + ' .resultSet')
+ .append(trackRow);
+ }, this));
+ if (trackCount > 0) {
+ var trackRow = $('<tr>').addClass('fillerTrackRow'),
+ i;
+ for (i = 0; i < 5; i++) {
+ trackRow.append($('<td>').html('&nbsp'));
+ }
+ $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(
+ trackRow);
+
+ var trackRow2 = $('<tr>').addClass('fillerTrackRow2');
+ trackRow2.append($('<td>').addClass('albumBG').html('&nbsp'));
+ for (i = 0; i < 5; i++) {
+ trackRow2.append($('<td>').html('&nbsp'));
+ }
+ $('#albumDetails' + event.data.album.albumid + ' .resultSet').append(
+ trackRow2);
+ }
+ $('#albumDetails' + event.data.album.albumid + ' .albumThumb')
+ .append(this.generateThumb('album', albumThumbnail, albumTitle,
+ albumArtist))
+ .append($('<div>').addClass('footerPadding'));
+ $('#spinner').hide();
+ myScroll = new iScroll('albumDetails' + event.data.album.albumid);
+ }
+ });
+ } else {
+ $('.contentContainer').hide();
+ $('#albumDetails' + event.data.album.albumid).show();
+ }
+ },
+ togglePosterView: function (event) {
+ var view = event.data.mode;
+ var wthumblist, hthumblist, hthumbdetails;
+ $("#toggleBanner").removeClass('activeMode');
+ $("#togglePoster").removeClass('activeMode');
+ $("#toggleLandscape").removeClass('activeMode');
+ switch (view) {
+ case 'landscape':
+ xbmc.core.setCookie('TVView', 'landscape');
+ wthumblist = '210px';
+ hthumblist = '118px';
+ hthumbdetails = '213px';
+ $("#toggleLandscape").addClass('activeMode');
+ break;
+ case 'banner':
+ xbmc.core.setCookie('TVView', 'banner');
+ wthumblist = '379px';
+ hthumblist = '70px';
+ hthumbdetails = '70px';
+ $("#toggleBanner").addClass('activeMode');
+ break;
+ default:
+ xbmc.core.setCookie('TVView', 'poster');
+ wthumblist = '135px';
+ hthumblist = '199px';
+ hthumbdetails = '559px';
+ $("#togglePoster").addClass('activeMode');
+ break;
+ }
+ $(".floatableTVShowCover, .floatableTVShowCover div.imgWrapper, .floatableTVShowCover img, " +
+ ".floatableTVShowCover div.imgWrapper div.inner")
+ .css('width', wthumblist).css('height', hthumblist);
+ $(".floatableTVShowCoverSeason div.imgWrapper, .floatableTVShowCoverSeason div.imgWrapper div.inner," +
+ ".floatableTVShowCoverSeason img, .floatableTVShowCoverSeason")
+ .css('height', hthumbdetails);
+ },
+ displayTVShowDetails: function (event) {
+ var tvshowDetailsContainer = $('#tvShowDetails' + event.data.tvshow.tvshowid);
+ $('#topScrollFade').hide();
+ toggle = this.toggle.detach();
+ if (!tvshowDetailsContainer || tvshowDetailsContainer.length === 0) {
+ $('#spinner').show();
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'VideoLibrary.GetSeasons',
+ 'params': {
+ 'properties': [
+ 'season',
+ 'showtitle',
+ 'playcount',
+ 'episode',
+ 'thumbnail',
+ 'fanart'
+ ],
+ 'tvshowid': event.data.tvshow.tvshowid
+ },
+ 'success': function (data) {
+ tvshowDetailsContainer = $('<div>');
+ tvshowDetailsContainer.attr('id', 'tvShowDetails' + event.data.tvshow.tvshowid)
+ .css('display', 'none')
+ .addClass('contentContainer')
+ .addClass('tvshowContainer');
+ var showThumb = this.generateThumb('tvshowseason', event.data.tvshow.thumbnail,
+ event.data.tvshow.title);
+ if (data && data.result && data.result.seasons && data.result.seasons.length >
+ 0) {
+ var showDetails = $('<div>').addClass('showDetails');
+ showDetails.append(toggle);
+ showDetails.append($('<p>').html(data.result.seasons[0].showtitle).addClass(
+ 'showTitle'));
+ var seasonSelectionSelect = $('<select>').addClass('seasonPicker');
+ this.tvActiveShowContainer = tvshowDetailsContainer;
+ $.each($(data.result.seasons), function (i, item) {
+ var season = $('<option>').attr('value', i);
+ season.text(item.label);
+ seasonSelectionSelect.append(season);
+ });
+ seasonSelectionSelect.bind('change', {
+ tvshow: event.data.tvshow.tvshowid,
+ seasons: data.result.seasons,
+ element: seasonSelectionSelect
+ }, jQuery.proxy(this.displaySeasonListings, this));
+ showDetails.append(seasonSelectionSelect);
+ tvshowDetailsContainer.append(showDetails);
+ tvshowDetailsContainer.append(showThumb);
+ seasonSelectionSelect.trigger('change');
+ $('#content').append(tvshowDetailsContainer);
+ if (xbmc.core.getCookie('TVView') !== null &&
+ xbmc.core.getCookie('TVView') !== 'banner'
+ ) {
+ var view = xbmc.core.getCookie('TVView');
+ switch (view) {
+ case 'poster':
+ togglePoster.trigger('click');
+ break;
+ case 'landscape':
+ toggleLandscape.trigger('click');
+ break;
+ }
+ }
+ tvshowDetailsContainer.fadeIn();
+ }
+ $('#spinner').hide();
+ }
+ });
+ } else {
+ $('.contentContainer').hide();
+ $('#tvShowDetails' + event.data.tvshow.tvshowid).show();
+ $('#tvShowDetails' + event.data.tvshow.tvshowid + ' select').trigger('change');
+ }
+ },
+ displaySeasonListings: function (event) {
+ var selectedVal = event.data.element.val();
+ var seasons = event.data.seasons;
+ $('#topScrollFade').hide();
+ var oldListings = $('.episodeListingsContainer', this.tvActiveShowContainer).fadeOut();
+ this.tvActiveSeason = selectedVal;
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'VideoLibrary.GetEpisodes',
+ 'params': {
+ 'properties': [
+ 'title',
+ 'thumbnail',
+ 'episode',
+ 'plot',
+ 'season'
+ ],
+ 'season': seasons[selectedVal].season,
+ 'tvshowid': event.data.tvshow
+ },
+ 'success': function (data) {
+ var episodeListingsContainer = $('<div>').addClass('episodeListingsContainer');
+ var episodeTable = $('<table>').addClass('seasonView').html(
+ '<thead><tr class="headerRow"><th class="thumbHeader">N&deg;</th><th>Title</th>' +
+ '<th class="thumbHeader">Thumb</th><th class="thumbHeader">Details</th></tr></thead>' +
+ '<tbody class="resultSet"></tbody>'
+ );
+ $.each($(data.result.episodes), jQuery.proxy(function (i, item) {
+ var episodeRow = $('<tr>').addClass('episodeRow').addClass('tr' +
+ i % 2);
+ var episodePictureImg = $('<img>').bind('click', {
+ episode: item
+ }, jQuery.proxy(this.playTVShow, this)).css('cursor', 'pointer');
+ episodePictureImg.attr('src', this.getThumbnailPath(item
+ .thumbnail));
+ var episodePicture = $('<td>').addClass('episodeThumb').append(
+ episodePictureImg).bind('click', {
+ episode: item
+ }, jQuery.proxy(this.playTVShow, this));
+ var episodeNumber = $('<td>').addClass('episodeNumber').html(item
+ .episode).bind('click', {
+ episode: item
+ }, jQuery.proxy(this.playTVShow, this));
+ var episodeTitle = $('<td>').html(item.title).bind('click', {
+ episode: item
+ }, jQuery.proxy(this.playTVShow, this));
+ var episodeDetails = $('<td class="info">').html('').bind('click', {
+ episode: item
+ }, jQuery.proxy(this.displayEpisodeDetails, this)).css('cursor',
+ 'pointer');
+ episodeRow.append(episodeNumber).append(episodeTitle).append(
+ episodePicture).append(episodeDetails);
+ episodeTable.append(episodeRow);
+ }, this));
+ episodeListingsContainer.append(episodeTable);
+ $(this.tvActiveShowContainer).append(episodeListingsContainer);
+ }
+ });
+ },
+ displayEpisodeDetails: function (event) {
+ var episodeDetails = $('<div>').attr('id', 'episode-' + event.data.episode.episodeid).addClass(
+ 'episodePopoverContainer');
+ episodeDetails.append($('<img>').attr('src', 'images/close-button.png').addClass('closeButton').bind(
+ 'click', jQuery.proxy(this.hideOverlay, this)));
+ episodeDetails.append($('<img>').attr('src', this.getThumbnailPath(event.data.episode.thumbnail))
+ .addClass('episodeCover'));
+ episodeDetails.append($('<div>').addClass('playIcon').bind('click', {
+ episode: event.data.episode
+ }, jQuery.proxy(this.playTVShow, this)));
+ var episodeTitle = $('<p>').addClass('episodeTitle');
+ var yearText = event.data.episode.year ? ' <span class="year">(' + event.data.episode.year +
+ ')</span>' : '';
+ episodeTitle.html(event.data.episode.title + yearText);
+ episodeDetails.append(episodeTitle);
+ if (event.data.episode.runtime) {
+ episodeDetails.append($('<p>').addClass('runtime').html('<strong>Runtime:</strong> ' + Math.ceil(
+ event.data.episode.runtime / 60) + ' minutes'));
+ }
+ if (event.data.episode.season) {
+ episodeDetails.append($('<p>').addClass('season').html('<strong>Season:</strong> ' + event.data
+ .episode.season));
+ }
+ if (event.data.episode.episode) {
+ episodeDetails.append($('<p>').addClass('episode').html('<strong>Episode:</strong> ' + event.data
+ .episode.episode));
+ }
+ if (event.data.episode.plot) {
+ episodeDetails.append($('<p>').addClass('plot').html('<strong>Plot:</strong> <br/><br/>' + event
+ .data.episode.plot));
+ }
+ if (event.data.episode.genre) {
+ episodeDetails.append($('<p>').addClass('genre').html('<strong>Genre:</strong> ' + event.data
+ .episode.genre));
+ }
+ if (event.data.episode.director) {
+ episodeDetails.append($('<p>').addClass('director').html('<strong>Directed By:</strong> ' + event
+ .data.episode.director));
+ }
+ this.activeCover = episodeDetails;
+ $('body').append(episodeDetails);
+ $('#overlay').show();
+ this.updatePlayButtonLocation();
+ },
+ playTVShow: function (event) {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Player.Open',
+ 'params': {
+ 'item': {
+ 'episodeid': event.data.episode.episodeid
+ }
+ },
+ 'success': function (data) {
+ this.hideOverlay();
+ }
+ });
+ },
+ hideOverlay: function (event) {
+ if (this.activeCover) {
+ $(this.activeCover).remove();
+ this.activeCover = null;
+ }
+ $('#overlay').hide();
+ },
+ updatePlayButtonLocation: function (event) {
+ var movieContainer = $('.movieCover'),
+ playIcon;
+ if (movieContainer.length > 0) {
+ playIcon = $('.playIcon');
+ if (playIcon.length > 0) {
+ var heightpi = $(movieContainer[0]).height();
+ playIcon.width(Math.floor(0.65 * heightpi));
+ playIcon.height(heightpi);
+ }
+ }
+ var episodeContainer = $('.episodeCover');
+ if (episodeContainer.length > 0) {
+ playIcon = $('.playIcon');
+ if (playIcon.length > 0) {
+ var widthpi = $(episodeContainer[0]).width();
+ playIcon.width(widthpi);
+ //assume 16/9 thumb
+ playIcon.height(Math.floor(widthpi * 9 / 16));
+ }
+ }
+ },
+ playMovie: function (event) {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Player.Open',
+ 'params': {
+ 'item': {
+ 'movieid': event.data.movie.movieid
+ }
+ },
+ 'success': function (data) {
+ this.hideOverlay();
+ }
+ });
+ },
+ displayMovieDetails: function (event) {
+ var movieDetails = $('<div>').attr('id', 'movie-' + event.data.movie.movieid).addClass(
+ 'moviePopoverContainer');
+ movieDetails.append($('<img>').attr('src', 'images/close-button.png').addClass('closeButton').bind(
+ 'click', jQuery.proxy(this.hideOverlay, this)));
+ movieDetails.append($('<img>').attr('src', this.getThumbnailPath(event.data.movie.thumbnail)).addClass(
+ 'movieCover'));
+ movieDetails.append($('<div>').addClass('playIcon').bind('click', {
+ movie: event.data.movie
+ }, jQuery.proxy(this.playMovie, this)));
+ var movieTitle = $('<p>').addClass('movieTitle');
+ var yearText = event.data.movie.year ? ' <span class="year">(' + event.data.movie.year + ')</span>' :
+ '';
+ movieTitle.html(event.data.movie.title + yearText);
+ movieDetails.append(movieTitle);
+ if (event.data.movie.runtime) {
+ movieDetails.append($('<p>').addClass('runtime').html('<strong>Runtime:</strong> ' + Math.ceil(event
+ .data.movie.runtime / 60) + ' minutes'));
+ }
+ if (event.data.movie.plot) {
+ movieDetails.append($('<p>').addClass('plot').html(event.data.movie.plot));
+ }
+ if (event.data.movie.genre) {
+ movieDetails.append($('<p>').addClass('genre').html('<strong>Genre:</strong> ' + event.data.movie
+ .genre));
+ }
+ if (event.data.movie.director) {
+ movieDetails.append($('<p>').addClass('director').html('<strong>Directed By:</strong> ' + event.data
+ .movie.director));
+ }
+ this.activeCover = movieDetails;
+ $('body').append(movieDetails);
+ $('#overlay').show();
+ this.updatePlayButtonLocation();
+ },
+ playTrack: function (event) {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Playlist.Clear',
+ 'params': {
+ 'playlistid': this.playlists["audio"]
+ },
+ 'success': function (data) {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Playlist.Add',
+ 'params': {
+ 'playlistid': this.playlists["audio"],
+ 'item': {
+ 'albumid': event.data.album.albumid
+ }
+ },
+ 'success': function (data) {
+ xbmc.rpc.request({
+ 'method': 'Player.Open',
+ 'params': {
+ 'item': {
+ 'playlistid': this.playlists["audio"],
+ 'position': event.data.itmnbr
+ }
+ },
+ 'success': function () {}
+ });
+ }
+ });
+ }
+ });
+ },
+ loadProfile: function (event) {
+ return xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Profiles.LoadProfile',
+ 'params': {
+ 'profile': event.data.profile.label
+ }
+ });
+ },
+ movieLibraryOpen: function () {
+ this.resetPage();
+ $('#movieLibrary').addClass('selected');
+ $('.contentContainer').hide();
+ var libraryContainer = $('#movieLibraryContainer');
+ if (!libraryContainer || libraryContainer.length === 0) {
+ $('#spinner').show();
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'VideoLibrary.GetMovies',
+ 'params': {
+ 'limits': {
+ 'start': 0
+ },
+ 'properties': [
+ 'genre',
+ 'director',
+ 'trailer',
+ 'tagline',
+ 'plot',
+ 'plotoutline',
+ 'title',
+ 'originaltitle',
+ 'lastplayed',
+ 'runtime',
+ 'year',
+ 'playcount',
+ 'rating',
+ 'thumbnail',
+ 'file'
+ ],
+ 'sort': {
+ 'method': 'sorttitle',
+ 'ignorearticle': true
+ }
+ },
+ 'success': function (data) {
+ if (data && data.result && data.result.movies) {
+ libraryContainer = $('<div>');
+ libraryContainer.attr('id', 'movieLibraryContainer')
+ .addClass('contentContainer');
+ $('#content').append(libraryContainer);
+ } else {
+ libraryContainer.html('');
+ }
+ $.each($(data.result.movies), jQuery.proxy(function (i, item) {
+ var floatableMovieCover = this.generateThumb('movie', item
+ .thumbnail, item.title);
+ floatableMovieCover.bind('click', {
+ movie: item
+ }, jQuery.proxy(this.displayMovieDetails, this));
+ libraryContainer.append(floatableMovieCover);
+ }, this));
+ libraryContainer.append($('<div>').addClass('footerPadding'));
+ $('#spinner').hide();
+ libraryContainer.bind('scroll', {
+ activeLibrary: libraryContainer
+ }, jQuery.proxy(this.updateScrollEffects, this));
+ libraryContainer.trigger('scroll');
+ myScroll = new iScroll('movieLibraryContainer');
+ }
+ });
+ } else {
+ libraryContainer.show();
+ libraryContainer.trigger('scroll');
+ }
+ },
+ tvshowLibraryOpen: function () {
+ this.resetPage();
+ $('#tvshowLibrary').addClass('selected');
+ $('.contentContainer').hide();
+ var libraryContainer = $('#tvshowLibraryContainer');
+ if (!libraryContainer || libraryContainer.length === 0) {
+ $('#spinner').show();
+ toggle = $('<p>').addClass('toggle');
+ togglePoster = $('<span>Poster</span>');
+ togglePoster.attr('id', 'togglePoster')
+ .css('cursor', 'pointer')
+ .bind('click', {
+ mode: 'poster'
+ }, jQuery.proxy(this.togglePosterView, this));
+ toggleBanner = $('<span>Banner</span>');
+ toggleBanner.attr('id', 'toggleBanner')
+ .css('cursor', 'pointer')
+ .addClass('activeMode')
+ .bind('click', {
+ mode: 'banner'
+ }, jQuery.proxy(this.togglePosterView, this));
+ toggleLandscape = $('<span>Landscape</span>');
+ toggleLandscape.attr('id', 'toggleLandscape')
+ .css('cursor', 'pointer')
+ .bind('click', {
+ mode: 'landscape'
+ }, jQuery.proxy(this.togglePosterView, this));
+ toggle.append(toggleBanner).append(' | ').append(togglePoster).append(' | ').append(
+ toggleLandscape);
+ this.toggle = toggle;
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'VideoLibrary.GetTVShows',
+ 'params': {
+ 'properties': [
+ 'genre',
+ 'plot',
+ 'title',
+ 'lastplayed',
+ 'episode',
+ 'year',
+ 'playcount',
+ 'rating',
+ 'thumbnail',
+ 'studio',
+ 'mpaa',
+ 'premiered'
+ ],
+ 'sort': {
+ 'method': 'sorttitle',
+ 'ignorearticle': true
+ }
+ },
+ 'success': function (data) {
+ if (data && data.result && data.result.tvshows) {
+ libraryContainer = $('<div>');
+ libraryContainer.append(toggle);
+ libraryContainer.attr('id', 'tvshowLibraryContainer')
+ .addClass('contentContainer');
+ $('#content').append(libraryContainer);
+ } else {
+ libraryContainer.html('');
+ }
+ $.each($(data.result.tvshows), jQuery.proxy(function (i, item) {
+ var floatableTVShowCover = this.generateThumb('tvshow', item
+ .thumbnail, item.title);
+ floatableTVShowCover.bind('click', {
+ tvshow: item
+ }, jQuery.proxy(this.displayTVShowDetails, this));
+ libraryContainer.append(floatableTVShowCover);
+ }, this));
+ libraryContainer.append($('<div>').addClass('footerPadding'));
+ $('#spinner').hide();
+ libraryContainer.bind('scroll', {
+ activeLibrary: libraryContainer
+ }, jQuery.proxy(this.updateScrollEffects, this));
+ libraryContainer.trigger('scroll');
+ myScroll = new iScroll('tvshowLibraryContainer');
+ if (xbmc.core.getCookie('TVView') !== null &&
+ xbmc.core.getCookie('TVView') !== 'banner'
+ ) {
+ var view = xbmc.core.getCookie('TVView');
+ switch (view) {
+ case 'poster':
+ togglePoster.trigger('click');
+ break;
+ case 'landscape':
+ toggleLandscape.trigger('click');
+ break;
+ }
+ }
+ }
+ });
+ } else {
+ libraryContainer.prepend($(".toggle").detach()).show();
+ libraryContainer.trigger('scroll');
+ }
+ },
+ profilesOpen: function () {
+ this.resetPage();
+ $('#profiles').addClass('selected');
+ $('.contentContainer').hide();
+ var libraryContainer = $('#profilesContainer');
+ if (!libraryContainer || libraryContainer.length == 0) {
+ $('#spinner').show();
+ var currentProfile = "";
+ xbmc.rpc.request({
+ 'method': 'Profiles.GetCurrentProfile',
+ 'params': {
+ 'properties': [
+ 'lockmode'
+ ]
+ },
+ 'success': function (data) {
+ if (data)
+ if (data.result)
+ currentProfile = data.result.label;
+ }
+ });
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Profiles.GetProfiles',
+ 'params': {
+ 'limits': {
+ 'start': 0
+ },
+ 'properties': [
+ 'thumbnail'
+ ],
+ 'sort': {
+ 'method': 'sorttitle',
+ 'ignorearticle': true
+ }
+ },
+ 'success': function (data) {
+ if (data && data.result && data.result.profiles) {
+ libraryContainer = $('<div>');
+ libraryContainer.attr('id', 'profilesContainer')
+ .addClass('contentContainer');
+ $('#content').append(libraryContainer);
+ } else {
+ libraryContainer.html('');
+ }
+ $.each($(data.result.profiles), jQuery.proxy(function (i, item) {
+ var itemLabel = item.label;
+ if (currentProfile == itemLabel) {
+ itemLabel = itemLabel + "*";
+ }
+ var floatableProfileThumb = this.generateThumb('profile', item
+ .thumbnail, itemLabel);
+ floatableProfileThumb.bind('click', {
+ profile: item
+ }, jQuery.proxy(this.loadProfile, this));
+ libraryContainer.append(floatableProfileThumb);
+ }, this));
+ libraryContainer.append($('<div>').addClass('footerPadding'));
+ $('#spinner').hide();
+ libraryContainer.bind('scroll', {
+ activeLibrary: libraryContainer
+ }, jQuery.proxy(this.updateScrollEffects, this));
+ libraryContainer.trigger('scroll');
+ myScroll = new iScroll('profilesContainer');
+ }
+ });
+ } else {
+ libraryContainer.show();
+ libraryContainer.trigger('scroll');
+ }
+ },
+ updateScrollEffects: function (event) {
+ if (event.data.activeLibrary && $(event.data.activeLibrary).scrollTop() > 0) {
+ $('#topScrollFade').fadeIn();
+ } else {
+ $('#topScrollFade').fadeOut();
+ }
+ },
+ startSlideshow: function (event) {
+ xbmc.rpc.request({
+ 'method': 'Player.Open',
+ 'params': {
+ 'item': {
+ 'recursive': 'true',
+ 'random': 'true',
+ 'path': this.replaceAll(event.data.directory.file, "\\", "\\\\")
+ }
+ },
+ 'success': function () {}
+ });
+ },
+ showDirectory: function (event) {
+ var directory = event.data.directory.file;
+ var jsonDirectory = this.replaceAll(directory, "\\", "\\\\");
+ this.resetPage();
+ $('#pictureLibrary').addClass('selected');
+ $('.contentContainer').hide();
+ var libraryContainer = $('#pictureLibraryDirContainer' + directory);
+ if (!libraryContainer || libraryContainer.length === 0) {
+ $('#spinner').show();
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Files.GetDirectory',
+ 'params': {
+ 'media': 'pictures',
+ 'directory': jsonDirectory
+ },
+ 'success': function (data) {
+ if (data && data.result && (data.result.directories || data.result.files)) {
+ libraryContainer = $('<div>');
+ libraryContainer.attr('id', 'pictureLibraryDirContainer' + directory)
+ .addClass('contentContainer');
+ $('#content').append(libraryContainer);
+ var breadcrumb = $('<div>');
+ var seperator = '/';
+ var item = '';
+ var directoryArray = directory.split(seperator);
+ jQuery.each(directoryArray, function (i, v) {
+ if (v !== '') {
+ item += v + seperator;
+ breadcrumb.append($('<div>').text(' > ' + v).css('float',
+ 'left').addClass('breadcrumb'));
+ }
+ });
+ libraryContainer.append(breadcrumb);
+ libraryContainer.append($('<div>').css('clear', 'both'));
+ if (data.result.files) {
+ $.each($(data.result.files), jQuery.proxy(function (i, item) {
+ if (item.filetype == "file") {
+ var floatableImage = this.generateThumb('image',
+ item.file, item.label);
+ libraryContainer.append(floatableImage);
+ } else if (item.filetype == "directory") {
+ var floatableShare = this.generateThumb('directory',
+ item.thumbnail, item.label);
+ floatableShare.bind('click', {
+ directory: item
+ }, jQuery.proxy(this.showDirectory, this));
+ libraryContainer.append(floatableShare);
+ }
+ }, this));
+ }
+ libraryContainer.append($('<div>').addClass('footerPadding'));
+ } else {
+ libraryContainer.html('');
+ }
+ $('#spinner').hide();
+ libraryContainer.bind('scroll', {
+ activeLibrary: libraryContainer
+ }, jQuery.proxy(this.updateScrollEffects, this));
+ libraryContainer.trigger('scroll');
+ myScroll = new iScroll('#pictureLibraryDirContainer' + directory);
+ }
+ });
+ } else {
+ libraryContainer.show();
+ libraryContainer.trigger('scroll');
+ }
+ },
+ pictureLibraryOpen: function () {
+ this.resetPage();
+ $('#pictureLibrary').addClass('selected');
+ $('.contentContainer').hide();
+ var libraryContainer = $('#pictureLibraryContainer');
+ if (!libraryContainer || libraryContainer.length === 0) {
+ $('#spinner').show();
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Files.GetSources',
+ 'params': {
+ 'media': 'pictures'
+ },
+ 'success': function (data) {
+ if (data && data.result && data.result.shares) {
+ libraryContainer = $('<div>');
+ libraryContainer.attr('id', 'pictureLibraryContainer')
+ .addClass('contentContainer');
+ $('#content').append(libraryContainer);
+ } else {
+ libraryContainer.html('');
+ }
+ $.each($(data.result.shares), jQuery.proxy(function (i, item) {
+ var floatableShare = this.generateThumb('directory', item
+ .thumbnail, item.label);
+ floatableShare.bind('click', {
+ directory: item
+ }, jQuery.proxy(this.showDirectory, this));
+ libraryContainer.append(floatableShare);
+ }, this));
+ libraryContainer.append($('<div>').addClass('footerPadding'));
+ $('#spinner').hide();
+ libraryContainer.bind('scroll', {
+ activeLibrary: libraryContainer
+ }, jQuery.proxy(this.updateScrollEffects, this));
+ libraryContainer.trigger('scroll');
+ myScroll = new iScroll('#pictureLibraryContainer');
+ }
+ });
+ } else {
+ libraryContainer.show();
+ libraryContainer.trigger('scroll');
+ }
+ }
+};
diff --git a/debian/webinterface-default/js/NowPlayingManager.js b/debian/webinterface-default/js/NowPlayingManager.js
new file mode 100755
index 0000000..fb34f74
--- /dev/null
+++ b/debian/webinterface-default/js/NowPlayingManager.js
@@ -0,0 +1,661 @@
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+var NowPlayingManager = function () {
+ this.init();
+ return true;
+}
+
+NowPlayingManager.prototype = {
+ updateCounter: 0,
+ activePlayer: "",
+ activePlayerId: -1,
+ currentItem: -1,
+ playing: false,
+ paused: false,
+ playlistid: -1,
+
+ init: function () {
+ $('#pbPause').hide(); /* Assume we are not playing something */
+ this.bindPlaybackControls();
+ this.updateState();
+ $('#nextTrack').bind('click', jQuery.proxy(this.showPlaylist, this));
+ $('#nowPlayingPlaylist').bind('click', function () {
+ return false;
+ });
+ $(window).bind('click', jQuery.proxy(this.hidePlaylist, this));
+ },
+ updateState: function () {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Player.GetActivePlayers',
+ 'timeout': 3000,
+ 'success': function (data) {
+ if (data && data.result && data.result.length > 0) {
+ if (data.result[0].playerid != this.activePlayerId) {
+ this.activePlayerId = data.result[0].playerid;
+ this.activePlayer = data.result[0].type;
+ if (this.activePlayer == "audio") {
+ this.stopVideoPlaylistUpdate();
+ this.displayAudioNowPlaying();
+ } else if (this.activePlayer == "video") {
+ this.stopAudioPlaylistUpdate();
+ this.displayVideoNowPlaying();
+ } else {
+ this.stopVideoPlaylistUpdate();
+ this.stopAudioPlaylistUpdate();
+ this.activePlayer = "";
+ this.activePlayerId = -1;
+ }
+
+ this.stopRefreshTime();
+ this.updatePlayer();
+ }
+ } else if (!data || !data.result || data.result.length <= 0) {
+ this.stopVideoPlaylistUpdate();
+ this.stopAudioPlaylistUpdate();
+ this.activePlayer = "";
+ this.activePlayerId = -1;
+ }
+
+ if (this.activePlayerId >= 0) {
+ this.showFooter();
+ } else {
+ this.stopRefreshTime();
+ this.hideFooter();
+ }
+
+ setTimeout(jQuery.proxy(this.updateState, this), 1000);
+ },
+ 'error': function (data, error) {
+ xbmc.core.displayCommunicationError();
+ setTimeout(jQuery.proxy(this.updateState, this), 2000);
+ }
+ });
+ },
+ updatePlayer: function () {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Player.GetProperties',
+ 'params': {
+ 'playerid': this.activePlayerId,
+ 'properties': [
+ 'playlistid',
+ 'speed',
+ 'position',
+ 'totaltime',
+ 'time'
+ ]
+ },
+ 'success': function (data) {
+ if (data && data.result) {
+ this.playlistid = data.result.playlistid;
+ this.playing = data.result.speed != 0;
+ this.paused = data.result.speed == 0;
+ this.currentItem = data.result.position;
+ this.trackBaseTime = xbmc.core.timeToDuration(data.result.time);
+ this.trackDurationTime = xbmc.core.timeToDuration(data.result.totaltime);
+ if (!this.autoRefreshAudioData && !this.autoRefreshVideoData && this.playing) {
+ if (this.activePlayer == 'audio') {
+ this.autoRefreshAudioData = true;
+ this.refreshAudioData();
+ } else if (this.activePlayer == 'video') {
+ this.autoRefreshVideoData = true;
+ this.refreshVideoData();
+ }
+ }
+ }
+ if ((this.autoRefreshAudioData || this.autoRefreshVideoData) && !this
+ .activeItemTimer) {
+ this.activeItemTimer = 1;
+ setTimeout(jQuery.proxy(this.updateActiveItemDurationLoop, this), 1000);
+ }
+ }
+ });
+ },
+ bindPlaybackControls: function () {
+ $('#pbNext').bind('click', jQuery.proxy(this.nextTrack, this));
+ $('#pbPrev').bind('click', jQuery.proxy(this.prevTrack, this));
+ $('#pbStop').bind('click', jQuery.proxy(this.stopTrack, this));
+ $('#pbPlay').bind('click', jQuery.proxy(this.playPauseTrack, this));
+ $('#pbPause').bind('click', jQuery.proxy(this.playPauseTrack, this));
+ that = this
+ $(document).keypress(function (event) {
+ switch (event.which) {
+ case 32: //spacebar
+ event.preventDefault()
+ jQuery.proxy(that.playPauseTrack, that)();
+ break;
+ case 120: //x key
+ event.preventDefault()
+ jQuery.proxy(that.stopTrack, that)();
+ break;
+ case 44: //period key
+ event.preventDefault()
+ jQuery.proxy(that.nextTrack, that)();
+ break;
+ case 46: //comma key
+ event.preventDefault()
+ jQuery.proxy(that.prevTrack, that)();
+ break;
+ }
+ });
+ },
+ showPlaylist: function () {
+ $('#nextText').html('Playlist: ');
+ $('#nowPlayingPlaylist').show();
+ return false;
+ },
+ hidePlaylist: function () {
+ $('#nextText').html('Next: ');
+ $('#nowPlayingPlaylist').hide();
+ return false;
+ },
+ hideFooter: function () {
+ $('#footerPopover').hide();
+ $('#overlay').css('bottom', '0px');
+ },
+ showFooter: function () {
+ $('#footerPopover').show();
+ $('#overlay').css('bottom', '150px');
+ },
+ nextTrack: function () {
+ if (this.activePlayer) {
+ xbmc.rpc.request({
+ 'method': 'Player.GoTo',
+ 'params': {
+ 'playerid': this.activePlayerId,
+ 'to': 'next'
+ },
+ 'success': function () {}
+ });
+ }
+ },
+ prevTrack: function () {
+ if (this.activePlayer) {
+ xbmc.rpc.request({
+ 'method': 'Player.GoTo',
+ 'params': {
+ 'playerid': this.activePlayerId,
+ 'to': 'previous'
+ },
+ 'success': function () {}
+ });
+ }
+ },
+ stopTrack: function () {
+ if (this.activePlayer) {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Player.Stop',
+ 'params': {
+ 'playerid': this.activePlayerId
+ },
+ 'success': function (data) {
+ if (data && data.result == 'OK') {
+ this.playing = false;
+ this.paused = false;
+ this.trackBaseTime = 0;
+ this.trackDurationTime = 0;
+ this.showPlayButton();
+ }
+ }
+ });
+ }
+ },
+ playPauseTrack: function () {
+ if (this.activePlayer) {
+ var method = ((this.playing || this.paused) ? 'Player.PlayPause' : 'Playlist.Play');
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': method,
+ 'params': {
+ 'playerid': this.activePlayerId
+ },
+ 'success': function (data) {
+ if (data && data.result) {
+ this.playing = data.result.speed != 0;
+ this.paused = data.result.speed == 0;
+ if (this.playing) {
+ this.showPauseButton();
+ } else {
+ this.showPlayButton();
+ }
+ }
+ }
+ });
+ }
+ },
+ showPauseButton: function () {
+ $('#pbPause').show();
+ $('#pbPlay').hide();
+ },
+ showPlayButton: function () {
+ $('#pbPause').hide();
+ $('#pbPlay').show();
+ },
+ displayAudioNowPlaying: function () {
+ if (!this.autoRefreshAudioPlaylist) {
+ this.autoRefreshAudioPlaylist = true;
+ this.updateAudioPlaylist();
+ }
+ },
+ displayVideoNowPlaying: function () {
+ if (!this.autoRefreshVideoPlaylist) {
+ this.autoRefreshVideoPlaylist = true;
+ this.updateVideoPlaylist();
+ }
+ },
+ playPlaylistItem: function (sender) {
+ var sequenceId = $(sender.currentTarget).attr('seq');
+ if (!this.activePlaylistItem || (this.activePlaylistItem !== undefined && sequenceId != this
+ .activePlaylistItem.seq)) {
+ xbmc.rpc.request({
+ 'method': 'Player.GoTo',
+ 'params': {
+ 'playerid': this.activePlayerId,
+ 'to': sequenceId
+ },
+ 'success': function () {}
+ });
+ }
+ this.hidePlaylist();
+ },
+ playlistChanged: function (newPlaylist) {
+ if (this.activePlaylist && !newPlaylist || !this.activePlaylist && newPlaylist) {
+ return true;
+ }
+ if (!this.activePlaylist && !newPlaylist) {
+ return false;
+ }
+ if (this.activePlaylist.length != newPlaylist.length) {
+ return true;
+ }
+ for (var i = 0; i < newPlaylist.length; i++) {
+ if (!this.comparePlaylistItems(this.activePlaylist[i], newPlaylist[i])) {
+ return true;
+ }
+ }
+ return false;
+ },
+ updateAudioPlaylist: function () {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Playlist.GetItems',
+ 'params': {
+ 'playlistid': this.playlistid,
+ 'properties': [
+ 'title',
+ 'album',
+ 'artist',
+ 'duration',
+ 'thumbnail'
+ ]
+ },
+ 'success': function (data) {
+ if (data && data.result && data.result.items && data.result.items.length > 0 && data
+ .result.limits.total > 0) {
+ if (!this.activePlaylistItem || this.playlistChanged(data.result.items) || (this
+ .activePlaylistItem && (this.activePlaylistItem.seq != this.currentItem)
+ )) {
+ var ul = $('<ul>');
+ var activeItem;
+ $.each($(data.result.items), jQuery.proxy(function (i, item) {
+ var li = $('<li>');
+ var code = '<span class="duration">' + xbmc.core
+ .durationToString(item.duration) +
+ '</span><div class="trackInfo" title="' + item.title +
+ ' - ' + item.artist + '"><span class="trackTitle">' +
+ item.title + '</span> - <span class="trackArtist">' +
+ item.artist + '</span></div>';
+ if (i == this.currentItem) {
+ activeItem = item;
+ activeItem.seq = i;
+ li.addClass('activeItem');
+ }
+ if (i == (this.currentItem + 1)) {
+ $('#nextTrack').html(code).show();
+ }
+ li.bind('click', jQuery.proxy(this.playPlaylistItem, this));
+ ul.append(li.attr('seq', i).html(code));
+ }, this));
+ if (data.result.limits.total > 1) {
+ if (activeItem && data.result.limits.total - 1 == activeItem.seq) {
+ $('#nextTrack').html(
+ '<div class="trackInfo">Last track in playlist</div>')
+ .show();
+ }
+ $('#nextText').show();
+ $('#nowPlayingPlaylist').html('').append(ul);
+ } else {
+ $('#nextText').hide();
+ $('#nowPlayingPlaylist').hide();
+ $('#nextTrack').hide();
+ }
+ if (!this.comparePlaylistItems(activeItem, this.activePlaylistItem)) {
+ this.activePlaylistItem = activeItem;
+ if (!this.updateActiveItemDurationRunOnce) {
+ this.updateActiveItemDurationRunOnce = true;
+ this.updatePlayer();
+ }
+ } else if (!activeItem) {
+ this.stopRefreshTime();
+ }
+ this.activePlaylist = data.result.items;
+ $('#videoDescription').hide();
+ $('#audioDescription').show();
+ $('#nowPlayingPanel').show();
+ }
+ } else {
+ this.activePlaylist = null;
+ $('#audioDescription').hide();
+ $('#nowPlayingPanel').hide();
+ }
+ if (this.autoRefreshAudioPlaylist) {
+ setTimeout(jQuery.proxy(this.updateAudioPlaylist, this), 1000);
+ }
+ },
+ 'error': function (data) {
+ xbmc.core.displayCommunicationError();
+ if (this.autoRefreshAudioPlaylist) {
+ setTimeout(jQuery.proxy(this.updateAudioPlaylist, this),
+ 2000); /* Slow down request period */
+ }
+ }
+ });
+ },
+ stopAudioPlaylistUpdate: function () {
+ this.autoRefreshAudioPlaylist = false;
+ this.updateActiveItemDurationRunOnce = false;
+ },
+ stopVideoPlaylistUpdate: function () {
+ this.autoRefreshVideoPlaylist = false;
+ this.updateActiveItemDurationRunOnce = false;
+ },
+ updateActiveItemDurationLoop: function () {
+ this.activeItemTimer = 0;
+ this.updatePlayer();
+ },
+ refreshAudioDataLoop: function () {
+ this.audioRefreshTimer = 0;
+ this.refreshAudioData();
+ },
+ refreshAudioData: function () {
+ if (this.autoRefreshAudioData && !this.audioRefreshTimer) {
+ this.audioRefreshTimer = 1;
+ setTimeout(jQuery.proxy(this.refreshAudioDataLoop, this), 1000);
+ }
+ if (this.playing && !this.paused) {
+ this.trackBaseTime++;
+ }
+ if (this.paused) {
+ this.showPlayButton();
+ } else if (this.playing) {
+ this.showPauseButton();
+ }
+ if (this.activePlaylistItem) {
+ if (this.activePlaylistItem != this.lastPlaylistItem) {
+ this.lastPlaylistItem = this.activePlaylistItem;
+ var imgPath = xbmc.core.DEFAULT_ALBUM_COVER;
+ if (this.activePlaylistItem.thumbnail) {
+ imgPath = 'image/' + encodeURI(this.activePlaylistItem.thumbnail);
+ }
+ $('#audioCoverArt').html('<img src="' + imgPath + '" alt="' + this.activePlaylistItem.album +
+ ' cover art">');
+ $('#audioTrackTitle').html('<span title="' + this.activePlaylistItem.title + '">' + this
+ .activePlaylistItem.title + '</span>');
+ if (this.activePlaylistItem.album) {
+ $('#audioAlbumTitle').html('<span title="' + this.activePlaylistItem.album + '">' + this
+ .activePlaylistItem.album + '</span>')
+ .show();
+ } else {
+ $('#audioAlbumTitle').hide();
+ }
+ $('#audioArtistTitle').html(this.activePlaylistItem.artist);
+ $('#progressBar').attr('style', '');
+ }
+ $('#audioDuration').html(xbmc.core.durationToString(this.trackBaseTime) + ' / ' + xbmc.core
+ .durationToString(this.trackDurationTime));
+ var buttonWidth = $('#progressBar .progressIndicator').width();
+ var progressBarWidth = (this.trackBaseTime / this.trackDurationTime) * 100;
+ var progressSliderPosition = Math.ceil(($('#progressBar').width() / 100) * progressBarWidth) -
+ buttonWidth;
+ if (progressSliderPosition < 0) {
+ progressSliderPosition = 0;
+ }
+ if (progressBarWidth <= 100) {
+ $('#progressBar .elapsedTime').width(progressBarWidth + '%');
+ $('#progressBar .progressIndicator').css('left', progressSliderPosition);
+ }
+ }
+ },
+ refreshVideoDataLoop: function () {
+ this.videoRefreshTimer = 0;
+ this.refreshVideoData();
+ },
+ refreshVideoData: function () {
+ if (this.autoRefreshVideoData && !this.videoRefreshTimer) {
+ this.videoRefreshTimer = 1;
+ setTimeout(jQuery.proxy(this.refreshVideoDataLoop, this), 1500);
+ }
+ if (this.playing && !this.paused) {
+ this.trackBaseTime++;
+ }
+ if (this.paused) {
+ this.showPlayButton();
+ } else if (this.playing) {
+ this.showPauseButton();
+ }
+ if (this.activePlaylistItem) {
+ if (this.activePlaylistItem != this.lastPlaylistItem) {
+ this.lastPlaylistItem = this.activePlaylistItem;
+ var imgPath = xbmc.core.DEFAULT_VIDEO_COVER;
+ if (this.activePlaylistItem.thumbnail) {
+ imgPath = 'image/' + encodeURI(this.activePlaylistItem.thumbnail);
+ }
+ $('#videoCoverArt').html('<img src="' + imgPath + '" alt="' + this.activePlaylistItem.title +
+ ' cover art">');
+ $('#videoShowTitle').html(this.activePlaylistItem.showtitle || '&nbsp;');
+ var extra = '';
+ if (this.activePlaylistItem.season >= 0 && this.activePlaylistItem.episode >= 0) {
+ extra = this.activePlaylistItem.season + 'x' + this.activePlaylistItem.episode + ' ';
+ }
+ $('#videoTitle').html(extra + this.activePlaylistItem.title);
+ }
+ $('#videoDuration').html(xbmc.core.durationToString(this.trackBaseTime) + ' / ' + xbmc.core
+ .durationToString(this.trackDurationTime));
+ var buttonWidth = $('#progressBar .progressIndicator').width();
+ var progressBarWidth = (this.trackBaseTime / this.trackDurationTime) * 100;
+ var progressSliderPosition = Math.ceil(($('#progressBar').width() / 100) * progressBarWidth) -
+ buttonWidth;
+ if (progressSliderPosition < 0) {
+ progressSliderPosition = 0;
+ }
+ if (progressBarWidth <= 100) {
+ $('#progressBar .elapsedTime').width(progressBarWidth + '%');
+ $('#progressBar .progressIndicator').css('left', progressSliderPosition);
+ }
+ }
+ },
+ stopRefreshTime: function () {
+ this.autoRefreshAudioData = false;
+ this.autoRefreshVideoData = false;
+ },
+ comparePlaylistItems: function (item1, item2) {
+ if (!item1 || !item2) {
+ if (!item1 && !item2) {
+ return true;
+ }
+ return false;
+ }
+ if (item1.title != item2.title) {
+ return false;
+ }
+ if (item1.album != item2.album) {
+ return false;
+ }
+ if (item1.artist != item2.artist) {
+ return false;
+ }
+ if (item1.duration != item2.duration) {
+ return false;
+ }
+ if (item1.label != item2.label) {
+ return false;
+ }
+ if (item1.season != item2.season) {
+ return false;
+ }
+ if (item1.episode != item2.episode) {
+ return false;
+ }
+ return true;
+ },
+ updateVideoPlaylist: function () {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Playlist.GetItems',
+ 'params': {
+ 'playlistid': this.playlistid,
+ 'properties': [
+ 'title',
+ 'season',
+ 'episode',
+ 'plot',
+ 'runtime',
+ 'showtitle',
+ 'thumbnail'
+ ]
+ },
+ 'success': function (data) {
+ if (data && data.result && data.result.items && data.result.items.length > 0 && data
+ .result.limits.total > 0) {
+ if (this.playlistChanged(data.result.items)) {
+ var ul = $('<ul>');
+ var activeItem;
+ $.each($(data.result.items), jQuery.proxy(function (i, item) {
+ var li = $('<li>');
+ var extra = '';
+ if (item.season >= 0 && item.episode >= 0) {
+ extra = item.season + 'x' + item.episode + ' ';
+ }
+ var code = '<span class="duration">' + xbmc.core
+ .durationToString(item.runtime) +
+ '</span><div class="trackInfo" title="' + extra + item
+ .title + '"><span class="trackTitle">' + extra + item
+ .title + '</span></div>';
+ if (i == this.currentItem) {
+ activeItem = item;
+ activeItem.seq = i;
+ li.addClass('activeItem');
+ }
+ if (i == (this.currentItem + 1)) {
+ $('#nextTrack').html(code).show();
+ }
+ li.bind('click', jQuery.proxy(this.playPlaylistItem, this));
+ ul.append(li.attr('seq', i).html(code));
+ }, this));
+ if (data.result.limits.total > 1) {
+ $('#nextText').show();
+ if (activeItem && data.result.limits.total == activeItem.seq) {
+ $('#nextTrack').html(
+ '<div class="trackInfo">Last track in playlist</div>')
+ .show();
+ }
+ $('#nowPlayingPlaylist').html('').append(ul);
+ } else {
+ $('#nextText').hide();
+ $('#nowPlayingPlaylist').hide();
+ $('#nextTrack').hide();
+ }
+ if (!this.comparePlaylistItems(activeItem, this.activePlaylistItem)) {
+ this.activePlaylistItem = activeItem;
+ if (!this.updateActiveItemDurationRunOnce) {
+ this.updateActiveItemDurationRunOnce = true;
+ this.updatePlayer();
+ }
+ } else if (!activeItem) {
+ this.stopRefreshTime();
+ }
+ this.activePlaylist = data.result.items;
+ $('#videoDescription').show();
+ $('#audioDescription').hide();
+ $('#nowPlayingPanel').show();
+ }
+ } else {
+ xbmc.rpc.request({
+ 'context': this,
+ 'method': 'Player.GetItem',
+ 'params': {
+ 'playerid': this.activePlayerId,
+ 'properties': [
+ 'title',
+ 'season',
+ 'episode',
+ 'plot',
+ 'runtime',
+ 'showtitle',
+ 'thumbnail'
+ ]
+ },
+ 'success': function (data) {
+ if (data && data.result && data.result.item) {
+ this.activePlaylistItem = data.result.item;
+ if (!this.updateActiveItemDurationRunOnce) {
+ this.updateActiveItemDurationRunOnce = true;
+ this.updatePlayer();
+ }
+
+ $('#nextText').hide();
+ $('#nowPlayingPlaylist').hide();
+ $('#nextTrack').hide();
+
+ $('#videoDescription').show();
+ $('#audioDescription').hide();
+ $('#nowPlayingPanel').show();
+ } else {
+ this.activePlaylist = null;
+ $('#videoDescription').hide();
+ $('#nowPlayingPanel').hide();
+ }
+ },
+ 'error': function (data) {
+ xbmc.core.displayCommunicationError();
+ if (this.autoRefreshVideoPlaylist) {
+ setTimeout(jQuery.proxy(this.updateVideoPlaylist, this),
+ 2000); /* Slow down request period */
+ }
+ }
+ });
+ }
+ if (this.autoRefreshVideoPlaylist) {
+ setTimeout(jQuery.proxy(this.updateVideoPlaylist, this), 1000);
+ }
+ },
+ 'error': function (data) {
+ xbmc.core.displayCommunicationError();
+ if (this.autoRefreshVideoPlaylist) {
+ setTimeout(jQuery.proxy(this.updateVideoPlaylist, this),
+ 2000); /* Slow down request period */
+ }
+ }
+ });
+ }
+} \ No newline at end of file
diff --git a/debian/webinterface-default/js/json2.js b/debian/webinterface-default/js/json2.js
new file mode 100644
index 0000000..edb7751
--- /dev/null
+++ b/debian/webinterface-default/js/json2.js
@@ -0,0 +1,492 @@
+/*
+ json2.js
+ 2012-10-08
+
+ Public Domain.
+
+ NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
+
+ See http://www.JSON.org/js.html
+
+
+ This code should be minified before deployment.
+ See http://javascript.crockford.com/jsmin.html
+
+ USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
+ NOT CONTROL.
+
+
+ This file creates a global JSON object containing two methods: stringify
+ and parse.
+
+ JSON.stringify(value, replacer, space)
+ value any JavaScript value, usually an object or array.
+
+ replacer an optional parameter that determines how object
+ values are stringified for objects. It can be a
+ function or an array of strings.
+
+ space an optional parameter that specifies the indentation
+ of nested structures. If it is omitted, the text will
+ be packed without extra whitespace. If it is a number,
+ it will specify the number of spaces to indent at each
+ level. If it is a string (such as '\t' or '&nbsp;'),
+ it contains the characters used to indent at each level.
+
+ This method produces a JSON text from a JavaScript value.
+
+ When an object value is found, if the object contains a toJSON
+ method, its toJSON method will be called and the result will be
+ stringified. A toJSON method does not serialize: it returns the
+ value represented by the name/value pair that should be serialized,
+ or undefined if nothing should be serialized. The toJSON method
+ will be passed the key associated with the value, and this will be
+ bound to the value
+
+ For example, this would serialize Dates as ISO strings.
+
+ Date.prototype.toJSON = function (key) {
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ return this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z';
+ };
+
+ You can provide an optional replacer method. It will be passed the
+ key and value of each member, with this bound to the containing
+ object. The value that is returned from your method will be
+ serialized. If your method returns undefined, then the member will
+ be excluded from the serialization.
+
+ If the replacer parameter is an array of strings, then it will be
+ used to select the members to be serialized. It filters the results
+ such that only members with keys listed in the replacer array are
+ stringified.
+
+ Values that do not have JSON representations, such as undefined or
+ functions, will not be serialized. Such values in objects will be
+ dropped; in arrays they will be replaced with null. You can use
+ a replacer function to replace those with JSON values.
+ JSON.stringify(undefined) returns undefined.
+
+ The optional space parameter produces a stringification of the
+ value that is filled with line breaks and indentation to make it
+ easier to read.
+
+ If the space parameter is a non-empty string, then that string will
+ be used for indentation. If the space parameter is a number, then
+ the indentation will be that many spaces.
+
+ Example:
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}]);
+ // text is '["e",{"pluribus":"unum"}]'
+
+
+ text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
+ // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
+
+ text = JSON.stringify([new Date()], function (key, value) {
+ return this[key] instanceof Date ?
+ 'Date(' + this[key] + ')' : value;
+ });
+ // text is '["Date(---current time---)"]'
+
+
+ JSON.parse(text, reviver)
+ This method parses a JSON text to produce an object or array.
+ It can throw a SyntaxError exception.
+
+ The optional reviver parameter is a function that can filter and
+ transform the results. It receives each of the keys and values,
+ and its return value is used instead of the original value.
+ If it returns what it received, then the structure is not modified.
+ If it returns undefined then the member is deleted.
+
+ Example:
+
+ // Parse the text. Values that look like ISO date strings will
+ // be converted to Date objects.
+
+ myData = JSON.parse(text, function (key, value) {
+ var a;
+ if (typeof value === 'string') {
+ a =
+/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
+ if (a) {
+ return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
+ +a[5], +a[6]));
+ }
+ }
+ return value;
+ });
+
+ myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
+ var d;
+ if (typeof value === 'string' &&
+ value.slice(0, 5) === 'Date(' &&
+ value.slice(-1) === ')') {
+ d = new Date(value.slice(5, -1));
+ if (d) {
+ return d;
+ }
+ }
+ return value;
+ });
+
+
+ This is a reference implementation. You are free to copy, modify, or
+ redistribute.
+*/
+
+/*jslint evil: true, regexp: true */
+
+/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
+ call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
+ getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
+ lastIndex, length, parse, prototype, push, replace, slice, stringify,
+ test, toJSON, toString, valueOf
+*/
+
+
+// Create a JSON object only if one does not already exist. We create the
+// methods in a closure to avoid creating global variables.
+
+if (typeof JSON !== 'object') {
+ JSON = {};
+}
+
+(function () {
+ 'use strict';
+
+ function f(n) {
+ // Format integers to have at least two digits.
+ return n < 10 ? '0' + n : n;
+ }
+
+ if (typeof Date.prototype.toJSON !== 'function') {
+
+ Date.prototype.toJSON = function (key) {
+
+ return isFinite(this.valueOf()) ?
+ this.getUTCFullYear() + '-' +
+ f(this.getUTCMonth() + 1) + '-' +
+ f(this.getUTCDate()) + 'T' +
+ f(this.getUTCHours()) + ':' +
+ f(this.getUTCMinutes()) + ':' +
+ f(this.getUTCSeconds()) + 'Z' :
+ null;
+ };
+
+ String.prototype.toJSON =
+ Number.prototype.toJSON =
+ Boolean.prototype.toJSON = function (key) {
+ return this.valueOf();
+ };
+ }
+
+ var cx =
+ /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ escapable =
+ /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ gap,
+ indent,
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"': '\\"',
+ '\\': '\\\\'
+ },
+ rep;
+
+
+ function quote(string) {
+
+ // If the string contains no control characters, no quote characters, and no
+ // backslash characters, then we can safely slap some quotes around it.
+ // Otherwise we must also replace the offending characters with safe escape
+ // sequences.
+
+ escapable.lastIndex = 0;
+ return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
+ var c = meta[a];
+ return typeof c === 'string' ?
+ c :
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ }) + '"' : '"' + string + '"';
+ }
+
+
+ function str(key, holder) {
+
+ // Produce a string from holder[key].
+
+ var i, // The loop counter.
+ k, // The member key.
+ v, // The member value.
+ length,
+ mind = gap,
+ partial,
+ value = holder[key];
+
+ // If the value has a toJSON method, call it to obtain a replacement value.
+
+ if (value && typeof value === 'object' &&
+ typeof value.toJSON === 'function') {
+ value = value.toJSON(key);
+ }
+
+ // If we were called with a replacer function, then call the replacer to
+ // obtain a replacement value.
+
+ if (typeof rep === 'function') {
+ value = rep.call(holder, key, value);
+ }
+
+ // What happens next depends on the value's type.
+
+ switch (typeof value) {
+ case 'string':
+ return quote(value);
+
+ case 'number':
+
+ // JSON numbers must be finite. Encode non-finite numbers as null.
+
+ return isFinite(value) ? String(value) : 'null';
+
+ case 'boolean':
+ case 'null':
+
+ // If the value is a boolean or null, convert it to a string. Note:
+ // typeof null does not produce 'null'. The case is included here in
+ // the remote chance that this gets fixed someday.
+
+ return String(value);
+
+ // If the type is 'object', we might be dealing with an object or an array or
+ // null.
+
+ case 'object':
+
+ // Due to a specification blunder in ECMAScript, typeof null is 'object',
+ // so watch out for that case.
+
+ if (!value) {
+ return 'null';
+ }
+
+ // Make an array to hold the partial results of stringifying this object value.
+
+ gap += indent;
+ partial = [];
+
+ // Is the value an array?
+
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
+
+ // The value is an array. Stringify every element. Use null as a placeholder
+ // for non-JSON values.
+
+ length = value.length;
+ for (i = 0; i < length; i += 1) {
+ partial[i] = str(i, value) || 'null';
+ }
+
+ // Join all of the elements together, separated with commas, and wrap them in
+ // brackets.
+
+ v = partial.length === 0 ?
+ '[]' :
+ gap ?
+ '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' :
+ '[' + partial.join(',') + ']';
+ gap = mind;
+ return v;
+ }
+
+ // If the replacer is an array, use it to select the members to be stringified.
+
+ if (rep && typeof rep === 'object') {
+ length = rep.length;
+ for (i = 0; i < length; i += 1) {
+ if (typeof rep[i] === 'string') {
+ k = rep[i];
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ } else {
+
+ // Otherwise, iterate through all of the keys in the object.
+
+ for (k in value) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
+ v = str(k, value);
+ if (v) {
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
+ }
+ }
+ }
+ }
+
+ // Join all of the member texts together, separated with commas,
+ // and wrap them in braces.
+
+ v = partial.length === 0 ?
+ '{}' :
+ gap ?
+ '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' :
+ '{' + partial.join(',') + '}';
+ gap = mind;
+ return v;
+ }
+ }
+
+ // If the JSON object does not yet have a stringify method, give it one.
+
+ if (typeof JSON.stringify !== 'function') {
+ JSON.stringify = function (value, replacer, space) {
+
+ // The stringify method takes a value and an optional replacer, and an optional
+ // space parameter, and returns a JSON text. The replacer can be a function
+ // that can replace values, or an array of strings that will select the keys.
+ // A default replacer method can be provided. Use of the space parameter can
+ // produce text that is more easily readable.
+
+ var i;
+ gap = '';
+ indent = '';
+
+ // If the space parameter is a number, make an indent string containing that
+ // many spaces.
+
+ if (typeof space === 'number') {
+ for (i = 0; i < space; i += 1) {
+ indent += ' ';
+ }
+
+ // If the space parameter is a string, it will be used as the indent string.
+
+ } else if (typeof space === 'string') {
+ indent = space;
+ }
+
+ // If there is a replacer, it must be a function or an array.
+ // Otherwise, throw an error.
+
+ rep = replacer;
+ if (replacer && typeof replacer !== 'function' &&
+ (typeof replacer !== 'object' ||
+ typeof replacer.length !== 'number')) {
+ throw new Error('JSON.stringify');
+ }
+
+ // Make a fake root object containing our value under the key of ''.
+ // Return the result of stringifying the value.
+
+ return str('', {
+ '': value
+ });
+ };
+ }
+
+
+ // If the JSON object does not yet have a parse method, give it one.
+
+ if (typeof JSON.parse !== 'function') {
+ JSON.parse = function (text, reviver) {
+
+ // The parse method takes a text and an optional reviver function, and returns
+ // a JavaScript value if the text is a valid JSON text.
+
+ var j;
+
+ function walk(holder, key) {
+
+ // The walk method is used to recursively walk the resulting structure so
+ // that modifications can be made.
+
+ var k, v, value = holder[key];
+ if (value && typeof value === 'object') {
+ for (k in value) {
+ if (Object.prototype.hasOwnProperty.call(value, k)) {
+ v = walk(value, k);
+ if (v !== undefined) {
+ value[k] = v;
+ } else {
+ delete value[k];
+ }
+ }
+ }
+ }
+ return reviver.call(holder, key, value);
+ }
+
+
+ // Parsing happens in four stages. In the first stage, we replace certain
+ // Unicode characters with escape sequences. JavaScript handles many characters
+ // incorrectly, either silently deleting them, or treating them as line endings.
+
+ text = String(text);
+ cx.lastIndex = 0;
+ if (cx.test(text)) {
+ text = text.replace(cx, function (a) {
+ return '\\u' +
+ ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
+ });
+ }
+
+ // In the second stage, we run the text against regular expressions that look
+ // for non-JSON patterns. We are especially concerned with '()' and 'new'
+ // because they can cause invocation, and '=' because it can cause mutation.
+ // But just to be safe, we want to reject all unexpected forms.
+
+ // We split the second stage into 4 regexp operations in order to work around
+ // crippling inefficiencies in IE's and Safari's regexp engines. First we
+ // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
+ // replace all simple value tokens with ']' characters. Third, we delete all
+ // open brackets that follow a colon or comma or that begin the text. Finally,
+ // we look to see that the remaining characters are only whitespace or ']' or
+ // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
+
+ if (/^[\],:{}\s]*$/
+ .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
+ .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
+
+ // In the third stage we use the eval function to compile the text into a
+ // JavaScript structure. The '{' operator is subject to a syntactic ambiguity
+ // in JavaScript: it can begin a block or an object literal. We wrap the text
+ // in parens to eliminate the ambiguity.
+
+ j = eval('(' + text + ')');
+
+ // In the optional fourth stage, we recursively walk the new structure, passing
+ // each name/value pair to a reviver function for possible transformation.
+
+ return typeof reviver === 'function' ?
+ walk({
+ '': j
+ }, '') :
+ j;
+ }
+
+ // If the text is not JSON parseable, then a SyntaxError is thrown.
+
+ throw new SyntaxError('JSON.parse');
+ };
+ }
+}()); \ No newline at end of file
diff --git a/debian/webinterface-default/js/xbmc.core.js b/debian/webinterface-default/js/xbmc.core.js
new file mode 100644
index 0000000..2be141c
--- /dev/null
+++ b/debian/webinterface-default/js/xbmc.core.js
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+(function (window) {
+ "use strict";
+
+ var xbmc = window.xbmc || {};
+ xbmc.core = {
+ 'DEFAULT_ALBUM_COVER': 'images/DefaultAlbumCover.png',
+ 'DEFAULT_VIDEO_COVER': 'images/DefaultVideo.png',
+ 'JSON_RPC': 'jsonrpc',
+ 'applyDeviceFixes': function () {
+ window.document.addEventListener('touchmove', function (e) {
+ e.preventDefault();
+ });
+ },
+ 'displayCommunicationError': function (m) {
+ window.clearTimeout(xbmc.core.commsErrorTimeout);
+ var message = m || 'Connection to server lost';
+ $('#commsErrorPanel').html(message).show();
+ xbmc.core.commsErrorTimeout = window.setTimeout('xbmc.core.hideCommunicationError()', 5000);
+ },
+ 'durationToString': function (duration) {
+ var total_seconds = duration || 0,
+ seconds = total_seconds % 60,
+ minutes = Math.floor(total_seconds / 60) % 60,
+ hours = Math.floor(total_seconds / 3600),
+ result = ((hours > 0 && ((hours < 10 ? '0' : '') + hours + ':')) || '');
+ result += (minutes < 10 ? '0' : '') + minutes + ':';
+ result += (seconds < 10 ? '0' : '') + seconds;
+ return result;
+ },
+ 'getCookie': function (name) {
+ var i,
+ match,
+ haystack = window.document.cookie.split(';');
+ for (i = 0; i < haystack.length; i += 1) {
+ match = haystack[i].match(/^\s*[\S\s]*=([\s\S]*)\s*$/);
+ if (match && match.length === 2) {
+ return match[1];
+ }
+ }
+ return null;
+ },
+ 'hideCommunicationError': function () {
+ $('#commsErrorPanel').hide();
+ },
+ 'setCookie': function (name, value, days) {
+ var date,
+ expires;
+ if (name) {
+ if (days) {
+ date = new Date();
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
+ expires = "; expires=" + date.toGMTString();
+ } else {
+ expires = '';
+ }
+ window.document.cookie = name + "=" + value + expires + "; path=/";
+ }
+ },
+ 'timeToDuration': function (time) {
+ var duration;
+ time = time || {};
+ duration = ((time.hours || 0) * 3600);
+ duration += ((time.minutes || 0) * 60);
+ duration += (time.seconds || 0);
+ return duration;
+ }
+ };
+
+ window.xbmc = xbmc;
+}(window)); \ No newline at end of file
diff --git a/debian/webinterface-default/js/xbmc.init.js b/debian/webinterface-default/js/xbmc.init.js
new file mode 100644
index 0000000..c61a81f
--- /dev/null
+++ b/debian/webinterface-default/js/xbmc.init.js
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+(function () {
+ "use strict"
+
+ var mediaLibrary = new MediaLibrary(),
+ nowPlayingManager = new NowPlayingManager();
+ xbmc.core.applyDeviceFixes();
+}()); \ No newline at end of file
diff --git a/debian/webinterface-default/js/xbmc.launcher.js b/debian/webinterface-default/js/xbmc.launcher.js
new file mode 100644
index 0000000..4f039d6
--- /dev/null
+++ b/debian/webinterface-default/js/xbmc.launcher.js
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+(function (document) {
+ "use strict";
+
+ var i,
+ script,
+ debug = false,
+ /* Set to true to disable cached javascript */
+ version = (debug ? Math.random() : '2.1.0'),
+ scripts = [
+ "js/jquery-1.8.2.min.js",
+ "js/json2.js",
+ "js/iscroll-min.js",
+ "js/xbmc.core.js",
+ "js/xbmc.rpc.js",
+ "js/MediaLibrary.js",
+ "js/NowPlayingManager.js",
+ "js/xbmc.init.js"
+ ];
+
+ for (i = 0; i < scripts.length; i += 1) {
+ script = '<script type="text/javascript" src="';
+ script += scripts[i] + '?' + version;
+ script += '"><\/script>';
+ document.write(script);
+ }
+}(window.document)); \ No newline at end of file
diff --git a/debian/webinterface-default/js/xbmc.rpc.js b/debian/webinterface-default/js/xbmc.rpc.js
new file mode 100644
index 0000000..60b1d8b
--- /dev/null
+++ b/debian/webinterface-default/js/xbmc.rpc.js
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+(function (window) {
+
+ var xbmc = window.xbmc || {};
+
+ xbmc.rpc = {
+ 'default_options': {
+ 'contentType': 'application/json',
+ 'dataType': 'json',
+ 'type': 'POST',
+ 'success': function () {
+ $('#spinner').hide();
+ }
+ },
+ 'request': function (options) {
+ var request_options = jQuery.extend({}, this.default_options, options);
+ request_options.url = xbmc.core.JSON_RPC + '?' + options.method;
+ request_options.data = JSON.stringify({
+ 'jsonrpc': '2.0',
+ 'method': options.method,
+ 'id': 1,
+ 'params': request_options.params
+ });
+ return jQuery.ajax(request_options)
+ }
+ };
+
+ window.xbmc = xbmc;
+
+}(window)); \ No newline at end of file