# -*- coding: UTF-8 -*-

#-------------------------------------------------------
#
#                 Streetinfo
#
#   Dieses Plugin holt vom Internet die aktuellen
#   Staumeldungen aus Deutschland.
#
#
#   Wir wuenschen allen Benutzern staufreie Fahrt!
#
#                 Version 1.0
#
#                  14.04.2011
#
#  Datenquelle: http://mobile.verkehrsinformation.de
#  Datenquelle: http://www.verkehrsinfo.de/
#  Datenquelle: http://www.svz-bw.de
#
#
#                  @Bauernbub
#
#-------------------------------------------------------

from Components.ActionMap import HelpableActionMap
from Components.ActionMap import ActionMap, NumberActionMap
from Components.AVSwitch import AVSwitch
from Components.Label import Label
from Components.Button import Button
from Components.Sources.StaticText import StaticText
from Components.ScrollLabel import ScrollLabel
from Components.MenuList import MenuList
from Components.MultiContent import MultiContentEntryText, MultiContentEntryPixmapAlphaTest
from Components.Pixmap import Pixmap
from Components.PluginComponent import plugins
from Components.Console import Console
from Components.ConfigList import ConfigListScreen, ConfigList
from Components.config import config, ConfigSubsection, ConfigText, ConfigSubList, getConfigListEntry, ConfigSelection,  ConfigIP, ConfigYesNo, ConfigSequence, ConfigNumber, ConfigInteger, ConfigPassword, NoSave, ConfigEnableDisable
from enigma import eListboxPythonMultiContent, ePicLoad, eServiceReference, eTimer, getDesktop, gFont, RT_HALIGN_LEFT

from os import listdir, popen
from Plugins.Plugin import PluginDescriptor
from Screens.ChoiceBox import ChoiceBox
from Screens.HelpMenu import HelpableScreen
from Screens.InfoBar import MoviePlayer
from Screens.MessageBox import MessageBox
from Screens.Screen import Screen
from Components.FileList import FileList
from time import sleep
from Tools.BoundFunction import boundFunction
from Tools.Directories import resolveFilename, SCOPE_PLUGINS, fileExists
from Tools.HardwareInfo import HardwareInfo
from Tools.LoadPixmap import LoadPixmap
from twisted.web.client import downloadPage, getPage
import htmlentitydefs, re, urllib2, urllib
from re import sub, split, search, match, findall
import os
from os import system, remove, path, walk, makedirs, listdir
from time import *
from Scroll import Scroll



###################################################
global MAIN_PAGE
global city, link



MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php"
PNG_PATH = resolveFilename(SCOPE_PLUGINS)+"/Extensions/StreetInfo/picon/"
deviceName = HardwareInfo().get_device_name()


data = "svz_bw_tpl: svz_bw;6e09bde33fae46dde0bb68bfc4ecaf63:medgr1mavnfd2hsj7vfrejut82m38ghv;JASLIDESHOWPLAY:1"
cookiehead = {
						"Keep-Alive":"800",
						"Referer":"http://www.aaf-board.com",
						"Cookie:": data,
						"Connection":"keep-alive"
						}


if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/startservice.cfg"):
		file = open("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/startservice.cfg","r")
		link = str(file.readline().strip())
		MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region" + link + "search"
		file.close()
else:
		link = "=2&tmp="
		MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region=2&tmp=search"


#---------------------- Skin Funktionen ---------------------------------------------------
def getAspect():
	val = AVSwitch().getAspectRatioSetting()
	return val/2

def getScale():
	return AVSwitch().getFramebufferScale()

def applySkinVars(skin,dict):
	for key in dict.keys():
		try:
			skin = skin.replace('{'+key+'}',dict[key])
		except Exception,e:
			print e,"@key=",key
	return skin

def transHTML(text):
		text = text.replace('&nbsp;'," ").replace('&#39;',"'").replace('&szlig;',"sz").replace('&quot;','"').replace('&ndash;',"-")
		text = text.replace('&copy;.*'," ").replace('&amp;',"&").replace('&uuml;',"ue").replace('&auml;',"ae").replace('&ouml;',"oe")
		text = text.replace('&Uuml;',"Ue").replace('&Auml;',"Ae").replace('&Ouml;',"Oe")
		text = text.replace('&#223;',"ae").replace('&raquo;',"").replace('&ldquo;','"').replace('&rdquo;','"')
		text = text.replace('\xfc',"ue").replace('\xd6',"Oe").replace('\xf6',"oe").replace('\xe4',"ae")
		return text

#------------------------------------------------------------------------------------------
#----------------------------------  MainMenuList   ---------------------------------------
#------------------------------------------------------------------------------------------
class MainMenuList(MenuList):
	def __init__(self):
		MenuList.__init__(self, [], False, eListboxPythonMultiContent)

		self.l.setFont(0, gFont("Regular",20))
		self.l.setFont(1, gFont("Regular", 24))
		self.listCompleted = []
		self.callback = None
		self.idx = 0
		self.thumb = ""
		self.pos = 20
		##print "[StreetInfo] MainMenuList"
#------------------------------------------------------------------------------------------
#------------------------------------------ Spinner ---------------------------------------
#------------------------------------------------------------------------------------------

class StreetPreviewCache(Screen):
	skin = """
		<screen position="center,center" size="76,76" flags="wfNoBorder" backgroundColor="#ffffff" >
			<eLabel position="2,2" zPosition="1" size="72,72" font="Regular;18" backgroundColor="#252525" />
			<widget name="spinner" position="14,14" zPosition="4" size="48,48" alphatest="on" />
		</screen>"""

	def __init__(self, session):
		self.session = session
		Screen.__init__(self, session)
		
		self["spinner"] = Pixmap()
		self.curr = 0
		
		self.timer = eTimer()
		self.timer.callback.append(self.showNextSpinner)

	def start(self):
		self.show()
		self.timer.start(120, False)

	def stop(self):
		self.hide()
		self.timer.stop()

	def showNextSpinner(self):
		self.curr += 1
		if self.curr > 10:
			self.curr = 0
		png = LoadPixmap(cached=True, path=PNG_PATH + str(self.curr) + ".png")
		self["spinner"].instance.setPixmap(png)

#------------------------------------------------------------------------------------------
# ------------------------------     Stauinfo     ---------------------------------------
#------------------------------------------------------------------------------------------
class Streetview(Screen, HelpableScreen):

	desktop = getDesktop(0)
	size = desktop.size()
	width = size.width()
	##print "Desktop ", size, width
	if width == 1024:
			skin = """<screen position="center,65" size="880,480" title="Stauinfo V 1.0" backgroundColor="#000000" >"""
			skin += """<widget name="textlist" zPosition="-1" position="0,67" size="880,363" font="Regular;22" halign="left" transparent="1" />
			<widget source="Titel" render="Label" position="20,3" zPosition="3" size="860,40" font="Regular;36" valign="center" halign="center" transparent="1" foregroundColor="#f47d19"/>
			<widget source="Titel2" render="Label" position="280,5" zPosition="2" size="440,40" font="Regular;28" valign="center" halign="left" transparent="1" foregroundColor="#f47d19"/>
			<widget source="key_red" render="Label" position="70,438" zPosition="2" size="200,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff" />
			<widget source="key_green" render="Label" position="260,438" zPosition="2" size="180,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff"/>
			<widget source="key_yellow" render="Label" position="450,438" zPosition="2" size="180,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff"/>
			<widget source="key_blue" render="Label" position="640,438" zPosition="2" size="180,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff"/>
			<widget source="key_ok" render="Label" position="730,438" zPosition="2" size="180,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff"/>
			<ePixmap position="30,443" size="36,25" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
			<ePixmap position="220,443" size="36,25" pixmap="skin_default/buttons/key_green.png" transparent="1" alphatest="on" />
			<ePixmap position="410,443" size="36,25" pixmap="skin_default/buttons/key_yellow.png" transparent="1" alphatest="on" />
			<ePixmap position="600,443" size="36,25" pixmap="skin_default/buttons/key_blue.png" transparent="1" alphatest="on" />
			<eLabel position="5,437" zPosition="2" size="870,2" backgroundColor="#e0eeee" />
	</screen>"""
	else:
			skin = """<screen position="center,center" size="890,505" title="Stauinfo V 1.0" backgroundColor="#000000" >"""
			skin += """<widget name="Mlist" position="0,90" size="890,365" zPosition="-1" backgroundColor="#000000" backgroundColorSelected="#f7f7f7" selectionDisabled="1" scrollbarMode="showOnDemand" />
			<widget name="textlist" zPosition="-1" position="0,67" size="880,373" font="Regular;26" halign="left" transparent="1" />
			<widget source="Titel" render="Label" position="20,13" zPosition="3" size="870,40" font="Regular;36" valign="center" halign="center" transparent="1" foregroundColor="#f47d19"/>
			<widget source="Titel2" render="Label" position="280,15" zPosition="2" size="440,40" font="Regular;28" valign="center" halign="left" transparent="1" foregroundColor="#f47d19"/>
			<widget source="key_red" render="Label" position="70,463" zPosition="2" size="200,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff" />
			<widget source="key_green" render="Label" position="260,463" zPosition="2" size="180,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff"/>
			<widget source="key_yellow" render="Label" position="450,463" zPosition="2" size="180,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff"/>
			<widget source="key_blue" render="Label" position="640,463" zPosition="2" size="180,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff"/>
			<widget source="key_ok" render="Label" position="730,463" zPosition="2" size="180,40" font="Regular;20" valign="center" halign="left" transparent="1" foregroundColor="#ffffff"/>
			<ePixmap position="30,468" size="36,25" pixmap="skin_default/buttons/key_red.png" transparent="1" alphatest="on" />
			<ePixmap position="220,468" size="36,25" pixmap="skin_default/buttons/key_green.png" transparent="1" alphatest="on" />
			<ePixmap position="410,468" size="36,25" pixmap="skin_default/buttons/key_yellow.png" transparent="1" alphatest="on" />
			<ePixmap position="600,468" size="36,25" pixmap="skin_default/buttons/key_blue.png" transparent="1" alphatest="on" />
			<eLabel position="5,455" zPosition="2" size="880,2" backgroundColor="#e0eeee" />
	</screen>"""

	def __init__(self, session):
		self.session = session
		global MAIN_PAGE
		MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php" + "?region=2&tmp=search"

		Screen.__init__(self, session)
		self["navigationTitle"] = Label(" ")
		self["Mlist"] = MainMenuList()
		self["Titel"] = StaticText()
		self["Titel2"] = StaticText()
		self["Titel2"].text = _("Stauinfos werden gesucht ...")
		self["key_green"] = StaticText()
		self["key_yellow"] = StaticText()
		self["key_red"] = StaticText()
		self["key_blue"] = StaticText()
		self["key_ok"] = StaticText()
		self["key_red"].text = _("Stau-Karte")
		self["key_green"].text = _("Stau-Cam")
		self["key_yellow"].text = _("Favorit")
		self["key_blue"].text = _("Home")
		self["key_ok"].text = _("(OK) Auswahl")
		self["textlist"] = Scroll("")

		HelpableScreen.__init__(self)
		self["actions"] = HelpableActionMap(self, "AAFKeyActions",
			{
				"cancel": (self.exit, "Beenden"),
				"menu": (self.Menu, "Menu"),
				"showEventInfo": (self.info, "Info"),
				"ok": (self.OK, "ok"),
				"left": (self.left, "Seite hoch"),
				"right": (self.right, "Seite runter"),
				"up": (self.up, "Hoch"),
				"down": (self.down, "Runter"),
				"red": (self.red, "Red"),
				"green": (self.Cam, "Green"),
				"yellow": (self.Fav1, "Yellow"),
				"blue": (self.Fav0, "Blue"),
			}, -2)
		self.StartPageFirst()


	def StartPageFirst(self):
		print "[StreetInfo] StartPageFirst:"
		self.cacheDialog = self.session.instantiateDialog(StreetPreviewCache)
		self["textlist"].callback = self.deactivateCacheDialog
		self.working = False
		self["textlist"].show
		self.cacheTimer = eTimer()
		self.cacheDialog.start()
		self.onLayoutFinish.append(self.getPage)

	def StartPage(self):
		global MAIN_PAGE, city, link
		self["Titel"].text = _("                                   ")
		self["Titel2"].text = _("suche Stauinfos ...")
		self.working = False
		print "[StreetInfo] Link City:" ,link
		self["textlist"].show
		MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region" + link + "search"
		self.getPage()

	def getPage(self, page=None):
		print "[StreetInfo] getPage:"
		self.working = True
		if not page:
			page = ""
		url = "%s%s"%(MAIN_PAGE, page)
		print "[StreetInfo] Url:" , url
		getPage(url).addCallback(self.getStauPage).addErrback(self.error)

	def error(self, err=""):
		print "[StreetInfo] Error:", err
		self.working = False
		self.deactivateCacheDialog()

	def deactivateCacheDialog(self):
		self.cacheDialog.stop()
		self.working = False

	def exit(self):
		self.close()
		self.deactivateCacheDialog()

	def Fav0(self):
		global MAIN_PAGE, city, link
		if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/startservice.cfg"):
				file = open("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/startservice.cfg","r")
				link = str(file.readline().strip())
				MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region" + link + "search"
				file.close()
		else:
				MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region=2&tmp=search"
		self.StartPage()

	def Fav1(self):
		global MAIN_PAGE, city, link
		if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/fav1.cfg"):
				file = open("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/fav1.cfg","r")
				link = str(file.readline().strip())
				MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region" + link + "search"
				file.close()
		else:
				MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region=2&tmp=search"
		self.StartPage()

	def Fav2(self):
		global MAIN_PAGE, city, link
		if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/fav2.cfg"):
				file = open("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/fav2.cfg","r")
				link = str(file.readline().strip())
				MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region" + link + "search"
				file.close()
		else:
				MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php?region=2&tmp=search"
		self.StartPage()

#------------------------------------------------------------------------------------------
	def Cam(self):
		panelmenu = ""
		self.session.open(CamPanel,panelmenu)

#------------------------------------------------------------------------------------------

	def OK(self):
		panelmenu = ""
		self.session.openWithCallback(self.MenuCallback, CityPanel,panelmenu)

	def info(self):
		message = "%s" % (_("\nInfo     =  diese Infodatei\n\nRot     =  Staukarte grafisch\n\nGruen  =  Staukameras aus verschi. Ländern\n\nGelb    =  springe zu Favorit\n\nBlau    =  springe zu Home-Favorit\n\nMenu  =  Landkarte\n\n\n                        @ AAF-Bauernbub"))
		self.session.open( MessageBox, message, MessageBox.TYPE_INFO)

	def settings_menu(self):
		self.session.open(StreetConfigScreen)

	def MenuCallback(self):
		self.StartPage()

#------------------------------------------------------------------------------------------
	def loadPicture(self,url=""):
		devicepath = "/tmp/brd_solo.jpg"
		path = "/tmp"
		h = urllib.urlretrieve(url, devicepath)
		filelist = devicepath
		self.session.open(PicView, filelist, 0, path, False)

#------------------------------------------------------------------------------------------
	def left(self):
		if not self.working:
			self["textlist"].firstPage()

	def right(self):
		if not self.working:
			self["textlist"].lastPage()

	def up(self):
		if not self.working:
				self["textlist"].pageUp()

	def down(self):
		if not self.working:
				self["textlist"].pageDown()
				
	def red(self):
		if not self.working:
			self.url="http://www.verkehrsinfo.de/google/maps/brd_solo.jpg"
			self.loadPicture(self.url)

	def Menu(self):
		if not self.working:
			land = str(self.land[0].lstrip())
			land = transHTML(land)

			#if land == "Baden-Württemberg":
			#	land = "Baden-Wuerttemberg"
			#if land == "Thüringen":
			#	land = "Thueringen"
			devicepath = "/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/Lander/" + land + ".jpg"
			path = "/tmp"
			filelist = devicepath
			print "[StreetInfo] ", filelist
			self.session.open(PicView, filelist, 0, path, False)
# ----------------------------------------------------------------------
	def getStauPage(self,html):
		# ---------- Verkehrsdaten -----------
		# <font face="arial" size="2" color="black"><b><a href="/index.php?region=13&tmp=search">Sachsen-Anhalt</a>
		print "suche ....."

		fulltext = re.compile(r'Staumeldungen.+? (.+?)&nbsp', re.DOTALL)
		self.land = fulltext.findall(html)
		print "land:" ,self.land[0].lstrip()
		
		fulltext = re.compile(r'<font face="arial" size="2" color="black">(.+?)</td>', re.DOTALL)
		info = fulltext.findall(html)

		wert = len(info)
		x = 2
		textall = ""
		while x < wert:
				textz = str(sub('<br><br> ',"\n\n",info[x]))
				textz = str(sub('<[^>]*>',"",textz))
				textz = str(sub('                                 ',"",textz))

				#print "[StreetInfo] ", textz
				#print "--------------------------------------------"
				textall = textall + textz + "\n--------------------------------------------------------------------------------------------------------------------------------------------\n"
				x = x +1

		self["Titel2"].text = _("                                   ")
		textall = transHTML(textall)
		self["Titel"].text = _("Stauinfo für " + self.land[0].lstrip())
		self["textlist"].setText(textall)
		self.working = False
		self.deactivateCacheDialog()
		self["textlist"].show

#------------------------------------------------------------------------------------------
	def konvert_uml(self,Satz):
		ffile = open("/tmp/foreca.tmp", "w")
		ffile.write(str(Satz))
		ffile.close()
		os.system("/usr/lib/enigma2/python/Plugins/Extensions/Foreca/filter.sh")
		ffile = open("/tmp/foreca.tmp", "r" )
		for line in ffile:
			Satz = line.lstrip()
		ffile.close
		return Satz

# -------------------------------------------------------------------
class CityPanelList(MenuList):
	def __init__(self, list, font0 = 22, font1 = 16, itemHeight = 30, enableWrapAround = True):
		MenuList.__init__(self, [], False, eListboxPythonMultiContent)
		self.l.setFont(0, gFont("Regular", font0))
		self.l.setFont(1, gFont("Regular", font1))
		self.l.setItemHeight(itemHeight)

# -------------------------------------------------------------------
class CityPanel(Screen, HelpableScreen):
	global city, link
	def __init__(self, session, panelmenu):
		self.session = session
		self.skin = """
			<screen name="SenderPanel" position="center,center" size="430,540" title="Auswahl Stauinfo" backgroundColor="#252525">
				<widget name="Mlist" position="10,10" size="400,490" zPosition="2" foregroundColor="#ffffff" backgroundColor="#252525"  backgroundColorSelected="#565656" scrollbarMode="showOnDemand" />
				<eLabel position="0,515" zPosition="2" size="430,1" backgroundColor="#c1cdc1" />
				<widget source="key_green" render="Label" position="100,512" zPosition="2" size="150,30" font="Regular;20" valign="center" halign="left" transparent="1" />
				<widget source="key_blue" render="Label" position="300,512" zPosition="2" size="250,30" font="Regular;20" valign="center" halign="left" transparent="1" />
				<ePixmap position="50,515" size="36,25" pixmap="skin_default/buttons/key_green.png" transparent="1" alphatest="on" />
				<ePixmap position="250,515" size="36,25" pixmap="skin_default/buttons/key_blue.png" transparent="1" alphatest="on" />
			</screen>"""

		Screen.__init__(self, session)
		self.Mlist = []
		self.getStreetPage()

		self.onChangedEntry = []
		self["Mlist"] = CityPanelList([])
		self["key_green"] = StaticText()
		self["key_blue"] = StaticText()
		self["key_green"].text = _("Fav1")
		self["key_blue"].text = _("Start")

		HelpableScreen.__init__(self)
		self["actions"] = HelpableActionMap(self, "AAFKeyActions",
			{
				"cancel": (self.Exit, "Beenden"),
				"left": (self.left, "Seite hoch"),
				"right": (self.right, "Seite runter"),
				"up": (self.up, "Hoch"),
				"down": (self.down, "Runter"),
				"ok": (self.ok, "OK"),
				"green": (self.green, "Grun"),
				"blue": (self.blue, "Blau"),
			}, -2)

	def up(self):
		self["Mlist"].up()
		self["Mlist"].selectionEnabled(1)

	def down(self):
		self["Mlist"].down()
		self["Mlist"].selectionEnabled(1)

	def left(self):
		self["Mlist"].pageUp()

	def right(self):
		self["Mlist"].pageDown()

	def Exit(self):
		self.close()

	def ok(self):
		global city, link
		city = self['Mlist'].l.getCurrentSelection()[0][0]
		link = self['Mlist'].l.getCurrentSelection()[0][1]
		print "[StreetInfo] Select: ", city
		self.close()

	def blue(self):
		link = self['Mlist'].l.getCurrentSelection()[0][1]
		##print "[StreetInfo] Service:", link
		fwrite = open("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/startservice.cfg", "w")
		fwrite.write(link)
		fwrite.close()
		message = "%s %s" % (_("Dieses Bundesland wurde als Startservice gesetzt!\n\n                       "), self['Mlist'].l.getCurrentSelection()[0][0])
		self.session.open( MessageBox, message, MessageBox.TYPE_INFO, timeout=3)

	def green(self):
		link = self['Mlist'].l.getCurrentSelection()[0][1]
		fwrite = open("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/fav1.cfg", "w")
		fwrite.write(link)
		fwrite.close()
		message = "%s %s" % (_("Dieses Bundesland wurde als Favorit 1 gesetzt!\n\n                       "), self['Mlist'].l.getCurrentSelection()[0][0])
		self.session.open( MessageBox, message, MessageBox.TYPE_INFO, timeout=3)

	def yellow(self):
		link = self['Mlist'].l.getCurrentSelection()[0][1]
		fwrite = open("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/fav2.cfg", "w")
		fwrite.write(link)
		fwrite.close()
		message = "%s %s" % (_("Dieses Bundesland wurde als Favorit 2 gesetzt!\n\n                       "), self['Mlist'].l.getCurrentSelection()[0][0])
		self.session.open( MessageBox, message, MessageBox.TYPE_INFO, timeout=3)

	def CityEntryItem(self,entry):
		rot = 16711680
		gruen = 60928
		dgruen = 52480
		drot = 0xf47d19
		mblau = 8900346
		hblau = 11592447
		dblau = 5215437
		weiss = 0xffffff
		orange = 0xf47d19
		grau = 0x565656

		res = [entry]
		#	return (eListboxPythonMultiContent.TYPE_TEXT, pos[0], pos[1], size[0], size[1], font, flags, text, color, color_sel, backcolor, backcolor_sel, border_width, border_color)
		#res.append(MultiContentEntryPixmapAlphaTest(pos=(2, 5), size=(100, 60), png=entry[0]))  # png vorn
		res.append(MultiContentEntryText(pos=(30, 6), size=(300, 35), font=0, text=entry[0], color=mblau, color_sel=mblau, backcolor_sel=grau))
		return res

# --------------------------------------------------------------------------
	def getStreetLand(self,html):
		# ---------- Verkehrsdaten -----------
		# <font face="arial" size="2" color="black"><b><a href="/index.php?region=13&tmp=search">Sachsen-Anhalt</a>
		print "suche ....."

		fulltext = re.compile(r'<a href=.+?region(.+?)search', re.DOTALL)
		link_land = fulltext.findall(html)
		fulltext = re.compile(r'sear.+?>(.+?)<', re.DOTALL)
		b_land = fulltext.findall(html)
		#print b_land
		wert = len(b_land) -1
		x = 0
		while x < wert:
				#print b_land[x]
				#print link_land[x]
				#print "--------------------------------------------"
				self.Mlist.append(self.CityEntryItem((_(b_land[x]), link_land[x])))
				x = x +1

		self["Mlist"].l.setList(self.Mlist)
		self["Mlist"].selectionEnabled(1)
		self["Mlist"].show

# --------------------------------------------------------------------------

	def getStreetPage(self, page=None):
		print "[StreetInfo] getPage:"
		self.working = True
		MAIN_PAGE = "http://mobile.verkehrsinformation.de/index.php"
		print "[StreetInfo] Url:" , MAIN_PAGE
		getPage(MAIN_PAGE).addCallback(self.getStreetLand).addErrback(self.error)
		
	def error(self, err=""):
		print "[StreetInfo] Error:", err
		self.working = False
		self.deactivateCacheDialog()

	def deactivateCacheDialog(self):
		self.cacheDialog.stop()
		self.working = False


# -------------------------------------------------------------------
class CamPanel(Screen, HelpableScreen):
	global camtext, camlink
	def __init__(self, session, panelmenu):
		self.session = session
		self.skin = """
			<screen name="SenderPanel" position="center,center" size="670,440" title="Auswahl Webcam" backgroundColor="#252525">
				<widget name="Mlist" position="10,10" size="650,423" zPosition="2" foregroundColor="#ffffff" backgroundColor="#252525"  backgroundColorSelected="#565656" scrollbarMode="showOnDemand" />
			</screen>"""

		Screen.__init__(self, session)
		self.Mlist = []

		if fileExists("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/cam.cfg"):
			file = open("/usr/lib/enigma2/python/Plugins/Extensions/StreetInfo/cam.cfg", "r")
			for line in file:
				if len(line) >= 10:
						camtext = line.split(",")[0]
						camlink = line.split(",")[1]
						self.Mlist.append(self.CamEntryItem((_(camtext), camlink)))
			file.close

		self.onChangedEntry = []
		self["Mlist"] = CityPanelList([])
		self["Mlist"].l.setList(self.Mlist)
		self["Mlist"].selectionEnabled(1)


		HelpableScreen.__init__(self)
		self["actions"] = HelpableActionMap(self, "AAFKeyActions",
			{
				"cancel": (self.Exit, "Beenden"),
				"left": (self.left, "Seite hoch"),
				"right": (self.right, "Seite runter"),
				"up": (self.up, "Hoch"),
				"down": (self.down, "Runter"),
				"ok": (self.ok, "OK"),
			}, -2)

	def up(self):
		self["Mlist"].up()
		self["Mlist"].selectionEnabled(1)

	def down(self):
		self["Mlist"].down()
		self["Mlist"].selectionEnabled(1)

	def left(self):
		self["Mlist"].pageUp()

	def right(self):
		self["Mlist"].pageDown()

	def Exit(self):
		self.close()

	def ok(self):
		global camtext, camlink
		camtext = self['Mlist'].l.getCurrentSelection()[0][0]
		camlink = self['Mlist'].l.getCurrentSelection()[0][1]
		print "[StreetInfo] Select: ", camlink

		self.url= camlink
		self.loadCam(self.url)
		#self.close()

	def loadCam(self,url=""):
		devicepath = "/tmp/brd_solo.jpg"
		path = "/tmp"

		# send Cookie-Information to svz and you become rights
		data = "svz_bw_tpl: svz_bw;6e09bde33fae46dde0bb68bfc4ecaf63:medgr1mavnfd2hsj7vfrejut82m38ghv;JASLIDESHOWPLAY:1"
		cookiehead = {
						"Keep-Alive":"800",
						"Referer":"http://www.svz-bw.de",
						"Cookie:": data,
						"Connection":"keep-alive"
						}

		agt = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.2) Gecko/2008091620 Firefox/3.0.2"
		downloadPage(url,devicepath,headers=cookiehead,agent=agt).addCallback(self.onLastFinished).addErrback(self.onLoadFailed)

  	#h = urllib.urlretrieve(url, devicepath)
		#filelist = devicepath
		#self.session.open(PicView, filelist, 0, path, False)

	def onLastFinished(self,url=None):
		devicepath = "/tmp/brd_solo.jpg"
		path = "/tmp"
		filelist = devicepath
		self.session.open(PicView, filelist, 0, path, False)

	def onLoadFailed(self,error):
		print "[BoardViewer] ReadBoard:onLoadFAILED",error

	def CamEntryItem(self,entry):
		rot = 16711680
		gruen = 60928
		dgruen = 52480
		drot = 0xf47d19
		mblau = 8900346
		hblau = 11592447
		dblau = 5215437
		weiss = 0xffffff
		orange = 0xf47d19
		grau = 0x565656

		res = [entry]
		#	return (eListboxPythonMultiContent.TYPE_TEXT, pos[0], pos[1], size[0], size[1], font, flags, text, color, color_sel, backcolor, backcolor_sel, border_width, border_color)
		#res.append(MultiContentEntryPixmapAlphaTest(pos=(2, 5), size=(100, 60), png=entry[0]))  # png vorn
		res.append(MultiContentEntryText(pos=(30, 6), size=(620, 35), font=0, text=entry[0], color=mblau, color_sel=mblau, backcolor_sel=grau))
		return res

#------------------------------------------------------------------------------------------
#-------------------------- Bildbetrachter der Grossbilder --------------------------------
#------------------------------------------------------------------------------------------
class PicView(Screen):
	def __init__(self, session, filelist, index, path, startslide):
		self.session = session
		self.bgcolor = "#00000000"
		space = 5
		size_w = getDesktop(0).size().width()
		size_h = getDesktop(0).size().height()

		self.skindir = "/tmp"
		self.skin = "<screen position=\"0,0\" size=\"" + str(size_w) + "," + str(size_h) + "\" > \
			<eLabel position=\"0,0\" zPosition=\"0\" size=\""+ str(size_w) + "," + str(size_h) + "\" backgroundColor=\""+ self.bgcolor +"\" /><widget name=\"pic\" position=\"" + str(space) + "," + str(space) + "\" size=\"" + str(size_w-(space*2)) + "," + str(size_h-(space*2)) + "\" zPosition=\"1\" alphatest=\"on\" /></screen>"

		Screen.__init__(self, session)
		self["actions"] = ActionMap(["OkCancelActions", "ColorActions", "DirectionActions", "MovieSelectionActions", "MenuActions", "SetupActions"],
		{
			"cancel": self.Exit,
		}, -1)

		self["pic"] = Pixmap()
		self.filelist = filelist
		self.old_index = 0
		self.lastindex = index
		self.currPic = []
		self.shownow = True
		self.dirlistcount = 0
		self.index = 0
		self.picload = ePicLoad()
		self.picload.PictureData.get().append(self.finish_decode)
		self.onLayoutFinish.append(self.setPicloadConf)
		self.startslide = startslide

	def setPicloadConf(self):
		sc = getScale()
		self.picload.setPara([self["pic"].instance.size().width(), self["pic"].instance.size().height(), sc[0], sc[1], 0, 1, self.bgcolor])
		self.start_decode()

	def ShowPicture(self):
		if self.shownow and len(self.currPic):
			self.shownow = False
			self["pic"].instance.setPixmap(self.currPic[0].__deref__())

	def finish_decode(self, picInfo=""):
		ptr = self.picload.getData()
		if ptr != None:
			self.currPic = []
			self.currPic.append(ptr)
			self.ShowPicture()

	def start_decode(self):
		self.picload.startDecode(self.filelist)

	def Exit(self):
		del self.picload
		self.close(self.lastindex + self.dirlistcount)


#------------------------------------------------------------------------------------------
#-----------------------Haupt Programm ----------------------------------------------------
#------------------------------------------------------------------------------------------
def start(session, **kwargs):
	session.open(Streetview)

def Plugins(**kwargs):
	return PluginDescriptor(name="StreetInfo", description="Stauwarnungen", where=[PluginDescriptor.WHERE_EXTENSIONSMENU, PluginDescriptor.WHERE_PLUGINMENU], fnc=start)
