Index: /ipk/source.sh4/infos_buliticker_0_1/usr/lib/enigma2/python/Plugins/Extensions/Buliticker/plugin.py
===================================================================
--- /ipk/source.sh4/infos_buliticker_0_1/usr/lib/enigma2/python/Plugins/Extensions/Buliticker/plugin.py	(revision 7472)
+++ /ipk/source.sh4/infos_buliticker_0_1/usr/lib/enigma2/python/Plugins/Extensions/Buliticker/plugin.py	(revision 7472)
@@ -0,0 +1,986 @@
+# -*- coding: utf-8 -*-
+#
+#		Fußball Liveticker für die 1./2.Bundesliga 
+#
+# 	Quelle: http://linpop.zdf.de/sport/bl1/konferenz-sub.htm
+#
+#	V1.0 13.04.09 
+#
+# V1.0a 17.04.09 Fehler gefixt ; Konferenz-URL geändert ; geänderte Ergebnisse farbig
+#
+# V1.0b 18.04.09 Unterkanäle Auswahl hinzugefügt (grüne Taste)
+#
+# V1.0c 18.04.09 Fehler im Tickertext gefixt
+#
+# Enigma2 Plugin 
+#
+# Author: barabas
+#
+
+import os, sys
+
+from Plugins.Plugin import PluginDescriptor
+from twisted.web.client import getPage
+from twisted.internet import reactor
+from Screens.Screen import Screen
+from Screens.Console import Console
+from Screens.MessageBox import MessageBox
+from Screens.InputBox import InputBox
+from Screens.ChoiceBox import ChoiceBox
+from Screens.ChannelSelection import ChannelSelection
+from Screens.InfoBarGenerics import InfoBarSubserviceSelection
+from Screens.SubservicesQuickzap import SubservicesQuickzap
+from Components.ActionMap import ActionMap
+from Components.Label import Label
+from Components.Sources.List import List
+from Components.MenuList import MenuList
+from Components.config import config, ConfigSubsection, ConfigText, configfile
+from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
+from Components.Pixmap import Pixmap, MovingPixmap
+from Components.AVSwitch import AVSwitch
+from enigma import eTimer, getDesktop, eListboxPythonMultiContent, eListbox, gFont, RT_HALIGN_LEFT, RT_HALIGN_RIGHT, RT_HALIGN_CENTER
+from re import sub, split, search, match, findall
+from string import find, strip
+from Tools.LoadPixmap import LoadPixmap
+
+def transHTML(text):
+	text = text.replace('&nbsp;'," ").replace('&#39;',"'").replace('&szlig;',"ß").replace('&quot;','"').replace('&ndash;',"-")	
+	text = text.replace('&copy;.*'," ").replace('&amp;',"&").replace('&uuml;',"ü").replace('&auml;',"ä").replace('&ouml;',"ö")
+	text = text.replace('&Uuml;',"Ü").replace('&Auml;',"Ä").replace('&Ouml;',"Ö")				
+	return text
+
+refreshtimer = 15000
+screenhidetimer = 15000
+try:
+		size_w = int(getDesktop(0).size().width())
+		size_h = int(getDesktop(0).size().height())
+except:
+		size_w = 1280
+		size_h = 720
+
+config.plugins.buliticker = ConfigSubsection()
+config.plugins.buliticker.link = ConfigText(default="http://linpop.zdf.de/sport/bl1/konferenz.htm", fixed_size = False)
+config.plugins.buliticker.actmenu = ConfigText(default="ergmenu", fixed_size = False)
+
+###############################################################################  
+# backgroundColor="#c9deb7"
+# scrollbarMode="showOnDemand"
+
+#				<eLabel zPosition="1" position="28,93" size="502,459" backgroundColor="#c9deb7" />
+#				<eLabel zPosition="1" position="548,93" size="500,234" backgroundColor="#c9deb7" />
+class ShowFullTicker(Screen):
+		
+		if size_w == 1280:
+				skin = """
+				<screen name="ShowTicker" position="5,3" size="1270,712" title="Buli FullTicker" flags="wfNoBorder">
+				<ePixmap position="5,7" size="1270,710"  zPosition="-10" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/Buliticker/zdftickerback.png" transparent="1" />
+				<widget source="global.CurrentTime" render="Label" position="850,505" size="280,22" font="Regular;20" halign="right" foregroundColor="black" transparent="1">
+					<convert type="ClockToText">Date</convert>
+				</widget>
+				<widget source="global.CurrentTime" render="Label" position="1140,505" size="80,22" font="Regular;20" halign="left" foregroundColor="black" transparent="1">
+					<convert type="ClockToText">Default</convert>
+				</widget>
+			  <widget name="0_menu" zPosition="2" position="30,95" size="500,447" transparent="1" foregroundColor="black" />
+				<widget name="tablabel" zPosition="2" position="100,280" size="440,25" font="Regular;22" halign="left" foregroundColor="black" transparent="1"/>
+				<widget name="1_menu" zPosition="2" position="550,95" size="500,225" transparent="1" foregroundColor="black" />
+				<widget name="erglabel" zPosition="2" position="600,100" size="440,25" font="Regular;22" halign="left" foregroundColor="black" transparent="1"/>
+				<eLabel zPosition="2" position="5,531" size="1270,2" backgroundColor="black" />
+				<widget name="2_menu" zPosition="2" position="20,535" size="1240,165" transparent="1" foregroundColor="black" />
+				<eLabel zPosition="1" position="5,535" size="1270,180" backgroundColor="#f4fcfc" />
+				<widget name="tickerlabel" zPosition="2" position="520,610" size="440,25" font="Regular;22" halign="left" foregroundColor="black" transparent="1" />
+				<widget name="statuslabel" zPosition="2" position="620,480" size="440,25" font="Regular;22" halign="left" foregroundColor="black" transparent="1" />
+			</screen>"""
+		else:
+#				<eLabel zPosition="1" position="8,73" size="392,372" backgroundColor="#c9deb7" />
+# 			<eLabel zPosition="1" position="413,73" size="292,230" backgroundColor="#c9deb7" />
+				skin = """
+				<screen name="ShowTicker" position="5,3" size="710,568" title="Buli FullTicker" flags="wfNoBorder">
+				<ePixmap position="5,5" size="710,560"  zPosition="-10" pixmap="/usr/lib/enigma2/python/Plugins/Extensions/Buliticker/zdftickerback_sd.png" transparent="1" />
+				<widget source="global.CurrentTime" render="Label" position="420,432" size="200,20" font="Regular;17" halign="right" foregroundColor="black" transparent="1">
+					<convert type="ClockToText">Date</convert>
+				</widget>
+				<widget source="global.CurrentTime" render="Label" position="630,432" size="80,20" font="Regular;17" halign="left" foregroundColor="black" transparent="1">
+					<convert type="ClockToText">Default</convert>
+				</widget>
+				
+			  <widget name="0_menu" zPosition="2" position="10,75" size="370,370" transparent="1" foregroundColor="black" />
+
+				<widget name="tablabel" zPosition="2" position="50,275" size="440,25" font="Regular;20" halign="left" foregroundColor="black" transparent="1"/>
+	
+				<widget name="1_menu" zPosition="2" position="385,75" size="310,225" transparent="1" foregroundColor="black" />
+
+				<widget name="erglabel" zPosition="2" position="500,95" size="200,25" font="Regular;20" halign="left" foregroundColor="black" transparent="1"/>
+	
+				<eLabel zPosition="2" position="5,453" size="710,2" backgroundColor="black" />
+	
+				<widget name="2_menu" zPosition="2" position="20,456" size="690,115" transparent="1" foregroundColor="black" />
+				<eLabel zPosition="1" position="5,456" size="705,115" backgroundColor="#f4fcfc" />
+				<widget name="tickerlabel" zPosition="2" position="250,510" size="340,25" font="Regular;20" halign="left" foregroundColor="black" transparent="1" />
+				<widget name="statuslabel" zPosition="2" position="385,380" size="340,25" font="Regular;20" halign="left" foregroundColor="black" transparent="1" />
+			</screen>"""
+			
+		def __init__(self, session):
+				self.loadinginprogress = False
+				self.skin = ShowFullTicker.skin
+				Screen.__init__(self, session)
+				
+				print "----> %d" % size_w
+				print "----> %d" % size_h
+		
+				self.baseurl = "http://linpop.zdf.de/sport/"
+				self.lastbulilink = pluginpath + "/lastbulilink.txt"	
+				self.hideflag = True
+				self.tableentries = []
+				self.linklist = []
+				self.menunr = 2
+				self.index = 1
+				self.buli = ""
+				self.ergold = []
+				self.tickerold = ""
+				
+				self.servicelist = self.session.instantiateDialog(ChannelSelection)
+			
+				self["0_menu"] = ItemList([])
+				self["1_menu"] = ItemList([])
+				self["2_menu"] = ItemList([])
+				
+				self.actmenu = "2_menu"				
+				self["erglabel"] = Label("")
+				self["tablabel"] = Label("")
+				self["tickerlabel"] = Label("")
+				self["statuslabel"] = Label("")
+				self["actions"] = ActionMap(["ColorActions","OkCancelActions","DirectionActions","HelpActions","MovieSelectionActions","InputActions"],
+				{
+					"1": self.loadBuli1,
+					"2": self.loadBuli2,
+					"3": self.tester,
+					"green": self.subService,
+					"ok":	self.ok,
+					"cancel": self.exit,
+					"right": self.pageDown,
+					"left": self.pageUp,
+					"up": self.up,
+					"down": self.down,
+#  				"contextMenu": self.switchMenu,
+					"showEventInfo": self.miniView,
+					"displayHelp": self.hideScreen,
+				}, -1)	
+				
+				self.konfurl = config.plugins.buliticker.link.value
+
+				if search("/bl1/",self.konfurl) is not None:
+						self.buli = "bl1"
+				else:
+						self.buli = "bl2"
+
+ 				self.screenHideTimer = eTimer()
+				self.screenHideTimer.callback.append(self.hideTimerAction)
+
+ 				self.refreshInfoTimer = eTimer()
+				self.refreshInfoTimer.callback.append(self.timerAction)
+				self.refreshInfoTimer.start(refreshtimer)
+
+				self.StartTimer = eTimer()
+				self.StartTimer.callback.append(self.download(self.konfurl,self.getLiveContent))
+				self.StartTimer.start(500)
+
+# geklaut aus InfoBarGenerics.py 
+
+		def subService(self):
+				if not self.hideflag:
+						service = self.session.nav.getCurrentService()
+						subservices = service and service.subServices()
+						n = subservices and subservices.getNumberOfSubservices()
+						selection = 0
+						print "---> %s" % n
+						if n and n > 0:
+							ref = self.session.nav.getCurrentlyPlayingServiceReference()
+							tlist = []
+							for x in range(n):
+								i = subservices.getSubservice(x)
+								if i.toString() == ref.toString():
+									selection = x
+								tlist.append((i.getName(), i))
+							tlist = [(_("Quickzap"), "quickzap", service.subServices()), ("--", "")] + tlist
+							keys = ["red", "",  "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
+							selection += 2
+							self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice..."), list = tlist, selection = selection, keys = keys)
+
+							#self.session.openWithCallback(self.timerAction,SubservicesQuickzap, "quickzap")
+
+		def subserviceSelected(self, service):
+			if not service is None:
+				if not isinstance(service[1], str):
+					self.session.nav.playService(service[1], False)
+				
+						
+		def tester(self):
+#				self.ergold.append("neuer text")
+				self.tickerold = "test"
+												
+		def timerAction(self):
+				print "-----> ShowFullView Timer fired"
+				self.download(self.konfurl,self.getLiveContent)
+				self.refreshInfoTimerRestart()
+
+		def hideTimerAction(self):
+				print "-----> ScreenHide Timer fired"
+				if self.hideflag == True:
+						self.hideScreen()
+
+		def refreshInfoTimerRestart(self):
+				if self.refreshInfoTimer.isActive:
+						self.refreshInfoTimer.stop()
+				print "-----> ShowFullView Timer restart"
+				self.refreshInfoTimer.start(refreshtimer)
+
+		def hideTimerRestart(self):
+				if self.screenHideTimer.isActive:
+						self.screenHideTimer.stop()
+				print "-----> ScreenHide Timer restart"
+				self.screenHideTimer.start(screenhidetimer)
+																														
+		def miniView(self):
+				if self.hideflag:
+						self.refreshInfoTimer.stop()
+						self.screenHideTimer.stop()
+						self.session.openWithCallback(self.timerAction,ShowMiniTicker, self.konfurl)			
+														
+		def loadBuli1(self):
+				self.buli = "bl1"
+				self.konfurl = self.baseurl + "bl1/konferenz.htm"
+				self.timerAction()
+				self.hideTimerRestart()
+				
+		def loadBuli2(self):
+				self.buli = "bl2"
+				self.konfurl = self.baseurl + "bl2/konferenz.htm"	
+				self.timerAction()					
+				self.hideTimerRestart()
+						
+		def ok(self):
+				if self.hideflag:
+						if self.actmenu == "1_menu":
+								self.index = self[self.actmenu].getSelectedIndex()
+								self.konfurl = self.linklist[self.index]
+								self.timerAction()
+						else:
+								self.timerAction()
+																	
+		def up(self):
+				if not self.hideflag:
+						self.servicelist.moveUp()
+						self.session.execDialog(self.servicelist)
+				else:
+						self[self.actmenu].up()
+						self.hideTimerRestart()
+						self.refreshInfoTimerRestart()
+				
+		def down(self):
+				if not self.hideflag:
+						self.servicelist.moveDown()
+						self.session.execDialog(self.servicelist)
+				else:	
+						self[self.actmenu].down()
+						self.hideTimerRestart()
+						self.refreshInfoTimerRestart()
+				
+		def pageUp(self):
+				if not self.hideflag:
+						self.servicelist.moveUp()
+						self.servicelist.zap()
+				else:
+						self[self.actmenu].pageUp()
+						self.hideTimerRestart()
+						self.refreshInfoTimerRestart()
+				
+		def pageDown(self):
+				if not self.hideflag:
+						self.servicelist.moveDown()
+						self.servicelist.zap()
+				else:
+						self[self.actmenu].pageDown()
+						self.hideTimerRestart()
+						self.refreshInfoTimerRestart()
+																
+		def switchMenu(self):				
+				if self.menunr == 2:
+						# nur zwischen Erg. und Liveticker Menu wechseln
+						self.menunr = 1					
+				else:
+						self.menunr +=1	
+				self.actmenu = str(self.menunr) + "_menu"
+				if self.menunr == 2:
+						self["0_menu"].selectionEnabled(0)
+						self["1_menu"].selectionEnabled(0)
+				elif self.menunr == 1:
+						self["0_menu"].selectionEnabled(0)
+						self["2_menu"].selectionEnabled(0)
+				elif self.menunr == 0:
+						self["1_menu"].selectionEnabled(0)
+						self["2_menu"].selectionEnabled(0)																	
+				
+				self[self.actmenu].selectionEnabled(1)
+ 						
+		def getLiveContent(self,output):
+				self.loadinginprogress = False
+				self["statuslabel"].setText("")
+				self["0_menu"].l.setList([])
+				self["1_menu"].l.setList([])
+				self["2_menu"].l.setList([])
+					
+ 				self["0_menu"].selectionEnabled(0)
+ 				self["1_menu"].selectionEnabled(0)
+ 				self["2_menu"].selectionEnabled(1)
+ 				self.actmenu = "2_menu"				
+# 				if self.actmenu == "1_menu":
+# 						self[self.actmenu].moveToIndex(self.index)
+
+				self["erglabel"].setText("")
+				self["tablabel"].setText("")
+				self["tickerlabel"].setText("")
+				
+				output = output.decode("latin1").encode("utf-8")
+							
+				if size_w == 1280:
+						self["0_menu"].l.setItemHeight(22)
+						self["1_menu"].l.setItemHeight(25)
+						self["2_menu"].l.setItemHeight(55)
+						fontidx = 0
+						ysize = 22
+						axsize = 300
+						bxsize = 100
+						cxsize = 25
+						dxsize = 250
+						exsize = 25
+						fxsize = 80
+						gxsize = 35
+						afontticker = -1
+						bfontticker = 0
+						xsizeticker = 1120
+						ysizeticker = 25
+				else:
+						self["0_menu"].l.setItemHeight(20)
+						self["1_menu"].l.setItemHeight(22)
+						self["2_menu"].l.setItemHeight(55)
+						fontidx = 1
+						ysize = 20
+						axsize = 200
+						bxsize = 80
+						cxsize = 20
+						dxsize = 200
+						exsize = 20
+						fxsize = 60
+						gxsize = 20
+						afontticker = 0
+						bfontticker = 1
+						xsizeticker = 610	
+						ysizeticker = 25
+						
+				# Live Ergebnisse
+				self.tableentries = []
+				startpos = find(output,'<!-- Events -->')
+				if startpos == -1:
+						self["erglabel"].setText("Keine Ergebnisse gefunden!")
+				else:		
+						endpos = find(output,'<!-- /Events --> ')
+						bereich = output[startpos:endpos]
+						bereich = transHTML(bereich)
+						bereich = sub("</td>\s*\n","</td>",bereich)
+						bereich = sub('<a href="',"MARK:" + self.baseurl + self.buli + "/",bereich)
+						bereich = bereich.replace('</a>',"").replace('class="eventP">',"MARK:").replace('class="eventLive">',"MARK:")
+						erg = findall(r'MARK:(.*?)["<]',bereich)
+
+						if len(erg) == 0:
+								self["erglabel"].setText("Keine Ergebnisse gefunden!")
+						else:								
+								# 'http://linpop.zdf.de/sport/bl1/event20129.htm', 'Bielefeld - Schalke', '0:2 (0:1)'
+								y = 0								
+								offset = 3
+								for x in erg:
+										if y == 0:
+												res = [ x ]
+												self.linklist.append(x)
+										if y == 1:
+												res.append(MultiContentEntryText(pos=(20, 0), size=(axsize, ysize), font=fontidx, flags = RT_HALIGN_LEFT, text=x))							
+										if y == 2:
+												res.append(MultiContentEntryText(pos=(axsize+20, 0), size=(bxsize, ysize), font=fontidx, flags = RT_HALIGN_RIGHT, text=x))
+												self.tableentries.append(res)						
+										y +=1
+										if y == offset:
+												y = 0			
+								self["1_menu"].l.setList(self.tableentries)
+
+				# Blitztabelle
+				self.tableentries = []
+				startpos = find(output,'<!-- Blitztabelle -->')
+				if startpos == -1:
+						self["tablabel"].setText("Keine Blitztabelle gefunden!")
+				else:
+						endpos = find(output,'<!-- /Blitztabelle -->')
+						bereich = output[startpos:endpos]
+						bereich = transHTML(bereich)
+		
+						bereich = sub("</td>\s*\n","</td>",bereich)
+						bereich = sub('<img src=.*?/>',"",bereich)
+						
+						a = findall(r'>(.*?)</td>',bereich)
+						# '1', 'VfL Wolfsburg', '26', '58:32', '51'
+						if len(a) == 0:
+								self["tablabel"].setText("Keine Blitztabelle gefunden!")
+						else:																		
+								y = 0								
+								offset = 5
+								for x in a:
+										if y == 0:
+												res = [ x ]
+												res.append(MultiContentEntryText(pos=(10, 0), size=(cxsize, ysize), font=fontidx, flags = RT_HALIGN_RIGHT, text=x))
+										if y == 1:
+												res.append(MultiContentEntryText(pos=(cxsize+20, 0), size=(dxsize, ysize), font=fontidx, flags = RT_HALIGN_LEFT, text=x))							
+										if y == 2:
+												res.append(MultiContentEntryText(pos=(dxsize+cxsize+30, 0), size=(exsize, ysize), font=fontidx, flags = RT_HALIGN_RIGHT, text=x))
+										if y == 3:
+												res.append(MultiContentEntryText(pos=(dxsize+cxsize+exsize+35, 0), size=(fxsize, ysize), font=fontidx, flags = RT_HALIGN_RIGHT, text=x))
+										if y == 4:
+												res.append(MultiContentEntryText(pos=(dxsize+cxsize+exsize+fxsize+40, 0), size=(gxsize, ysize), font=fontidx, flags = RT_HALIGN_RIGHT, text=x))		
+												self.tableentries.append(res)						
+										y +=1
+										if y == offset:
+												y = 0			
+								self["0_menu"].l.setList(self.tableentries)
+
+				# Liveticker
+				self.tableentries = []
+				minute = []
+				bild = []
+				paarung = []
+				text = []
+				startpos = find(output,'<!-- rechte Spalte -->')
+				if startpos == -1:
+						self["tickerlabel"].setText("Kein Liveticker gefunden!")
+				else:				
+						endpos = find(output,'<!-- /rechte Spalte -->')
+						bereich = output[startpos:endpos]
+						bereich = transHTML(bereich)
+						# falls kein Bild -> Dummy Eintrag 
+						bereich = sub('<div class="minute">.*?</div>\n','<div class="minute"></div><img src="pics/dummy.gif" alt="Dummy" class="message-type">',bereich)
+						minute = findall(r'<div class="minute">(.*?)</div>',bereich)
+						if len(minute) == 0:
+								self["tickerlabel"].setText("Kein Liveticker gefunden!")
+						else:	
+								bild = findall(r'<img src="pics/(.*?).gif',bereich)
+								# Paarung nur bei Konferenz
+								if search("event",self.konfurl) is not None:
+										for x in minute:
+												paarung.append(" ")
+								else:					
+										paarung = findall(r'class="message-header">(.*?)</a>',bereich)
+								text =  findall(r'<p>.*?\s*(.*?)</p>',bereich)
+								textnr = len(text)
+								y = 0
+								a = []				
+								for x in text:
+										#print "---> %s %s %s" % (x,text[y],paarung[y])
+										text[y] = sub("<[^>]*>","",text[y])
+										a.append((bild[y],minute[y],paarung[y],strip(text[y])))
+										y +=1						 					
+								# ('halbzeit_gr', '', 'Ingolstadt - Wehen', 'Abpfiff durch T. Metzen, der Endstand lautet 0:0.    ')
+								for pic, time, spiel, livetext in a:
+										if time == "":
+												time = "--"		
+										x = "%s ( %s min. / %d )" % (spiel,time,textnr)
+										res = [ x ]
+										if pic != "dummy":
+												png = LoadPixmap(pluginpath + "/icons/" + pic + ".png")
+												res.append(MultiContentEntryPixmapAlphaTest(pos=(0, 0), size=(55, 55), png = png))
+										res.append(MultiContentEntryText(pos=(70, 0), size=(xsizeticker, ysizeticker), font=afontticker, flags = RT_HALIGN_LEFT, text=x))
+										res.append(MultiContentEntryText(pos=(70, ysizeticker+1), size=(xsizeticker, ysizeticker), font=bfontticker, flags = RT_HALIGN_LEFT, text=livetext))		
+										self.tableentries.append(res)						
+										textnr -=1
+								self["2_menu"].l.setList(self.tableentries)						
+
+								# falls neue Ergebnisse oder neuer Tickerttext -> Screen anzeigen			
+								if ( self.ergold != erg or self.tickerold != text[0] )  and self.hideflag == False:
+										self.hideScreen()
+								self.ergold = erg
+								self.tickerold = text[0]
+							
+							
+		def download(self, link, name):
+				self.loadinginprogress = True
+				getPage(link).addCallback(name).addErrback(self.downloadError)
+						
+		def downloadError(self,output):
+				self.loadinginprogress = False
+				self["statuslabel"].setText("Fehler beim Download")			
+		
+		def hideScreen(self):
+				if self.hideflag == True:
+						self.hideflag = False
+						self.screenHideTimer.stop()
+						self.hide()
+				else:
+						self.hideflag = True
+						self.screenHideTimer.start(screenhidetimer)
+						self.show()
+	
+		def exit(self):
+				if self.loadinginprogress:
+						reactor.callLater(1,self.exit)
+				else:
+						config.plugins.buliticker.link.value = self.konfurl
+						config.plugins.buliticker.link.save()
+						configfile.save()
+						self.close()
+
+
+#####################################
+#	<eLabel zPosition="1" position="0,540" size="1280,170" backgroundColor="white" />
+# scrollbarMode="showOnDemand"
+class ShowMiniTicker(Screen):
+
+		if size_w == 1280:
+				skin = """
+			  <screen name="ShowTicker" position="0,626" size="1280,80" title="Buli MiniTicker" transparent="0" flags="wfNoBorder">
+			  <widget name="ergmenu" zPosition="1" position="20,0" size="1240,80" transparent="1" foregroundColor="white" />
+			  <widget name="tickermenu" zPosition="1" position="15,0" size="1260,80" transparent="1" foregroundColor="white" />
+				<widget name="tickerlabel" zPosition="1" position="520,20" size="440,25" font="Regular;22" halign="left" foregroundColor="white" transparent="1" />
+				</screen>"""
+		else:
+				skin = """
+			  <screen name="ShowTicker" position="0,495" size="720,80" title="Buli MiniTicker" transparent="0" flags="wfNoBorder">
+			  <widget name="ergmenu" zPosition="1" position="5,0" size="715,80" transparent="1" foregroundColor="white" />
+				<widget name="tickermenu" zPosition="2" position="5,0" size="715,80" transparent="1" foregroundColor="white" />
+				<widget name="tickerlabel" zPosition="2" position="280,30" size="340,25" font="Regular;20" halign="left" foregroundColor="white" transparent="1" />
+				</screen>"""
+					
+		def __init__(self, session, link):
+				self.loadinginprogress = False
+				self.skin = ShowMiniTicker.skin
+				Screen.__init__(self, session)
+				
+				self.baseurl = "http://linpop.zdf.de/sport/"				
+				self.hideflag = True
+				self.tableentries = []
+				self.ergold = []
+				self.tickerold = ""
+				self.konfurl = link
+				self.servicelist = self.session.instantiateDialog(ChannelSelection)
+				
+				self["ergmenu"] = ItemList([])
+				self["tickermenu"] = ItemList([])
+
+				self.actmenu = config.plugins.buliticker.actmenu.value
+
+				self["tickerlabel"] = Label("")
+				self["actions"] = ActionMap(["ColorActions","OkCancelActions","DirectionActions","HelpActions","MovieSelectionActions","InputActions"],
+				{
+					"1": self.loadBuli1,
+					"2": self.loadBuli2,
+					"3": self.tester,
+					"green": self.subService,
+					"ok":	self.ok,
+					"cancel": self.exit,
+					"right": self.zapDown,
+					"left": self.zapUp,
+					"up": self.up,
+					"down": self.down,
+					"showEventInfo": self.switchMenu,
+ 					"displayHelp": self.hideScreen,
+				}, -1)	
+
+				if search("/bl1/",self.konfurl) is not None:
+							self.buli = "bl1"
+				else:
+							self.buli = "bl2"
+										
+ 				self.screenHideTimer = eTimer()
+				self.screenHideTimer.callback.append(self.hideTimerAction)
+				self.screenHideTimer.start(screenhidetimer)
+							
+ 				self.refreshInfoTimer = eTimer()
+				self.refreshInfoTimer.callback.append(self.timerAction)
+				
+				self.onShown.append(self.loadMenu)	
+
+		def subService(self):
+				service = self.session.nav.getCurrentService()
+				subservices = service and service.subServices()
+				n = subservices and subservices.getNumberOfSubservices()
+				selection = 0
+				print "---> %s" % n
+				if n and n > 0:
+						ref = self.session.nav.getCurrentlyPlayingServiceReference()
+						tlist = []
+						for x in range(n):
+							i = subservices.getSubservice(x)
+							if i.toString() == ref.toString():
+								selection = x
+							tlist.append((i.getName(), i))
+						tlist = [(_("Quickzap"), "quickzap", service.subServices()), ("--", "")] + tlist
+						keys = ["red", "",  "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ] + [""] * n
+						selection += 2
+						self.session.openWithCallback(self.subserviceSelected, ChoiceBox, title=_("Please select a subservice..."), list = tlist, selection = selection, keys = keys)
+	
+						#self.session.openWithCallback(self.timerAction,SubservicesQuickzap, "quickzap")
+
+		def subserviceSelected(self, service):
+			if not service is None:
+				if not isinstance(service[1], str):
+					self.session.nav.playService(service[1], False)
+							
+		def tester(self):
+				self.ergold[2]="3:3"
+#				self.tickerold = "test"
+
+		def hideTimerAction(self):
+				print "-----> ScreenHide Timer fired"
+				if self.hideflag == True:
+						self.hideScreen()
+						
+		def timerAction(self):
+				print "-----> ShowMiniView timer fired"
+				self.download(self.konfurl,self.getLiveContent)
+				self.refreshInfoTimerRestart()
+
+		def refreshInfoTimerRestart(self):
+				if self.refreshInfoTimer.isActive:
+						self.refreshInfoTimer.stop()
+				print "-----> ShowMiniView Timer restart"
+				self.refreshInfoTimer.start(refreshtimer)
+
+		def hideTimerRestart(self):
+				if self.screenHideTimer.isActive:
+						self.screenHideTimer.stop()
+				print "-----> ScreenHide Timer restart"
+				self.screenHideTimer.start(screenhidetimer)
+
+		def loadMenu(self):
+				self.hideTimerRestart()
+				self.refreshInfoTimerRestart()
+				self.download(self.konfurl,self.getLiveContent)
+				self["ergmenu"].selectionEnabled(0)
+				if self.actmenu == "ergmenu":
+						self["ergmenu"].show()
+						self["tickermenu"].hide()
+						self["tickerlabel"].hide()
+						self["tickermenu"].selectionEnabled(0)
+				elif self.actmenu == "tickermenu":
+						self["tickerlabel"].show()
+						self["tickermenu"].selectionEnabled(1)
+						self["tickermenu"].show()
+						self["ergmenu"].hide()
+				if self.hideflag == False:
+						self.hideScreen()
+																					
+		def switchMenu(self):
+				self.hideTimerRestart()
+				self.refreshInfoTimerRestart()
+				self.download(self.konfurl,self.getLiveContent)
+				self["ergmenu"].selectionEnabled(0)
+				if self.actmenu == "ergmenu":
+						self.actmenu = "tickermenu"
+						self["ergmenu"].hide()
+						self["tickermenu"].show()
+						self["tickerlabel"].show()
+						self["tickermenu"].selectionEnabled(1)
+				elif self.actmenu == "tickermenu":
+						self.actmenu = "ergmenu"
+						self["tickerlabel"].hide()
+						self["tickermenu"].selectionEnabled(0)
+						self["tickermenu"].hide()
+						self["ergmenu"].show()
+				if self.hideflag == False:
+						self.hideScreen()
+																
+		def loadBuli1(self):
+				self.buli = "bl1"
+				self.konfurl = self.baseurl + "bl1/konferenz.htm"
+				self.ergold = []
+				self.timerAction()
+				self.hideTimerRestart()
+				
+		def loadBuli2(self):
+				self.buli = "bl2"
+				self.konfurl = self.baseurl + "bl2/konferenz.htm"	
+				self.ergold = []
+				self.timerAction()				
+				self.hideTimerRestart()
+						
+		def ok(self):
+				pass
+											
+		def up(self):
+				self.screenHideTimer.stop()
+				if not self.hideflag or ( self.hideflag and self.actmenu == "ergmenu"):
+						self.servicelist.moveUp()
+						self.session.execDialog(self.servicelist)				
+				else:
+						if self.actmenu == "tickermenu":
+								self["tickermenu"].up()
+								self.hideTimerRestart()
+								self.refreshInfoTimerRestart()
+		
+		def down(self):
+				self.screenHideTimer.stop()
+				if not self.hideflag or ( self.hideflag and self.actmenu == "ergmenu"):
+						self.servicelist.moveDown()
+						self.session.execDialog(self.servicelist)				
+				else:
+						if self.actmenu == "tickermenu":
+								self["tickermenu"].down()									
+								self.hideTimerRestart()
+								self.refreshInfoTimerRestart()
+
+		def zapUp(self):
+				self.servicelist.moveUp()
+				self.servicelist.zap()
+				
+		def zapDown(self):
+				self.servicelist.moveDown()
+				self.servicelist.zap()
+						
+		def getLiveContent(self,output):
+				self.loadinginprogress = False
+				self["tickerlabel"].setText("")
+				self["tickermenu"].l.setList([])
+				self["ergmenu"].l.setList([])
+				self["tickerlabel"].setText("")
+				output = output.decode("latin1").encode("utf-8")
+				
+				self["tickermenu"].l.setItemHeight(80)
+				
+				if size_w == 1280:
+						fonterg = -1
+						afontticker = -1
+						bfontticker = 0
+						ysize = 25
+						axsize = 290
+						bxsize = 100
+						xsizeticker = 1190
+						ysizeticker = 25
+						maxchar = 110
+						maxword = 17
+				else:
+						fonterg = 3
+						afontticker = 0
+						bfontticker = 1
+						ysize = 20
+						axsize = 170
+						bxsize = 60
+						xsizeticker = 615	
+						ysizeticker = 25			
+						maxchar = 70
+						maxword = 11
+												
+				# Live Ergebnisse
+				self.tableentries = []
+				startpos = find(output,'<!-- Events -->')
+				if startpos == -1:
+						self["tickerlabel"].setText("Keine Ergebnisse gefunden!")
+				else:		
+						endpos = find(output,'<!-- /Events --> ')
+						bereich = output[startpos:endpos]
+						bereich = transHTML(bereich)
+						bereich = sub("</td>\s*\n","</td>",bereich)
+						bereich = sub('<a href="',"MARK:" + self.baseurl + self.buli + "/",bereich)
+						bereich = bereich.replace('</a>',"").replace('class="eventP">',"MARK:").replace('class="eventLive">',"MARK:")
+						erg = findall(r'MARK:(.*?)["<]',bereich)
+
+						if len(erg) == 0:
+								self["tickerlabel"].setText("Keine Ergebnisse gefunden!")
+						else:								
+								 												
+								# 'http://linpop.zdf.de/sport/bl1/event20129.htm', 'Bielefeld - Schalke', '0:2 (0:1)'
+								y = 0								
+								offset = 9
+								index = 0
+								for x in erg:
+										if y == 0:
+												res = [ x ]
+												#self.linklist.append(x)
+										if y == 1:
+												res.append(MultiContentEntryText(pos=(10, 2), size=(axsize, ysize), font=fonterg, flags = RT_HALIGN_LEFT, text=x))
+										if y == 2:
+												if len(self.ergold) > 0:
+														if x != self.ergold[index]:
+																res.append(MultiContentEntryText(pos=(axsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00f23d21))
+														else:
+																res.append(MultiContentEntryText(pos=(axsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00dab329))
+												else:
+														res.append(MultiContentEntryText(pos=(axsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00dab329))
+										if y == 3:
+												pass
+										if y == 4:										
+												res.append(MultiContentEntryText(pos=(axsize+bxsize+15, 2), size=(axsize, ysize), font=fonterg, flags = RT_HALIGN_LEFT, text=x))
+										if y == 5:
+												if len(self.ergold) > 0:
+														if x != self.ergold[index]:
+																res.append(MultiContentEntryText(pos=(2*axsize+bxsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00f23d21))
+														else:
+																res.append(MultiContentEntryText(pos=(2*axsize+bxsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00dab329))
+												else:
+														res.append(MultiContentEntryText(pos=(2*axsize+bxsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00dab329))
+										if y == 6:
+												pass
+										if y == 7:												
+												res.append(MultiContentEntryText(pos=(2*axsize+2*bxsize+15, 2), size=(axsize, ysize), font=fonterg, flags = RT_HALIGN_LEFT, text=x))
+										if y == 8:
+												if len(self.ergold) > 0:
+														if x != self.ergold[index]:
+																res.append(MultiContentEntryText(pos=(3*axsize+2*bxsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00f23d21))
+														else:
+																res.append(MultiContentEntryText(pos=(3*axsize+2*bxsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00dab329))
+												else:
+														res.append(MultiContentEntryText(pos=(3*axsize+2*bxsize+5, 2), size=(bxsize, ysize), font=fonterg, flags = RT_HALIGN_RIGHT, text=x, color=0x00dab329))
+												self.tableentries.append(res)
+										y +=1
+										if y == offset:
+												y = 0
+										index +=1			
+								self["ergmenu"].l.setList(self.tableentries)
+
+														
+				# Liveticker
+				self.tableentries = []
+				ticker = []	
+				minute = []
+				bild = []
+				paarung = []
+				text = []
+				startpos = find(output,'<!-- rechte Spalte -->')
+				if startpos == -1:
+						self["tickerlabel"].setText("Kein Liveticker gefunden!")
+				else:				
+						endpos = find(output,'<!-- /rechte Spalte -->')
+						bereich = output[startpos:endpos]
+						bereich = transHTML(bereich)
+						# falls kein Bild -> Dummy Eintrag 
+						bereich = sub('<div class="minute">.*?</div>\n','<div class="minute"></div><img src="pics/dummy.gif" alt="Dummy" class="message-type">',bereich)
+						minute = findall(r'<div class="minute">(.*?)</div>',bereich)
+						if len(minute) == 0:
+								self["tickerlabel"].setText("Kein Liveticker gefunden!")
+						else:
+								bild = findall(r'<img src="pics/(.*?).gif',bereich)
+								# Paarung nur bei Konferenz
+								if search("event",self.konfurl) is not None:
+										for x in minute:
+												paarung.append(" ")
+								else:					
+										paarung = findall(r'class="message-header">(.*?)</a>',bereich)
+								text =  findall(r'<p>.*?\s*(.*?)</p>',bereich)	
+								textnr = len(text)
+								y = 0											
+								for x in text:
+										text[y] = sub("<[^>]*>","",text[y])				
+										ticker.append((bild[y],minute[y],paarung[y],strip(text[y])))
+										y +=1						 					
+								# ('halbzeit_gr', '', 'Ingolstadt - Wehen', 'Abpfiff durch T. Metzen, der Endstand lautet 0:0.    ')
+											
+								for pic, time, spiel, livetext in ticker:
+										if time == "":
+												time = "--"		
+										x = "%s ( %s min. / %d )" % (spiel,time,textnr)
+										res = [ x ]
+										if pic != "dummy":
+												png = LoadPixmap(pluginpath + "/icons/" + pic + ".png")
+												res.append(MultiContentEntryPixmapAlphaTest(pos=(10, 10), size=(55, 55), png = png))
+										res.append(MultiContentEntryText(pos=(70, 5), size=(xsizeticker, ysizeticker), font=afontticker, flags = RT_HALIGN_LEFT, text=x,color_sel=0x00ffffff))
+										if len(livetext) > maxchar:									
+												firstline = ""
+												secondline = ""
+												z=split(" ",livetext)
+												#print "--> %s %s" % (len(livetext),len(z))
+												for i in z[0:maxword]:
+														firstline = firstline + " " + i
+												for i in z[maxword:]:
+														secondline = secondline + " " + i
+												res.append(MultiContentEntryText(pos=(70, ysizeticker+5), size=(xsizeticker, ysizeticker), font=bfontticker, flags = RT_HALIGN_LEFT, text=strip(firstline),color_sel=0x00ffffff))										
+												res.append(MultiContentEntryText(pos=(70, 2*ysizeticker+5), size=(xsizeticker, ysizeticker), font=bfontticker, flags = RT_HALIGN_LEFT, text=strip(secondline),color_sel=0x00ffffff))
+										else:
+												res.append(MultiContentEntryText(pos=(70, ysizeticker+5), size=(xsizeticker, ysizeticker), font=bfontticker, flags = RT_HALIGN_LEFT, text=livetext))		
+										self.tableentries.append(res)						
+										textnr -=1
+								self["tickermenu"].l.setList(self.tableentries)
+			
+# 								print self.ergold
+# 								print erg
+# 								print self.tickerold
+# 								print text[0]
+# 								print self.hideflag
+# 								print self.actmenu								
+
+								# falls neue Ergebnisse oder neuer Tickerttext -> Screen anzeigen			
+								if not self.hideflag:
+										if self.ergold != erg and len(self.ergold) > 0:
+												self.actmenu = "ergmenu"
+												self["tickerlabel"].hide()
+												self["tickermenu"].selectionEnabled(0)
+												self["tickermenu"].hide()
+												self["ergmenu"].show()
+												self.hideScreen()
+										elif self.tickerold != text[0]:
+												self.actmenu = "tickermenu"
+												self["ergmenu"].hide()
+												self["tickermenu"].show()
+												self["tickerlabel"].show()
+												self["tickermenu"].selectionEnabled(1)
+												self.hideScreen()
+																								
+								self.ergold = erg
+								self.tickerold = text[0]
+																
+		def download(self, link, name):
+				self.loadinginprogress = True
+				getPage(link).addCallback(name).addErrback(self.downloadError)
+						
+		def downloadError(self,output):
+				self.loadinginprogress = False
+				self["tickerlabel"].setText("Fehler beim Download")
+
+		def hideScreen(self):
+				if self.hideflag == True:
+						self.hideflag = False
+						self.screenHideTimer.stop()
+						self.hide()
+				else:
+						self.hideflag = True
+						self.screenHideTimer.start(screenhidetimer)
+						self.show()
+								
+		def exit(self):
+				self.refreshInfoTimer.stop()
+				self.screenHideTimer.stop()
+				if self.loadinginprogress:
+						reactor.callLater(1,self.exit)
+				else:
+						config.plugins.buliticker.actmenu.value = self.actmenu
+						config.plugins.buliticker.actmenu.save()
+						configfile.save()
+						self.close()
+	
+#######################
+
+class ItemList(MenuList):
+		def __init__(self, items, enableWrapAround = True):
+			MenuList.__init__(self, items, enableWrapAround, eListboxPythonMultiContent)
+			self.l.setFont(-1, gFont("Regular", 22))
+			self.l.setFont(0, gFont("Regular", 20))
+			self.l.setFont(1, gFont("Regular", 18))
+			self.l.setFont(2, gFont("Regular", 16))
+			self.l.setFont(3, gFont("Regular", 15))
+		
+#############################						
+											        
+def main(session, **kwargs):
+			session.open(ShowFullTicker)
+						
+def Plugins(path,**kwargs):
+			global pluginpath
+			pluginpath = path
+ 			return PluginDescriptor(
+					name="Bundesliga Liveticker", 
+					description="1./2. Bundesliga Ticker (c)linpop.zdf.de", 
+					icon="zdftickerlogo.png",
+					where = [ PluginDescriptor.WHERE_EXTENSIONSMENU, PluginDescriptor.WHERE_PLUGINMENU ],
+					fnc=main)
