Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/LICENSE
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/LICENSE	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/LICENSE	(revision 9324)
@@ -0,0 +1,12 @@
+All Files of this Software are licensed under the Creative Commons 
+Attribution-NonCommercial-ShareAlike 3.0 Unported 
+License if not stated otherwise in a files head. To view a copy of this license, visit
+http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative
+Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
+
+Alternatively, this plugin may be distributed and executed on hardware which
+is licensed by Dream Multimedia GmbH.
+
+This plugin is NOT free software. It is open source, you are allowed to
+modify it (if you keep the license), but it may not be commercially 
+distributed other than under the conditions noted above.
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebChilds/WebUploadResource.py
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebChilds/WebUploadResource.py	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebChilds/WebUploadResource.py	(revision 9324)
@@ -0,0 +1,43 @@
+from os import write as os_write, close as os_close, O_WRONLY as os_O_WRONLY, O_CREAT as os_O_CREAT, open as os_open, remove as os_remove
+from twisted.web import resource, http
+
+class WebUploadResource(resource.Resource):
+	FILENAME = "/tmp/webbouqueteditor_backup.tar"
+	def __init__(self, session):
+		self.session = session
+		resource.Resource.__init__(self)
+
+	def render_POST(self, req):
+		req.setResponseCode(http.OK)
+		req.setHeader('Content-type', 'application; xhtml+xml;' )
+		req.setHeader('charset', 'UTF-8')	
+		data = req.args['file'][0]
+		if not data:
+			result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
+				<e2simplexmlresult>\n
+					<e2state>False</e2state>
+					<e2statetext>Filesize was 0, not uploaded</e2statetext>
+				</e2simplexmlresult>\n"""
+			return result
+		fd = os_open( self.FILENAME, os_O_WRONLY|os_O_CREAT )
+		if fd:
+			cnt = os_write(fd, data)
+			os_close(fd)
+		if cnt <= 0:
+			try:
+				os_remove(FILENAME)
+			except OSError, oe:
+				pass
+			result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
+				<e2simplexmlresult>\n
+					<e2state>False</e2state>
+					<e2statetext>Error writing to disk, not uploaded</e2statetext>
+				</e2simplexmlresult>\n"""
+		else:
+			result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
+				<e2simplexmlresult>\n
+					<e2state>True</e2state>
+					<e2statetext>%s</e2statetext>
+				</e2simplexmlresult>\n""" % self.FILENAME
+		return result
+
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/BouquetEditor.py
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/BouquetEditor.py	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/BouquetEditor.py	(revision 9324)
@@ -0,0 +1,683 @@
+from enigma import eServiceReference, eServiceCenter, eDVBDB
+from Components.Sources.Source import Source
+from Screens.ChannelSelection import service_types_tv, MODE_TV, MODE_RADIO
+from Components.config import config
+from os import remove, path, popen
+from Screens.InfoBar import InfoBar
+from ServiceReference import ServiceReference
+from Components.ParentalControl import parentalControl, IMG_WHITESERVICE, IMG_WHITEBOUQUET, IMG_BLACKSERVICE, IMG_BLACKBOUQUET, LIST_BLACKLIST
+from re import compile as re_compile
+from Components.NimManager import nimmanager 
+
+class BouquetEditor(Source):
+
+	ADD_BOUQUET = 0
+	REMOVE_BOUQUET = 1
+	MOVE_BOUQUET = 2
+	ADD_SERVICE_TO_BOUQUET = 3
+	REMOVE_SERVICE = 4
+	MOVE_SERVICE = 5
+	ADD_PROVIDER_TO_BOUQUETLIST = 6
+	ADD_SERVICE_TO_ALTERNATIVE = 7
+	REMOVE_ALTERNATIVE_SERVICES = 8
+	TOGGLE_LOCK = 9
+	BACKUP = 10
+	RESTORE = 11
+	RENAME_SERVICE = 12
+	ADD_MARKER_TO_BOUQUET = 13
+	
+	BACKUP_PATH = "/tmp"
+	BACKUP_FILENAME = "webbouqueteditor_backup.tar"
+	
+
+	def __init__(self, session, func=ADD_BOUQUET):
+		Source.__init__(self)
+		self.func = func
+		self.session = session
+		self.command = None
+		self.bouquet_rootstr = ""
+		self.result = ( False, "one two three four unknown command" )
+		
+
+	def handleCommand(self, cmd):
+		print "[WebComponents.BouquetEditor] handleCommand with cmd = ", cmd
+		if self.func is self.ADD_BOUQUET:
+			self.result = self.addToBouquet(cmd)
+		elif self.func is self.MOVE_BOUQUET:
+			self.result = self.moveBouquet(cmd)	
+		elif self.func is self.MOVE_SERVICE:
+			self.result = self.moveService(cmd)	
+		elif self.func is self.REMOVE_BOUQUET:
+			self.result = self.removeBouquet(cmd)
+		elif self.func is self.REMOVE_SERVICE:
+			self.result = self.removeService(cmd)
+		elif self.func is self.ADD_SERVICE_TO_BOUQUET:
+			self.result = self.addServiceToBouquet(cmd)
+		elif self.func is self.ADD_PROVIDER_TO_BOUQUETLIST:
+			self.result = self.addProviderToBouquetlist(cmd)
+		elif self.func is self.ADD_SERVICE_TO_ALTERNATIVE:
+			self.result = self.addServiceToAlternative(cmd)
+		elif self.func is self.REMOVE_ALTERNATIVE_SERVICES:
+			self.result = self.removeAlternativeServices(cmd)
+		elif self.func is self.TOGGLE_LOCK:
+			self.result = self.toggleLock(cmd)
+		elif self.func is self.BACKUP:
+			self.result = self.backupFiles(cmd)
+		elif self.func is self.RESTORE:
+			self.result = self.restoreFiles(cmd)
+		elif self.func is self.RENAME_SERVICE:
+			self.result = self.renameService(cmd)
+		elif self.func is self.ADD_MARKER_TO_BOUQUET:
+			self.result = self.addMarkerToBouquet(cmd)
+		else:
+			self.result = ( False, "one two three four unknown command" )
+
+	def addToBouquet(self, param):
+		print "[WebComponents.BouquetEditor] addToBouquet with param = ", param
+		bName = param["name"]
+		if bName is None:
+			return (False, "No bouquet name given!")
+		mode = MODE_TV # init
+		if "mode" in param:
+			if param["mode"] is not None:
+				mode = int(param["mode"])
+		return self.addBouquet(bName, mode, None)
+
+	def addBouquet(self, bName, mode, services):
+		if config.usage.multibouquet.value:
+			mutableBouquetList = self.getMutableBouquetList(mode)
+			if mutableBouquetList:
+				if mode == MODE_TV:
+					bName += " (TV)"
+					sref = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.%s.tv\" ORDER BY bouquet'%(self.buildBouquetID(bName, "userbouquet.", mode))
+				else:
+					bName += " (Radio)"
+					sref = '1:7:2:0:0:0:0:0:0:0:FROM BOUQUET \"userbouquet.%s.radio\" ORDER BY bouquet'%(self.buildBouquetID(bName, "userbouquet.", mode))
+				new_bouquet_ref = eServiceReference(sref)
+				if not mutableBouquetList.addService(new_bouquet_ref):
+					mutableBouquetList.flushChanges()
+					eDVBDB.getInstance().reloadBouquets()
+					mutableBouquet = self.getMutableList(new_bouquet_ref)
+					if mutableBouquet:
+						mutableBouquet.setListName(bName)
+						if services is not None:
+							for service in services:
+								if mutableBouquet.addService(service):
+									print "add", service.toString(), "to new bouquet failed"
+						mutableBouquet.flushChanges()
+						self.setRoot(self.bouquet_rootstr)
+						return (True, "Bouquet %s created." % bName)
+					else:
+						return (False, "Get mutable list for new created bouquet failed!")
+
+				else:
+					return (False, "Bouquet %s already exists." % bName)
+			else:
+				return (False, "Bouquetlist is not editable!")
+		else:
+			return (False, "Multi-Bouquet is not enabled!")
+
+
+	def addProviderToBouquetlist(self, param):
+		print "[WebComponents.BouquetEditor] addProviderToBouquet with param = ", param
+		refstr = sref = param["sProviderRef"]
+		if refstr is None:
+			return (False, "No provider given!")
+		mode = MODE_TV # init
+		if "mode" in param:
+			if param["mode"] is not None:
+				mode = int(param["mode"])
+		ref = eServiceReference(refstr)
+		provider = ServiceReference(ref)
+		providerName = provider.getServiceName()
+		serviceHandler = eServiceCenter.getInstance()
+		services = serviceHandler.list(provider.ref)
+		return self.addBouquet(providerName, mode, services and services.getContent('R', True))
+
+	def removeBouquet(self, param):
+		print "[WebComponents.BouquetEditor] removeBouquet with param = ", param
+		refstr = sref = param["sBouquetRef"]
+		if refstr is None:
+			return (False, "No bouquet name given!")
+		mode = MODE_TV # init
+		if "mode" in param:
+			if param["mode"] is not None:
+				mode = int(param["mode"])
+		
+		if param.has_key("BouquetRefRoot"):
+			bouquet_root = param["BouquetRefRoot"] # only when removing alternative
+		else:
+			bouquet_root = None
+		pos = refstr.find('FROM BOUQUET "')
+		filename = None
+		if pos != -1:
+			refstr = refstr[pos+14:]
+			pos = refstr.find('"')
+			if pos != -1:
+				filename = '/etc/enigma2/' + refstr[:pos] # FIXMEEE !!! HARDCODED /etc/enigma2
+		ref = eServiceReference(sref)
+		bouquetName = self.getName(ref)
+		if not bouquetName:
+			bouquetName = filename
+		if bouquet_root:
+			mutableList = self.getMutableList(eServiceReference(bouquet_root))
+		else:
+			mutableList = self.getMutableBouquetList(mode)
+			
+		if ref.valid() and mutableList is not None:
+			if not mutableList.removeService(ref):
+				mutableList.flushChanges()
+				self.setRoot(self.bouquet_rootstr)
+			else:
+				return (False, "Bouquet %s removed failed." % filename)
+		else:
+			return (False, "Bouquet %s removed failed, sevicerefence or mutable list is not valid." % filename)
+		try:
+			if filename is not None:
+				remove(filename)
+				return (True, "Bouquet %s deleted." % bouquetName)
+		except OSError:
+			return (False, "Error: Bouquet %s could not deleted, OSError." % filename)
+
+	def moveBouquet(self, param):
+		print "[WebComponents.BouquetEditor] moveBouquet with param = ", param
+		sBouquetRef = param["sBouquetRef"]
+		if sBouquetRef is None:
+			return (False, "No bouquet name given!")
+		mode = MODE_TV # init
+		if "mode" in param:
+			if param["mode"] is not None:
+				mode = int(param["mode"])
+		position = None
+		if "position" in param:
+			if param["position"] is not None:
+				position = int(param["position"])
+		if position is None:
+			return (False, "No position given!")
+		mutableBouquetList = self.getMutableBouquetList(mode)
+		if mutableBouquetList is not None:
+			ref = eServiceReference(sBouquetRef)
+			mutableBouquetList.moveService(ref, position)
+			mutableBouquetList.flushChanges()
+			self.setRoot(self.bouquet_rootstr)
+			return (True, "Bouquet %s moved." % self.getName(ref))
+		else:
+			return (False, "Bouquet %s can not be moved." % self.getName(ref))
+			
+	def removeService(self, param):
+		print "[WebComponents.BouquetEditor] removeService with param = ", param
+		sBouquetRef = param["sBouquetRef"]
+		if sBouquetRef is None:
+			return (False, "No bouquet given!")
+		sRef = None
+		if "sRef" in param:
+			if param["sRef"] is not None:
+				sRef =param["sRef"]
+		if sRef is None:
+			return (False, "No service given!")
+		ref = eServiceReference(sRef)
+		if ref.flags & eServiceReference.isGroup: # check if  service is an alternative, if so delete it with removeBouquet
+			new_param = {}
+			new_param["sBouquetRef"] = sRef
+			new_param["mode"] = None # of no interest when passing BouquetRefRoot
+			new_param["BouquetRefRoot"] = sBouquetRef
+			returnValue = self.removeBouquet(new_param)
+			if returnValue[0]:
+				return (True, "Service %s removed." % self.getName(ref))
+		else:
+			bouquetRef = eServiceReference(sBouquetRef)
+			mutableBouquetList = self.getMutableList(bouquetRef)
+			if mutableBouquetList is not None:
+				if not mutableBouquetList.removeService(ref):
+					mutableBouquetList.flushChanges()
+					self.setRoot(sBouquetRef)
+					return (True, "Service %s removed from bouquet %s." % (self.getName(ref), self.getName(bouquetRef)))
+		return (False, "Service %s can not be removed." % self.getName(ref))
+
+	def moveService(self, param):
+		print "[WebComponents.BouquetEditor] moveService with param = ", param
+		sBouquetRef = param["sBouquetRef"]
+		if sBouquetRef is None:
+			return (False, "No bouquet given!")
+		sRef = None
+		if "sRef" in param:
+			if param["sRef"] is not None:
+				sRef =param["sRef"]
+		if sRef is None:
+			return (False, "No service given!")
+		position = None
+		if "position" in param:
+			if param["position"] is not None:
+				position = int(param["position"])
+		if position is None:
+			return (False, "No position given!")
+		mutableBouquetList = self.getMutableList(eServiceReference(sBouquetRef))
+		if mutableBouquetList is not None:
+			ref = eServiceReference(sRef)
+			mutableBouquetList.moveService(ref, position)
+			mutableBouquetList.flushChanges()
+			self.setRoot(sBouquetRef)
+			return (True, "Service %s moved." % self.getName(ref))
+		return (False, "Service can not be moved.")
+
+	def addServiceToBouquet(self, param):
+		print "[WebComponents.BouquetEditor] addService with param = ", param
+		sBouquetRef = param["sBouquetRef"]
+		if sBouquetRef is None:
+			return (False, "No bouquet given!")
+		sRef = None
+		if "sRef" in param:
+			if param["sRef"] is not None:
+				sRef =param["sRef"]
+		if sRef is None:
+			return (False, "No service given!")
+		sName = None
+		if "Name" in param:
+			if param["Name"] is not None:
+				sName =param["Name"]
+		sRefBefore = eServiceReference()
+		if "sRefBefore" in param:
+			if param["sRefBefore"] is not None:
+				sRefBefore = eServiceReference(param["sRefBefore"])
+		bouquetRef = eServiceReference(sBouquetRef)
+		mutableBouquetList = self.getMutableList(bouquetRef)
+		if mutableBouquetList is not None:
+			ref = eServiceReference(sRef)
+			if sName:
+				ref.setName(sName)
+			if not mutableBouquetList.addService(ref, sRefBefore):
+				mutableBouquetList.flushChanges()
+				self.setRoot(sBouquetRef)
+				return (True, "Service %s added." % self.getName(ref))
+			else:
+				bouquetName = self.getName(bouquetRef)
+				return (False, "Service %s already exists in bouquet %s." % (self.getName(ref), bouquetName))
+		return (False, "This service can not be added.")
+		
+	def addMarkerToBouquet(self, param):
+		print "[WebComponents.BouquetEditor] addMarkerToBouquet with param = ", param
+		sBouquetRef = param["sBouquetRef"]
+		if sBouquetRef is None:
+			return (False, "No bouquet given!")
+		name = None
+		if "Name" in param:
+			if param["Name"] is not None:
+				name =param["Name"]
+		if name is None:
+			return (False, "No marker-name given!")
+		sRefBefore = eServiceReference()
+		if "sRefBefore" in param:
+			if param["sRefBefore"] is not None:
+				sRefBefore = eServiceReference(param["sRefBefore"])
+		bouquet_ref = eServiceReference(sBouquetRef) 
+		mutableBouquetList = self.getMutableList(bouquet_ref)
+		cnt = 0
+		while mutableBouquetList:
+			service_str = '1:64:%d:0:0:0:0:0:0:0::%s'%(cnt, name)
+			ref = eServiceReference(service_str)
+			if not mutableBouquetList.addService(ref, sRefBefore):
+				mutableBouquetList.flushChanges()
+				self.setRoot(sBouquetRef)
+				return (True, "Marker added.")
+			cnt+=1
+		return (False, "Internal error!")
+		
+	def renameService(self, param):
+		sRef = None
+		if "sRef" in param:
+			if param["sRef"] is not None:
+				sRef =param["sRef"]
+		if sRef is None:
+			return (False, "No service given!")
+		sName = None
+		if "newName" in param:
+			if param["newName"] is not None:
+				sName =param["newName"]
+		if sName is None:
+			return (False, "No new servicename given!")		
+		sBouquetRef = None
+		if "sBouquetRef" in param:
+			if param["sBouquetRef"] is not None:
+				sBouquetRef =param["sBouquetRef"]
+		cur_ref = eServiceReference(sRef) 
+		if cur_ref.flags & eServiceReference.mustDescent:
+			# bouquets or alternatives can be renamed with setListName directly
+			mutableBouquetList = self.getMutableList(cur_ref)
+			if mutableBouquetList:
+					mutableBouquetList.setListName(sName)
+					mutableBouquetList.flushChanges()
+					if sBouquetRef: # BouquetRef is given when renaming alternatives
+						self.setRoot(sBouquetRef)
+					else:
+						mode = MODE_TV # mode is given when renaming bouquet
+						if "mode" in param:
+							if param["mode"] is not None:
+								mode = int(param["mode"])
+						if mode == MODE_TV:
+							bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'
+						else:
+							bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet'
+						self.setRoot(bouquet_rootstr)
+					return (True, "Bouquet renamed successfully.")
+		else: # service
+			# services can not be renamed directly, so delete the current and add it again with new servicename
+			sRefBefore = None
+			if "sRefBefore" in param:
+				if param["sRefBefore"] is not None:
+					sRefBefore =param["sRefBefore"]
+			new_param = {}
+			new_param["sBouquetRef"] = sBouquetRef
+			new_param["sRef"] = sRef
+			new_param["Name"] = sName
+			new_param["sRefBefore"] = sRefBefore
+			returnValue = self.removeService(new_param)
+			if returnValue[0]:
+				returnValue = self.addServiceToBouquet(new_param)
+				if returnValue[0]:
+					return (True, "Service renamed successfully.")
+		return (False, "Service can not be renamed.")
+		
+	def addServiceToAlternative(self, param):
+		sBouquetRef = param["sBouquetRef"]
+		if sBouquetRef is None:
+			return (False, "No bouquet given!")
+		sRef = None
+		if "sRef" in param:
+			if param["sRef"] is not None:
+				sRef =param["sRef"] #  service to add to the alternative
+		if sRef is None:
+			return (False, "No service given!")
+		sCurrentRef = param["sCurrentRef"] #  alternative service
+		if sCurrentRef is None:
+			return (False, "No current service given!")
+		cur_ref = eServiceReference(sCurrentRef) 
+		# check if  service is already an alternative
+		if not (cur_ref.flags & eServiceReference.isGroup):
+			# sCurrentRef is not an alternative service yet, so do this and add itself to new alternative liste
+			mode = MODE_TV # init
+			if "mode" in param:
+				if param["mode"] is not None:
+					mode = int(param["mode"])
+			mutableBouquetList = self.getMutableList(eServiceReference(sBouquetRef))
+			if mutableBouquetList:
+				cur_service = ServiceReference(cur_ref)
+				name = cur_service.getServiceName()
+				if mode == MODE_TV:
+					sref = '1:134:1:0:0:0:0:0:0:0:FROM BOUQUET \"alternatives.%s.tv\" ORDER BY bouquet'%(self.buildBouquetID(name, "alternatives.", mode))
+				else:
+					sref = '1:134:2:0:0:0:0:0:0:0:FROM BOUQUET \"alternatives.%s.radio\" ORDER BY bouquet'%(self.buildBouquetID(name, "alternatives.", mode))
+				new_ref = eServiceReference(sref)
+				if not mutableBouquetList.addService(new_ref, cur_ref):
+					mutableBouquetList.removeService(cur_ref)
+					mutableBouquetList.flushChanges()
+					eDVBDB.getInstance().reloadBouquets()
+					mutableAlternatives = self.getMutableList(new_ref)
+					if mutableAlternatives:
+						mutableAlternatives.setListName(name)
+						if mutableAlternatives.addService(cur_ref):
+									print "add", cur_ref.toString(), "to new alternatives failed"
+						mutableAlternatives.flushChanges()
+						self.setRoot(sBouquetRef)
+						sCurrentRef = sref # currentRef is now an alternative (bouquet)
+					else:
+						return (False, "Get mutable list for new created alternative failed!")
+				else:
+					return (False, "Alternative %s created failed." % name)
+			else:
+				return (False, "Bouquetlist is not editable!")
+		# add service to alternative-bouquet
+		new_param = {}
+		new_param["sBouquetRef"] = sCurrentRef
+		new_param["sRef"] = sRef
+		returnValue = self.addServiceToBouquet(new_param)
+		if returnValue[0]:
+			cur_ref = eServiceReference(sCurrentRef) 
+			cur_service = ServiceReference(cur_ref)
+			name = cur_service.getServiceName()
+			service_ref = ServiceReference(sRef)
+			service_name = service_ref.getServiceName()
+			return (True, "Added %s to alternative service %s." % (service_name,name))
+		else:
+			return returnValue
+			
+	def removeAlternativeServices(self, param):
+		print "[WebComponents.BouquetEditor] removeAlternativeServices with param = ", param
+		sBouquetRef = param["sBouquetRef"]
+		if sBouquetRef is None:
+			return (False, "No bouquet given!")
+		sRef = None
+		if "sRef" in param:
+			if param["sRef"] is not None:
+				sRef =param["sRef"]
+		if sRef is None:
+			return (False, "No service given!")
+		cur_ref = eServiceReference(sRef) 
+		# check if  service is an alternative
+		if cur_ref.flags & eServiceReference.isGroup:
+			cur_service = ServiceReference(cur_ref)
+			list = cur_service.list()
+			first_in_alternative = list and list.getNext()
+			if first_in_alternative:
+				mutableBouquetList = self.getMutableList(eServiceReference(sBouquetRef))
+				if mutableBouquetList is not None:
+					if mutableBouquetList.addService(first_in_alternative, cur_service.ref):
+						print "couldn't add first alternative service to current root"
+				else:
+					print "couldn't edit current root"
+			else:
+				print "remove empty alternative list"
+		else:
+			return (False, "Service is not an alternative.")
+		new_param = {}
+		new_param["sBouquetRef"] = sRef
+		new_param["mode"] = None # of no interest when passing BouquetRefRoot
+		new_param["BouquetRefRoot"] = sBouquetRef
+		returnValue = self.removeBouquet(new_param)
+		if returnValue[0]:
+			self.setRoot(sBouquetRef)
+			return (True,"All alternative services deleted.")
+		else:
+			return returnValue
+			
+	def toggleLock(self, param):
+		if not config.ParentalControl.configured.value:
+			return (False, "Parent Control is not activated.")
+		sRef = None
+		if "sRef" in param:
+			if param["sRef"] is not None:
+				sRef =param["sRef"]
+		if sRef is None:
+			return (False, "No service given!")
+		if config.ParentalControl.setuppinactive.value:
+			password = None
+			if "password" in param:
+				if param["password"] is not None:
+					password =param["password"]
+			if password is None:
+				return (False, "No Parent Control Setup Pin given!")
+			else:
+				if password.isdigit():
+					if int(password) != config.ParentalControl.setuppin.value:
+						return (False, "Parent Control Setup Pin is wrong!")
+				else:
+					return (False, "Parent Control Setup Pin is wrong!")
+		cur_ref = eServiceReference(sRef)
+		protection = parentalControl.getProtectionType(cur_ref.toCompareString())
+		if protection[0]:
+			parentalControl.unProtectService(cur_ref.toCompareString())
+		else:
+			parentalControl.protectService(cur_ref.toCompareString())
+		protection = parentalControl.getProtectionType(cur_ref.toCompareString())
+		if cur_ref.flags & eServiceReference.mustDescent:
+			serviceType = "Bouquet"
+		else:
+			serviceType = "Service"
+		protectionText = "%s %s is unlocked." % (serviceType, self.getName(cur_ref))
+		if protection[0]:
+			if protection[1] == IMG_BLACKSERVICE:
+				protectionText = "Service %s is locked." % self.getName(cur_ref)
+			elif protection[1] == IMG_BLACKBOUQUET:
+				#(locked -B-)
+				protectionText = "Bouquet %s is locked." % self.getName(cur_ref)
+			elif protection[1] == "":
+				# (locked)
+				protectionText = "%s %s is locked." % (serviceType, self.getName(cur_ref))
+		else:
+			if protection[1] == IMG_WHITESERVICE:
+				#(unlocked -S-)
+				protectionText = "Service %s is unlocked."  % self.getName(cur_ref)
+			elif protection[1] == IMG_WHITEBOUQUET:
+				#(unlocked -B-)
+				protectionText = "Bouquet %s is unlocked."  % self.getName(cur_ref)
+		return (True, protectionText)
+
+	def backupFiles(self, param):
+		filename = param
+		if not filename:
+			filename = self.BACKUP_FILENAME
+		invalidCharacters= re_compile(r'[^A-Za-z0-9_. ]+|^\.|\.$|^ | $|^$')
+		tarFilename= "%s.tar" % invalidCharacters.sub('_', filename)
+		backupFilename = path.join(self.BACKUP_PATH, tarFilename)
+		if path.exists(backupFilename):
+			remove(backupFilename)
+		checkfile = path.join(self.BACKUP_PATH,'.webouquetedit')
+		f = open(checkfile, 'w')
+		if f:
+			files = []
+			f.write('created with WebBouquetEditor')
+			f.close()
+			files.append(checkfile)
+			files.append("/etc/enigma2/bouquets.tv")
+			files.append("/etc/enigma2/bouquets.radio")
+			files.append("/etc/enigma2/userbouquet.favourites.tv")
+			files.append("/etc/enigma2/userbouquet.favourites.radio")
+			files.append("/etc/enigma2/lamedb")
+			files.append("/etc/enigma2/satellites.xml")
+			if config.ParentalControl.configured.value:
+				if config.ParentalControl.type.value == LIST_BLACKLIST:
+					files.append("/etc/enigma2/blacklist")
+				else:
+					files.append("/etc/enigma2/whitelist")
+			files += self.getPhysicalFilenamesFromServicereference(eServiceReference('1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'))
+			files += self.getPhysicalFilenamesFromServicereference(eServiceReference('1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet'))
+			tarFiles = ""
+			for arg in files:
+				if not path.exists(arg):
+					return (False, "Error while preparing backup file, %s does not exists." % arg)
+				tarFiles += "%s " % arg
+			lines = popen("tar cvf %s %s" % (backupFilename,tarFiles)).readlines()
+			remove(checkfile)
+			return (True, tarFilename)
+		else:
+			return (False, "Error while preparing backup file.")
+		
+	def getPhysicalFilenamesFromServicereference(self, ref):
+		files = []
+		serviceHandler = eServiceCenter.getInstance()
+		services = serviceHandler.list(ref)
+		servicelist = services and services.getContent("S", True)
+		for service in servicelist:
+			sref = service
+			pos = sref.find('FROM BOUQUET "')
+			filename = None
+			if pos != -1:
+				sref = sref[pos+14:]
+				pos = sref.find('"')
+				if pos != -1:
+					filename = '/etc/enigma2/' + sref[:pos] # FIXMEEE !!! HARDCODED /etc/enigma2
+					files.append(filename)
+					files += self.getPhysicalFilenamesFromServicereference(eServiceReference(service))
+		return files
+		
+	def restoreFiles(self, param):
+		tarFilename = param
+		backupFilename = tarFilename #path.join(self.BACKUP_PATH, tarFilename)
+		if path.exists(backupFilename):
+			check_tar = False
+			lines = popen('tar -tf %s' % backupFilename).readlines()
+			for line in lines:
+				pos = line.find('tmp/.webouquetedit')
+				if pos != -1:
+					check_tar = True
+					break
+			if check_tar:
+				eDVBDB.getInstance().removeServices()
+				files = []	
+				files += self.getPhysicalFilenamesFromServicereference(eServiceReference('1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'))
+				files += self.getPhysicalFilenamesFromServicereference(eServiceReference('1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet'))
+				for bouquetfiles in files:
+					if path.exists(bouquetfiles):
+						remove(bouquetfiles)
+				lines = popen('tar xvf %s -C / --exclude tmp/.webouquetedit' % backupFilename).readlines()
+				nimmanager.readTransponders()
+				eDVBDB.getInstance().reloadServicelist()
+				eDVBDB.getInstance().reloadBouquets()
+				infoBarInstance = InfoBar.instance
+				if infoBarInstance is not None:
+					servicelist = infoBarInstance.servicelist
+					root = servicelist.getRoot()
+					currentref = servicelist.getCurrentSelection()
+					servicelist.setRoot(root)
+					servicelist.setCurrentSelection(currentref)
+				remove(backupFilename)
+				return (True, "Bouquet-settings were restored successfully")
+			else:
+				return (False, "Error, %s was not created with WebBouquetEditor..." % backupFilename)
+		else:
+			return (False, "Error, %s does not exists, restore is not possible..." % backupFilename)
+
+	def getMutableBouquetList(self, mode):
+		if mode == MODE_TV:
+			self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet'
+		else:
+			self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet'
+		return self.getMutableList(eServiceReference(self.bouquet_rootstr))
+
+	def getMutableList(self, ref):
+		serviceHandler = eServiceCenter.getInstance()
+		return serviceHandler.list(ref).startEdit()
+
+	def setRoot(self, bouquet_rootstr):
+		infoBarInstance = InfoBar.instance
+		if infoBarInstance is not None:
+			servicelist = infoBarInstance.servicelist
+			root = servicelist.getRoot()
+			if bouquet_rootstr ==  root.toString():
+				currentref = servicelist.getCurrentSelection()
+				servicelist.setRoot(root)
+				servicelist.setCurrentSelection(currentref)
+
+	def buildBouquetID(self, str, prefix, mode):
+		tmp = str.lower()
+		name = ''
+		for c in tmp:
+			if (c >= 'a' and c <= 'z') or (c >= '0' and c <= '9'):
+				name += c
+			else:
+				name += '_'
+		# check if file is unique
+		suffix = ""
+		if mode == MODE_TV:
+			suffix = ".tv"
+		else:
+			suffix = ".radio"
+		filename = '/etc/enigma2/' + prefix + name + suffix
+		if path.exists(filename):
+			i = 1
+			while True:
+				filename = "/etc/enigma2/%s%s_%d%s" %( prefix , name , i, suffix)
+				if path.exists(filename):
+					i += 1
+				else:
+					name = "%s_%d" % (name,i)
+					break
+		return name
+
+	def getName(self,ref):
+		serviceHandler = eServiceCenter.getInstance()
+		info = serviceHandler.info(ref)
+		if info:
+			name = info.getName(ref)
+		else:
+			name = ""
+		return name
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/ProtectionSettings.py
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/ProtectionSettings.py	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/ProtectionSettings.py	(revision 9324)
@@ -0,0 +1,29 @@
+from Components.Sources.Source import Source
+from enigma import eServiceCenter, eServiceReference
+from Components.ParentalControl import LIST_BLACKLIST
+from Components.config import config
+
+class ProtectionSettings(Source):
+	def __init__(self):
+		Source.__init__(self)
+
+	def getProtectionSettings(self):
+		configured = config.ParentalControl.configured.value
+		if configured:
+			if config.ParentalControl.type.value == LIST_BLACKLIST:
+				type = "0"
+			else:
+				type = "1"
+			setuppin = config.ParentalControl.setuppin.value
+			setuppinactive = config.ParentalControl.setuppinactive.value
+		else:
+			type = ""
+			setuppin = ""
+			setuppinactive = ""
+		return [(configured,type,setuppinactive, setuppin)]
+
+	def handleCommand(self, cmd):
+		self.getProtectionSettings()
+
+	list = property(getProtectionSettings)
+	lut = {"Configured": 0, "Type": 1, "SetupPinActive": 2, "SetupPin": 3}			
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/SatellitesList.py
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/SatellitesList.py	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/SatellitesList.py	(revision 9324)
@@ -0,0 +1,88 @@
+from Components.Sources.Source import Source
+from Screens.ChannelSelection import service_types_tv, service_types_radio, FLAG_SERVICE_NEW_FOUND,MODE_TV, MODE_RADIO
+from enigma import eServiceReference, eServiceCenter
+from Tools.HardwareInfo import HardwareInfo
+service_types_tv_hd = '1:7:1:0:0:0:0:0:0:0:(type == 17) || (type == 25) || (type == 134) || (type == 195)'
+
+
+class SatellitesList(Source):
+	FETCH = 0
+
+	def __init__(self, func=FETCH):
+		Source.__init__(self)
+		self.func = func
+		self.xml = ""
+		self.mode = MODE_TV
+
+	def handleCommand(self, param):
+		self.mode = int(param)
+
+	def do_func(self):
+		if self.func == self.FETCH:
+			func = self.buildList
+		else:
+			func = self.buildList
+		return func(self.mode)
+
+	def buildList(self, mode):
+		print "[WebComponents.SatellitesList] buildList with param = %d" % mode
+		if mode == MODE_TV:
+			s_type = service_types_tv
+		else:
+			s_type = service_types_radio
+		refstr = '%s FROM SATELLITES ORDER BY satellitePosition'%(s_type)
+		ref = eServiceReference(refstr)
+		serviceHandler = eServiceCenter.getInstance()
+		counter = i = 0
+		if HardwareInfo().get_device_name() != "dm7025" and mode == MODE_TV:
+			counter = 1
+		while i <= counter:
+			if i:
+				refstr ='%s FROM SATELLITES ORDER BY satellitePosition'%(service_types_tv_hd)
+				ref = eServiceReference(refstr)
+			servicelist = serviceHandler.list(ref)
+			if not servicelist is None:
+				while True:
+					service = servicelist.getNext()
+					if not service.valid(): #check if end of list
+						break
+					unsigned_orbpos = service.getUnsignedData(4) >> 16
+					orbpos = service.getData(4) >> 16
+					if orbpos < 0:
+						orbpos += 3600
+					if service.getPath().find("FROM PROVIDER") != -1:
+						continue
+					elif service.getPath().find("flags == %d" %(FLAG_SERVICE_NEW_FOUND)) != -1:
+						service_type = _("New")
+					else:
+						service_type = _("Services")
+					try:
+						# why we need this cast?
+						service_name = str(nimmanager.getSatDescription(orbpos))
+					except:
+						if unsigned_orbpos == 0xFFFF: #Cable
+							service_name = _("Cable")
+						elif unsigned_orbpos == 0xEEEE: #Terrestrial
+							service_name = _("Terrestrial")
+						else:
+							if orbpos > 1800: # west
+								orbpos = 3600 - orbpos
+								h = _("W")
+							else:
+								h = _("E")
+							service_name = ("%d.%d %s") % (orbpos / 10, orbpos % 10, h)
+					if i:
+						service_type = "HD %s" % service_type
+					service.setName("%s - %s" % (service_name, service_type))
+					self.xml += "\t\t<e2service>\n"
+					self.xml += "\t\t<e2servicereference>%s</e2servicereference>\n\t\t<e2servicename>%s</e2servicename>\n" % (self.filterXML(service.toString()), self.filterXML(service.getName()))
+					self.xml += "\t\t</e2service>\n"
+			i += 1
+		return self.xml
+
+	def filterXML(self, item):
+		item = item.replace("&", "&amp;").replace("<", "&lt;").replace('"', '&quot;').replace(">", "&gt;").replace('\xc2\x86', '').replace('\xc2\x87', '')
+		return item
+
+	text = property(do_func)
+
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/ServiceList.py
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/ServiceList.py	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebComponents/Sources/ServiceList.py	(revision 9324)
@@ -0,0 +1,77 @@
+from Components.Sources.Source import Source
+from enigma import eServiceCenter, eServiceReference
+from Components.ParentalControl import parentalControl, IMG_WHITESERVICE, IMG_WHITEBOUQUET, IMG_BLACKSERVICE, IMG_BLACKBOUQUET
+from Components.config import config
+
+class ServiceList(Source):
+	def __init__(self, root, command_func = None, validate_commands = True):
+		Source.__init__(self)
+		self.root = root
+		self.command_func = command_func
+		self.validate_commands = validate_commands
+
+	def getServicesAsList(self, format = "RN"):
+		services = self.getServiceList()
+		mylist = services and services.getContent(format, True)
+		list = []
+		for item in mylist:
+			if item[0].flags & eServiceReference.isGroup:
+				isGroup = "1"
+			else:
+				isGroup = "0"
+			if item[0].flags & eServiceReference.isMarker:
+				isMarker = "1"
+			else:
+				isMarker = "0"
+			isProtected = "0"
+			if config.ParentalControl.configured.value:
+				protection = parentalControl.getProtectionType(item[0].toCompareString())
+				if protection[0]:
+					if protection[1] == IMG_BLACKSERVICE:
+						#(locked -S-)
+						isProtected = "1"
+					elif protection[1] == IMG_BLACKBOUQUET:
+						#(locked -B-)
+						isProtected = "2"
+					elif protection[1] == "":
+						# (locked)
+						isProtected = "3"
+				else:
+					if protection[1] == IMG_WHITESERVICE:
+						#(unlocked -S-)
+						isProtected = "4"
+					elif protection[1] == IMG_WHITEBOUQUET:
+						#(unlocked -B-)
+						isProtected = "5"
+					
+			list.append((item[0].toString(),item[1],isGroup,isMarker,isProtected))
+		return list
+
+	def getServiceList(self):
+		serviceHandler = eServiceCenter.getInstance()
+		return serviceHandler.list(self.root)
+		
+	def getRoot(self):
+		return self.__root
+
+	def setRoot(self, root):
+		assert isinstance(root, eServiceReference)
+		self.__root = root
+		self.changed()
+		
+	root = property(getRoot, setRoot)
+
+	def validateReference(self, ref):
+		return ref in self.getServicesAsList("S")
+
+	def handleCommand(self, cmd):
+		print "ServiceList handle command"
+		if self.validate_commands and not self.validateReference(cmd):
+			print "Service reference did not validate!"
+			return
+		ref = eServiceReference(cmd)
+		if self.command_func:
+			self.command_func(ref)
+
+	list = property(getServicesAsList)
+	lut = {"Reference": 0, "Name": 1, "isGroup": 2, "isMarker": 3, "isProtected": 4}			
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebScreens/AdditionalWebScreens.py
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebScreens/AdditionalWebScreens.py	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebScreens/AdditionalWebScreens.py	(revision 9324)
@@ -0,0 +1,25 @@
+from Plugins.Extensions.WebInterface.WebScreens import WebScreen
+
+class AdditionalWebScreen(WebScreen):
+	def __init__(self, session, request):
+		WebScreen.__init__(self, session, request)
+		from Plugins.Extensions.WebBouquetEditor.WebComponents.Sources.SatellitesList import SatellitesList
+		self["SatellitesList"] = SatellitesList(func=SatellitesList.FETCH)
+		
+		from Plugins.Extensions.WebBouquetEditor.WebComponents.Sources.ServiceList import ServiceList
+		
+		
+		from Screens.ChannelSelection import service_types_tv
+		from enigma import eServiceReference
+	
+		fav = eServiceReference(service_types_tv + ' FROM BOUQUET "bouquets.tv" ORDER BY bouquet')
+		self["ServiceList"] = ServiceList(fav, command_func=self.getServiceList, validate_commands=False)
+		
+		
+		from Plugins.Extensions.WebBouquetEditor.WebComponents.Sources.ProtectionSettings import ProtectionSettings
+		self["ProtectionSettings"] = ProtectionSettings()
+		
+	def getServiceList(self, sRef):
+		self["ServiceList"].root = sRef	
+
+		
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebScreens/BouquetEditorWebScreens.py
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebScreens/BouquetEditorWebScreens.py	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/WebScreens/BouquetEditorWebScreens.py	(revision 9324)
@@ -0,0 +1,21 @@
+from Plugins.Extensions.WebInterface.WebScreens import WebScreen
+
+class BouquetEditorWebScreen(WebScreen):
+	def __init__(self, session, request):
+		WebScreen.__init__(self, session, request)
+		from Plugins.Extensions.WebBouquetEditor.WebComponents.Sources.BouquetEditor import BouquetEditor
+		self["AddBouquet"] = BouquetEditor(session, func=BouquetEditor.ADD_BOUQUET)
+		self["RemoveBouquet"] = BouquetEditor(session, func=BouquetEditor.REMOVE_BOUQUET)
+		self["MoveBouquet"] = BouquetEditor(session, func=BouquetEditor.MOVE_BOUQUET)
+		self["MoveService"] = BouquetEditor(session, func=BouquetEditor.MOVE_SERVICE)
+		self["RemoveService"] = BouquetEditor(session, func=BouquetEditor.REMOVE_SERVICE)
+		self["AddServiceToBouquet"] = BouquetEditor(session, func=BouquetEditor.ADD_SERVICE_TO_BOUQUET)
+		self["AddProviderToBouquetlist"] = BouquetEditor(session, func=BouquetEditor.ADD_PROVIDER_TO_BOUQUETLIST)
+		self["AddServiceToAlternative"] = BouquetEditor(session, func=BouquetEditor.ADD_SERVICE_TO_ALTERNATIVE)
+		self["RemoveAlternativeServices"] = BouquetEditor(session, func=BouquetEditor.REMOVE_ALTERNATIVE_SERVICES)
+		self["ToggleLock"] = BouquetEditor(session, func=BouquetEditor.TOGGLE_LOCK)
+		self["Backup"] = BouquetEditor(session, func=BouquetEditor.BACKUP)
+		self["Restore"] = BouquetEditor(session, func=BouquetEditor.RESTORE)
+		self["RenameService"] = BouquetEditor(session, func=BouquetEditor.RENAME_SERVICE)
+		self["AddMarkerToBouquet"] = BouquetEditor(session, func=BouquetEditor.ADD_MARKER_TO_BOUQUET)
+		
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/plugin.py
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/plugin.py	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/plugin.py	(revision 9324)
@@ -0,0 +1,24 @@
+# Plugin
+from Components.PluginComponent import plugins
+from Plugins.Plugin import PluginDescriptor
+# Webinterface
+from Plugins.Extensions.WebInterface.WebChilds.Toplevel import addExternalChild
+from Plugins.Extensions.WebInterface.WebChilds.Screenpage import ScreenPage
+# Twisted
+from twisted.web import static
+from twisted.python import util
+#
+from WebChilds.WebUploadResource import WebUploadResource
+
+def autostart(reason, **kwargs):
+	if "session" in kwargs:
+		session = kwargs["session"]
+		root = static.File("/usr/lib/enigma2/python/Plugins/Extensions/WebBouquetEditor/web-data")
+		root.putChild("web", ScreenPage(session, util.sibpath(__file__, "web"), True) )
+		root.putChild('tmp', static.File('/tmp'))
+		root.putChild("uploadfile",WebUploadResource(session))
+		addExternalChild( ("bouqueteditor", root) )
+
+def Plugins(**kwargs):
+	list = [PluginDescriptor(name="WebBouquetEditor", description=_("WebBouquetEditor"), where = PluginDescriptor.WHERE_SESSIONSTART, fnc = autostart)]  
+	return list
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/alternativelist.htm
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/alternativelist.htm	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/alternativelist.htm	(revision 9324)
@@ -0,0 +1,18 @@
+<table class="selectTab"> 
+	<tr>
+		<td>
+			<select id="alternativelist" size="6" class="select">
+			{for service in services}
+			  <option value="${service.servicereference}">${service.prefix}${service.servicename}${service.suffix}</option>
+			{/for}		
+			</select>
+		</td>
+	</tr>
+	<tr>
+		<td>
+			<button style="width: 23%" type="button" onclick="removeAlternative('alternativelist');">
+				Remove
+			</button>
+		</td>
+	</tr>
+</table>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/bouqueteditor.js
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/bouqueteditor.js	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/bouqueteditor.js	(revision 9324)
@@ -0,0 +1,1142 @@
+var MODE = { tv : 0, radio : 1}
+var NAV_SERVICE = { provider : 0, sat : 1, all : 2 };
+var currentMode = null;
+var currentNav = null;
+var protectionPasswordValid = false;
+var protectionType = null;
+var protectionConfigured = false;
+var chachedPin = null;
+
+//// index marker
+var currentServicelistIndex = null;
+var currentBouquetlistIndex = null;
+var currentProviderServiceList = null;
+var currentProviderServiceListFiltered = null;
+
+var currentBouquetRef = null;
+	
+
+function getSelectedAttr(selectId) {
+
+	var selectList = $(selectId);
+	var selectOptions = selectList.getElementsByTagName('option');
+	var idx = selectList.selectedIndex; 
+	return { selectOptions: selectOptions, idx: idx};
+
+}
+
+function moveOptions(selectId, pos) {
+	var ref = "";
+	var index = -1;
+	var selectList = $(selectId);
+	var selectOptions = selectList.getElementsByTagName('option');
+	var idx = selectList.selectedIndex; 
+	if (idx >= 0){
+		var opt = selectOptions[idx];
+		selectList.removeChild(opt);
+		if(pos < selectOptions.length){
+			selectList.insertBefore(opt, selectOptions[pos]);
+			ref = unescape(opt.value);
+			index = pos;
+		} else {
+			selectList.appendChild(opt);
+			ref = unescape(opt.value);
+			index = selectOptions.length - 1;
+		}
+	}
+	return { ref: ref , index: index};
+}
+
+function setProviderName(provider){
+	if( currentNav != NAV_SERVICE.all){
+		$("providerServiceHeader").update("All Services of '" + provider + "'");
+	} else {
+		$("providerServiceHeader").update("All Services");
+	}
+}
+
+function setBouquetName(bouquet){
+	$("bouquetServiceHeader").update("Services of Bouquet '" + bouquet + "'");
+}
+
+function setNavBackground(element, selected){
+	if(selected)
+		element.setStyle({background :  "#AAA"});
+	else
+		element.setStyle({background :  "#485052"});
+}
+
+function setMode(mode){
+	currentMode = mode;
+	switch(mode){
+	
+	case MODE.tv:
+		setNavBackground($("navTv"), true);
+		setNavBackground($("navRadio"), false);
+		break;
+		
+	case MODE.radio:
+		setNavBackground($("navTv"), false);
+		setNavBackground($("navRadio"), true);
+		break;
+	}
+	if (protectionPasswordValid) {
+		setServiceNav(0);
+		getBouquets();
+	}
+	else
+		getProtectionData();
+}
+
+function setServiceNav(type){
+
+	if (protectionPasswordValid) {
+		currentNav = type;
+		setServiceNavButtons(type);
+		if(type == NAV_SERVICE.all){
+			$("contentSelectionList").hide();
+			setProviderName("");
+		} else {
+			$("contentSelectionList").show();
+		}
+		 
+		getProviderList(type);
+	}
+	else
+		getProtectionData();
+}
+
+function setServiceNavButtons(type){
+	switch(type){
+		case NAV_SERVICE.provider:
+			setNavBackground($("navProv"), true);
+			setNavBackground($("navSat"), false);
+			setNavBackground($("navAll"), false);
+			
+		break;
+		case NAV_SERVICE.sat:
+			setNavBackground($("navProv"), false);
+			setNavBackground($("navSat"), true);
+			setNavBackground($("navAll"), false);
+			
+		break;
+		case NAV_SERVICE.all:
+			setNavBackground($("navProv"), false);
+			setNavBackground($("navSat"), false);
+			setNavBackground($("navAll"), true);
+			
+		break;
+	}
+}
+
+function onServiceSearchFocus(event){
+	if(event.element().value == "Service to search for..."){
+		event.element().value = '';
+	}
+	event.element().setStyle({color : "#000"});
+	serviceSearch(event);
+}
+
+function onServiceSearchBlur(event){
+	if(event.element().value.trim() == ""){
+		event.element().setStyle({color : "#AAA"});
+		event.element().value = "Service to search for...";
+	}
+}
+
+function serviceSearch(event){
+	var needle = event.element().value.toLowerCase();
+		
+	//Nur Gecko-basierte Browser können <option> elemente ausblenden
+	if(Prototype.Browser.Gecko){
+		var serviceElements = $$('.providerservice');
+		
+		for(var i = 0; i < serviceElements.length; i++){
+			var option = serviceElements[i];
+			var serviceName = option.readAttribute('data-servicename').toLowerCase();
+			
+			if(serviceName.indexOf(needle) == -1 && serviceName != ""){
+				option.hide();
+			} else {		
+				option.show();
+			}
+		}
+	//für alle anderen Anderen Browser muss die Liste komplett neu aufgebaut werden
+	} else {
+		currentProviderServiceListFiltered = []
+		$A(currentProviderServiceList).each(function(service){
+			var serviceName = service.servicename.toLowerCase()
+			if(serviceName.indexOf(needle) != -1 || serviceName == ""){
+				currentProviderServiceListFiltered[currentProviderServiceListFiltered.length] = service;
+			}			
+		});
+		
+		fillProviderServiceList(currentProviderServiceListFiltered);
+	}
+}
+
+function fillProviderServiceList(servicelist){
+	var data = { services : servicelist };
+	processTplBouquetEditor('providerservicelist', data, 'contentSelectionSubList');
+}
+
+function getCurrentSelectedBouquetlistRef() {
+
+	var selectList = $('bouquetlist');
+	var idx = selectList.selectedIndex; 
+	var current = selectList.options[idx];
+	return unescape(current.value);
+	
+}
+
+function getAlternatives(ref){	
+	doRequest('/bouqueteditor/web/getservices?sRef=' + ref, incomingAlternatives, false);
+}
+
+function incomingAlternatives(request) {
+	if (request.readyState == 4) {
+		var servicelist = new BouquetEditorServiceList(getXML(request)).getArray();
+		var data = {
+			services : servicelist
+		};
+		processTplBouquetEditor('alternativelist', data, 'contentAlternatives');
+	}
+}
+
+function removeAlternative(selectObj) {
+	var selectServicelist = $('servicelist');
+	var idxServicelist = selectServicelist.selectedIndex;
+	var selectList = $(selectObj);
+	var selectServicelistOptions = selectList.getElementsByTagName('option');
+	if (selectServicelistOptions.length > 1) {
+		if (idxServicelist != -1) {
+			var current_alternative_service_ref = unescape(selectServicelist.options[idxServicelist].value);
+			var idx = selectList.selectedIndex; 
+			if ( idx != -1) {
+				var ref = unescape(selectList.options[idx].value); 
+					var check = confirm("Do you really want to delete the service\n" + selectList.options[idx].text + " from current alternative list?");
+				if (check == true)
+					doRequest('/bouqueteditor/web/removeservice?sBouquetRef='+ current_alternative_service_ref + '&sRef=' + ref, removeAlternativeServiceCallback, false);
+			}
+			else
+				alert("No service in alternative-list selected!");
+		}
+		else
+			alert("No service in servicelist selected!");
+	}
+	else
+		alert("There must be one service in the alternative-list at least!");
+}
+
+function removeAlternativeServiceCallback(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){
+			var selectList = $('alternativelist');
+			var idx = selectList.selectedIndex; 
+			selectList.removeChild(selectList.options[idx]);
+			var selectOptions = selectList.getElementsByTagName('option');
+			if ( selectOptions.length != 0) {
+				if ( idx > selectOptions.length-1)
+					idx = idx - 1;
+				selectOptions[idx].selected = true;
+			}
+		}
+	}
+}
+
+function servicelistChange(element){
+	var idx = element.selectedIndex; 
+	var current = element.options[idx];
+	var hasAlternatives = $(current).readAttribute("data-hasalt");
+	
+	if(hasAlternatives == "1"){
+
+		$("removeAlternativServicesButton").show();
+		$("alternativesHead").show();
+		$("alternatives").show();
+		
+		$("contentAlternatives").update('Loading Alternatives... <img src="/bouqueteditor/ajax-loader.gif" />');
+		
+		var ref =  unescape(encodeURIComponent(current.value));
+		getAlternatives(ref);
+		
+	} else {
+		$("alternativesHead").hide();
+		$("alternatives").hide();
+		$("removeAlternativServicesButton").hide();
+	}
+
+	var hasProtection = $(current).readAttribute("data-hasprotection");
+	var button = $("toggleserviceprotection");
+	if (protectionConfigured) {
+		if ( protectionType == "0") {
+			if (hasProtection == "0"){
+				button.update("Lock");
+				button.show();}
+			else if (hasProtection == "1"){
+				button.update("Unlock");
+				button.show();}
+			else
+				button.hide();
+		} else {
+			if (hasProtection == "3"){
+				button.update("Unlock");
+				button.show();}
+			else if (hasProtection == "4"){
+				button.update("Lock");
+				button.show();}
+			else if (hasProtection == "5")
+				button.hide();
+		}
+			
+		
+	} else {
+		button.hide();
+	}
+
+
+
+}
+
+function BouquetEditorService(xml, cssclass){	
+	this.servicereference = getNodeContent(xml, 'e2servicereference', '');
+	this.servicename = getNodeContent(xml, 'e2servicename');
+	this.serviceisgroup = getNodeContent(xml, 'e2serviceisgroup');
+	this.serviceismarker = getNodeContent(xml, 'e2serviceismarker');
+	this.serviceisprotected = getNodeContent(xml, 'e2serviceisprotected');
+	
+	this.getServiceReference = function(){
+		return encodeURIComponent(this.servicereference);
+	};
+	
+	this.getClearServiceReference = function(){
+		return this.servicereference;
+	};
+		
+	this.getServiceName = function(){
+		return this.servicename.replace('&quot;', '"');
+	};
+
+	this.getPrefix = function(){
+		if (this.serviceisgroup == "1") {
+			return "* ";}
+
+		else {
+			if (this.serviceismarker == "1") {
+				return "<------- ";}
+			else {
+				return "";}}
+	};
+
+	this.getSuffix = function(){
+		if (this.serviceisprotected != "0") {
+			var returnvalue = '';
+			switch(this.serviceisprotected){
+				case "1":
+					returnvalue = '(locked -S-)';
+				break;
+				case "2":
+					returnvalue = '(locked -B-)';
+				break;
+				case "3":
+					returnvalue = '(locked)';
+				break;
+				case "4":
+					returnvalue = '(unlocked -S-)';
+				break;
+				case "5":
+					returnvalue = '(unlocked -B-)';
+				break;
+			}
+			return returnvalue;}
+		else {
+			if (this.serviceismarker == "1") {
+				return " ------->";}
+			else {
+				return "";}}
+		
+	};
+
+	
+	this.setServiceReference = function(sref){
+		this.servicereference = sref;
+	};
+		
+	this.setServiceName = function(sname){
+		this.servicename = sname.replace('&quot;', '"');
+	};
+	
+	if( typeof( cssclass ) == undefined ){
+		cssclass = 'odd';
+	}
+	
+	this.json = { 	
+			'servicereference' : this.getServiceReference(),
+			'servicename' : this.getServiceName(),
+			'serviceisgroup' : this.serviceisgroup,
+			'prefix' : this.getPrefix(),
+			'suffix' : this.getSuffix(),
+			'serviceisprotected' : this.serviceisprotected
+
+	};
+	
+	this.toJSON = function(){
+		return this.json;
+	};
+}	
+
+function BouquetEditorServiceList(xml){
+	this.xmlitems = getNamedChildren(xml, "e2servicelist", "e2service");
+	this.servicelist = [];
+	this.getArray = function(){
+		if(this.servicelist.length === 0){
+			var cssclass = 'even';
+			
+			for (var i=0;i<this.xmlitems.length;i++){
+				cssclass = cssclass == 'even' ? 'odd' : 'even';
+				var service = new BouquetEditorService(this.xmlitems.item(i), cssclass).toJSON();
+				this.servicelist.push(service);
+			}
+		}
+		return this.servicelist;
+	};
+}
+
+function getProviderList(type) {
+
+	url = ''
+	switch (type){
+		case NAV_SERVICE.provider: 
+			if (currentMode == MODE.tv) 
+				url = '/bouqueteditor/web/getservices?sRef=' + providerTv;
+			else
+				url = '/bouqueteditor/web/getservices?sRef=' +  providerRadio;
+		break;
+		case NAV_SERVICE.sat:
+			url = '/bouqueteditor/web/satelliteslist?mode=' + currentMode;
+		break;
+		case NAV_SERVICE.all:
+			if (currentMode == MODE.tv) 
+				url = '/bouqueteditor/web/getservices?sRef=' + allTv;
+			else
+				url = '/bouqueteditor/web/getservices?sRef=' +  allRadio;
+		break;
+	}
+	if (type == NAV_SERVICE.all)
+		doRequest(url, incomingProviderServiceList, false);
+	else
+		doRequest(url, incomingProviderList, false);
+}
+
+
+function incomingProviderList(request) {
+	if (request.readyState == 4) {
+		var servicelist = new BouquetEditorServiceList(getXML(request)).getArray();
+		var data = {
+			services : servicelist
+		};
+		processTplBouquetEditor('providerlist', data, 'contentSelectionList', processTplIncommingProviderListCallback);
+	}
+}
+
+function processTplIncommingProviderListCallback() {
+
+	var selectList = $('providerlist');
+	var selectOptions = selectList.getElementsByTagName('option');
+	if ( selectOptions.length != 0)
+	{
+		if(currentNav != NAV_SERVICE.all){
+			selectOptions[0].selected = true;
+			providerlistChange(selectList);
+		}		
+	}
+}
+
+
+function providerlistChange(selectObj) {
+	
+	var idx = selectObj.selectedIndex; 
+	var current = selectObj.options[idx];
+	var ref =  unescape(encodeURIComponent(current.value));
+	setProviderName(current.innerHTML);
+	doRequest('/bouqueteditor/web/getservices?sRef=' + ref, incomingProviderServiceList, false);
+}
+
+function incomingProviderServiceList(request) {
+	if (request.readyState == 4) {
+		var servicelist = new BouquetEditorServiceList(getXML(request)).getArray();
+		currentProviderServiceList = servicelist;
+		var data = {
+			services : servicelist
+		};
+		processTplBouquetEditor('providerservicelist', data, 'contentSelectionSubList');
+	}
+}
+
+function addBouquet(){
+	sName=prompt("Name des Bouquets:");
+	if (sName.length){
+		var selectList = $('bouquetlist');
+		var selectOptions = selectList.getElementsByTagName('option');
+		currentBouquetlistIndex =  selectOptions.length ;
+		doRequest('/bouqueteditor/web/addbouquet?name='+sName+'&mode='+currentMode, bouquetListUpdated, false);
+	}
+}
+
+function bouquetListUpdated(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){			
+			getBouquetServiceList();
+		}
+	}
+}
+
+
+function getBouquets() {
+	currentBouquetlistIndex = null;
+	getBouquetServiceList();
+}
+
+
+function getBouquetServiceList() {
+
+	if (currentMode == MODE.tv) 
+		url = '/bouqueteditor/web/getservices?sRef=' + bouquetsTv;
+	else
+		url = '/bouqueteditor/web/getservices?sRef=' +  bouquetsRadio;
+	doRequest(url, incomingBouquetList, false);
+}
+
+function incomingBouquetList(request) {
+	if (request.readyState == 4) {
+
+		var bouquetlist = new BouquetEditorServiceList(getXML(request)).getArray();
+		var data = {
+			bouquets : bouquetlist
+		};
+		processTplBouquetEditor('bouquetlist', data, 'contentBouquetList', processTplBouquetListCallback);
+	}
+}
+
+function processTplBouquetEditor(tplName, data, domElement, callback){
+	var url = "/bouqueteditor/" +tplName+".htm";
+	doRequest(url, 
+			function(transport){
+		incomingProcessTpl(transport, data, domElement, callback);
+	}
+	);
+}
+
+
+function processTplBouquetListCallback() {
+	var selectList = $('bouquetlist');
+	var selectOptions = selectList.getElementsByTagName('option');
+	if ( selectOptions.length != 0){
+		if (currentBouquetlistIndex != null)
+			selectOptions[currentBouquetlistIndex].selected = true;
+		else
+			selectOptions[0].selected = true;
+		bouquetlistChange(selectList);
+	}
+}
+
+function showRequestResult(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+	}
+}
+
+
+function moveBouquet(value) {
+	if ( value.ref != "" && value.index != -1)
+		doRequest('/bouqueteditor/web/movebouquet?sBouquetRef='+ value.ref +'&mode='+ currentMode + '&position=' + value.index, showRequestResult, false);
+}
+
+
+
+function moveBouquetOptionsUp(selectId) {
+	var value = getSelectedAttr(selectId);
+	if ( value.idx > 0)
+		moveBouquet(moveOptions(selectId,value.idx-1));
+}
+
+function moveBouquetOptionsDown(selectId) {
+	var value = getSelectedAttr(selectId);
+	if ( (value.idx + 1) < (value.selectOptions.length))
+			moveBouquet(moveOptions(selectId,value.idx+1));
+}
+
+
+function removeBouquet(selectObj) {
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	var bouqueref = unescape(selectList.options[idx].value); 
+	var check = confirm("Do you really want to delete the bouquet\n" + selectList.options[idx].text + " ?");
+	if (check == true)
+		doRequest('/bouqueteditor/web/removebouquet?sBouquetRef='+ bouqueref +'&mode=' + currentMode, removeBouquetCallback, false);
+}
+
+function removeBouquetCallback(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){
+			var selectList = $('bouquetlist');
+			var idx = selectList.selectedIndex; 
+			selectList.removeChild(selectList.options[idx]);
+			var selectOptions = selectList.getElementsByTagName('option');
+			if ( selectOptions.length != 0) {
+				if ( idx > selectOptions.length-1)
+					idx = idx - 1;
+				selectOptions[idx].selected = true;
+				bouquetlistChange(selectList); // Update Servicelist
+			}
+		}
+	}
+}
+
+
+function bouquetlistChange(selectObj) {
+	var idx = selectObj.selectedIndex; 
+	var current = selectObj.options[idx];
+	var hasProtection = $(current).readAttribute("data-hasprotection");
+	var button = $("togglebouquetprotection")
+	if (protectionConfigured) {
+		if ( protectionType == "0") {
+			if (hasProtection == "0"){
+				button.update("Lock");
+				button.show();}
+			else if (hasProtection == "2"){
+				button.update("Unlock");
+				button.show();}
+			else
+				button.hide();
+		} else {
+			if (hasProtection == "3"){
+				button.update("Unlock");
+				button.show();}
+			else if (hasProtection == "5"){
+				button.update("Lock");
+				button.show();}
+		}
+	} else {
+		button.hide();
+	}
+	currentServicelistIndex = null;
+	var idx = selectObj.selectedIndex; 
+	var current = selectObj.options[idx];
+	var ref = unescape(current.value);
+	setBouquetName(current.innerHTML);
+	getServiceList(ref);
+}
+
+function getServiceList(ref) {
+	currentBouquetRef = ref;
+	doRequest('/bouqueteditor/web/getservices?sRef=' + ref, incomingServiceList);
+}
+
+function incomingServiceList(request) {
+	if (request.readyState == 4) {
+		var servicelist = new BouquetEditorServiceList(getXML(request)).getArray();
+		var data = {
+			services : servicelist
+		};
+		processTplBouquetEditor('servicelist', data, 'contentServicelist', processTplIncomingServiceListCallback);
+	}
+}
+
+function processTplIncomingServiceListCallback() {
+	var selectList = $('servicelist');
+	var selectOptions = selectList.getElementsByTagName('option');
+	if ( selectOptions.length != 0) {
+	
+		if (currentServicelistIndex != null)
+			selectOptions[currentServicelistIndex].selected = true;
+		else
+			selectOptions[0].selected = true;
+		servicelistChange(selectList);
+	}
+}
+
+function moveService(value) {
+	if ( value.ref != "" && value.index != -1) {
+		var bouqueref = currentBouquetRef;
+		doRequest('/bouqueteditor/web/moveservice?sBouquetRef='+ bouqueref + '&sRef=' + value.ref + '&mode=' + currentMode + '&position=' + value.index, showRequestResult, false);
+	}
+}
+
+function moveServiceOptionsUp(selectId) {
+	var value = getSelectedAttr(selectId);
+	if ( value.idx > 0)
+		moveService(moveOptions(selectId, value.idx-1));
+}
+
+function moveServiceOptionsDown(selectId) {
+	var value = getSelectedAttr(selectId);
+	if ( (value.idx + 1) < (value.selectOptions.length))
+			moveService(moveOptions(selectId,value.idx+1));
+}
+
+function moveServiceOptionsUp5(selectId) {
+	var value = getSelectedAttr(selectId);
+	if ( value.idx > 0){
+		var pos = -5;
+		if (value.idx + pos < 0)
+			pos = 0;
+		else
+			pos = value.idx + pos;
+		moveService(moveOptions(selectId, pos));
+	}
+}
+
+function moveServiceOptionsDown5(selectId) {
+	var value = getSelectedAttr(selectId);
+	if ( value.idx != value.selectOptions.length-1){
+		var pos = 5;
+		if (value.idx + pos > value.selectOptions.length-1)
+			pos = value.selectOptions.length -1;
+		else
+			pos = value.idx + pos;
+		moveService(moveOptions(selectId,pos));
+	}
+}
+
+function moveServiceOptionsTop(selectId) {
+	var value = getSelectedAttr(selectId);
+	if ( value.idx > 0)
+		moveService(moveOptions(selectId,0));
+}
+
+function moveServiceOptionsBottom(selectId) {
+	var value = getSelectedAttr(selectId);
+	if ( value.idx >= 0 && value.idx != (value.selectOptions.length-1))
+		moveService(moveOptions(selectId,value.selectOptions.length-1));
+}
+
+
+
+function removeAlternativServices(selectObj) {
+	var bouqueref = currentBouquetRef;
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	if ( idx != -1) {
+		var ref = unescape(selectList.options[idx].value); 
+		var check = confirm("Do you really want to delete all allternatives services in service\n" + selectList.options[idx].text + " ?");
+		if (check == true){
+			currentServicelistIndex = idx;
+			var url = '/bouqueteditor/web/removealternativeservices?sBouquetRef=' + bouqueref + "&sRef=" + ref;
+			doRequest(url, serviceListUpdated, false);
+		}
+	}
+	else
+		alert("No service selected!");
+}
+
+
+function removeService(selectObj) {
+	var bouqueref = currentBouquetRef;
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	if ( idx != -1) {
+		var ref = unescape(selectList.options[idx].value); 
+		var check = confirm("Do you really want to delete the service\n" + selectList.options[idx].text + " from current selected Bouquet?");
+		if (check == true)
+			doRequest('/bouqueteditor/web/removeservice?sBouquetRef='+ bouqueref + '&sRef=' + ref +'&mode=' + currentMode, removeServiceCallback, false);
+	}
+	else
+		alert("No service selected!");
+}
+
+function removeServiceCallback(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){
+			var selectList = $('servicelist');
+			var idx = selectList.selectedIndex; 
+			selectList.removeChild(selectList.options[idx]);
+			var selectOptions = selectList.getElementsByTagName('option');
+			if ( selectOptions.length != 0) {
+				if ( idx > selectOptions.length-1)
+					idx = idx - 1;
+				selectOptions[idx].selected = true;
+			}
+			servicelistChange(selectList);
+		}
+	}
+}
+
+
+function addAlternativeService(selectObj) {
+	var bouqueref = currentBouquetRef;
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	if ( idx != -1){
+		var ref = unescape(selectList.options[idx].value); // that service ref will be added to the current selected service from servicelist as alternative
+		var selectServicelist = $('servicelist');
+		var idxServicelist = selectServicelist.selectedIndex;
+		if (idxServicelist != -1) {
+			currentServicelistIndex = idxServicelist;
+			var current_ref = unescape(selectServicelist.options[idxServicelist].value); // get current  selected ref --> this service will be the alternative
+			var url = "/bouqueteditor/web/addservicetoalternative?sBouquetRef=" + bouqueref + "&sCurrentRef=" + current_ref + "&sRef=" + ref + "&mode=" + currentMode;
+			doRequest(url, addAlternativeServiceCallback, false);
+		}
+		else
+			alert ("No service in servicelist selected!");
+	}
+	else
+		alert ("No service selected!");
+
+}
+
+function addAlternativeServiceCallback(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		// always reload after adding a alertative, because it could have been created, but the result can be False however
+		var ref = getCurrentSelectedBouquetlistRef();
+		getServiceList(ref);
+		
+	}
+}
+
+
+function addServiceToBouquet(selectObj) {
+	var bouqueref = currentBouquetRef;
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+		if ( idx != -1){
+		var ref = unescape(selectList.options[idx].value);
+		var selectServicelist = $('servicelist');
+		var selectServicelistOptions = selectServicelist.getElementsByTagName('option');
+		if (selectServicelistOptions.length > 0) {
+			var idxServicelist = selectServicelist.selectedIndex;
+			currentServicelistIndex = idxServicelist + 1;
+			if ( idxServicelist != -1 && idxServicelist != selectServicelistOptions.length){
+				if ( idxServicelist + 1 < selectServicelistOptions.length){
+					var refServicelist = unescape(selectServicelist.options[idxServicelist+1].value);
+				}
+			}
+		}
+		else
+			currentServicelistIndex = null;
+		doRequest('/bouqueteditor/web/addservicetobouquet?sBouquetRef='+ bouqueref + '&sRef=' + ref +'&sRefBefore=' + refServicelist, serviceListUpdated, false);
+	}
+	else
+		alert ("No service selected!");
+
+}
+
+
+function serviceListUpdated(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){
+			var ref = getCurrentSelectedBouquetlistRef();
+			getServiceList(ref);
+		}
+	}
+}
+
+
+
+function addProviderToBouquet(selectObj) {
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	if ( idx != -1){
+		var ref =  unescape(encodeURIComponent(selectList.options[idx].value));
+		doRequest('/bouqueteditor/web/addprovidertobouquetlist?sProviderRef='+ref+'&mode=' + currentMode, addProviderToBouquetCallback, false);
+	}
+	else
+		alert("No provider selected!");
+
+}
+
+function addProviderToBouquetCallback(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){
+			var selectList = $('bouquetlist');
+			var selectOptions = selectList.getElementsByTagName('option');
+			currentBouquetlistIndex =  selectOptions.length ;
+			getBouquetServiceList();
+		}
+	}
+}
+
+function ProtectionXMLResult(xml){		
+	try{
+		this.xmlitems = xml.getElementsByTagName("e2serviceprotection").item(0);
+	} catch (e) {
+		notify("Error parsing e2serviceprotection: " + e, false);
+	}
+	this.configured = getNodeContent(this.xmlitems, 'e2serviceprotectionconfigured', 'False');
+	this.setupepin = getNodeContent(this.xmlitems, 'e2serviceprotectionsetuppin', '');
+	this.type = getNodeContent(this.xmlitems, 'e2serviceprotectiontype', '');
+	this.servicepinactive = getNodeContent(this.xmlitems, 'e2serviceprotectionsetuppinactive', 'False');
+
+	this.getConfigured = function(){
+		if(this.configured == 'True'){
+			return true;
+		}else{
+			return false;
+		}
+	};
+	
+	this.getSetupPin = function(){
+			return this.setupepin;
+	};
+	
+	this.getProtectionType = function(){
+			return this.type;
+	};
+	
+	this.getSetupPinActive = function(){
+		if(this.servicepinactive == 'True'){
+			return true;
+		}else{
+			return false;
+		}
+	};
+	
+}
+
+function incommingProtectionData(request) {
+	if (request.readyState == 4) {
+		var result = new ProtectionXMLResult(getXML(request));
+		if(result.getConfigured()){
+			protectionConfigured = true;
+			protectionType = result.getProtectionType();
+			
+			if (result.getSetupPinActive()){
+				chachedPin=prompt('Please enter your setup pin:', '');
+				if (result.getSetupPin() == chachedPin) {
+					protectionPasswordValid = true;
+				}
+				else
+					alert("Password is wrong!");
+			}
+			else
+				protectionPasswordValid = true;
+		}
+		else
+			protectionPasswordValid = true;
+			
+		if (protectionPasswordValid) {
+			setServiceNav(0);
+			getBouquets();
+		}
+	}
+}
+
+function getProtectionData() {
+	url = '/bouqueteditor/web/getprotectionsettings';
+	doRequest(url, incommingProtectionData, false);
+}
+
+
+function toggleBouquetProtection(selectObj) {
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	var bouqueref = unescape(selectList.options[idx].value);
+	currentBouquetlistIndex =  idx;
+	doRequest('/bouqueteditor/web/togglelock?sRef='+ bouqueref +'&password=' + chachedPin, toggleBouquetProtectionCallback, false);
+}
+
+function toggleBouquetProtectionCallback(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){
+			getBouquetServiceList()
+		}
+	}
+}
+
+function toggleServiceProtection(selectObj) {
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	var serviceref = unescape(selectList.options[idx].value);
+	currentServicelistIndex =  idx;
+	doRequest('/bouqueteditor/web/togglelock?sRef='+ serviceref +'&password=' + chachedPin, toggleServiceProtectionCallback, false);
+}
+
+function toggleServiceProtectionCallback(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){
+			var ref = getCurrentSelectedBouquetlistRef();
+			getServiceList(ref);
+		}
+	}
+}
+
+function createBackup() {
+	var filename=prompt('Please enter filename for backup file:', 'webbouqueteditor_backup');
+	if (filename) {
+		url = '/bouqueteditor/web/backup?Filename='+filename;
+		doRequest(url, incommingBackupResult, false);
+	}
+}
+
+function incommingBackupResult(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		if(result.getState()){
+			startDownloadBackupFile(result.getStateText())
+		}
+		else
+			simpleResultHandler(result);
+	}
+}
+
+function startDownloadBackupFile(file) {
+	var url =  "/bouqueteditor/tmp/" + file;
+	window.open(url,'Download');
+}
+
+
+function incommingRestoreResult(request) {
+	if (request.readyState == 4) {
+		var result = new SimpleXMLResult(getXML(request));
+		simpleResultHandler(result);
+		if(result.getState()){
+			setMode(MODE.tv);
+		}
+		else
+			simpleResultHandler(result);
+	}
+}
+
+function renameService(selectObj) {
+	var bouqueref = currentBouquetRef;
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	if ( idx != -1) {
+		var ref = unescape(selectList.options[idx].value); 
+	
+		var newServicename=prompt('Please enter new servicename for selected service:', selectList.options[idx].text);
+		if (newServicename){
+			var selectServicelistOptions = selectList.getElementsByTagName('option');
+			if (selectServicelistOptions.length > 0) {
+				var idxServicelist = selectList.selectedIndex;
+				currentServicelistIndex = idxServicelist;
+				if ( idxServicelist != -1 && idxServicelist != selectServicelistOptions.length){
+					if ( idxServicelist + 1 < selectServicelistOptions.length){
+						var refServicelist = unescape(selectList.options[idxServicelist+1].value);
+					}
+				}
+			}
+			else
+				currentServicelistIndex = null;
+			doRequest('/bouqueteditor/web/renameservice?sBouquetRef='+ bouqueref + '&sRef=' + ref +'&sRefBefore=' + refServicelist + '&newName=' + newServicename, serviceListUpdated, false);
+		}
+	}
+	else
+		alert ("No service selected!");
+}
+
+function renameBouquet(selectObj) {
+	var selectList = $(selectObj);
+	var idx = selectList.selectedIndex; 
+	var bouqueref = unescape(selectList.options[idx].value); 
+	var newServicename=prompt('Please enter new servicename for selected bouquet:', selectList.options[idx].text);
+	if (newServicename){
+		currentBouquetlistIndex =  idx;
+		doRequest('/bouqueteditor/web/renameservice?sRef=' + bouqueref +'&mode=' + currentMode + '&newName=' + newServicename, bouquetListUpdated,false);
+	}
+}
+
+
+function addMarkerToBouquet(selectObj) {
+	var bouqueref = currentBouquetRef;
+	var selectList = $(selectObj);
+	var markername=prompt('Please enter a marker name:', '');
+	if (markername) {
+		var selectServicelistOptions = selectList.getElementsByTagName('option');
+		if (selectServicelistOptions.length > 0) {
+			var idxServicelist = selectList.selectedIndex;
+			currentServicelistIndex = idxServicelist + 1;
+			if ( idxServicelist != -1 && idxServicelist != selectServicelistOptions.length){
+				if ( idxServicelist + 1 < selectServicelistOptions.length){
+					var refServicelist = unescape(selectList.options[idxServicelist+1].value);
+				}
+			}
+		}
+		else
+			currentServicelistIndex = null;
+		doRequest('/bouqueteditor/web/addmarkertobouquet?sBouquetRef='+ bouqueref + '&Name=' + markername +'&sRefBefore=' + refServicelist, serviceListUpdated, false);
+	}
+}
+
+function fileUpload(form, action_url)
+{
+	if($('file').value.trim() == ""){
+		notify("Please select a File to restore!");
+		return;
+	}
+	// Create the iframe...
+	var iframe = document.createElement("iframe");
+	iframe.setAttribute("id","upload_iframe");
+	iframe.setAttribute("name","upload_iframe");
+	iframe.setAttribute("width","0");
+	iframe.setAttribute("height","0");
+	iframe.setAttribute("border","0");
+	iframe.setAttribute("style","width: 0; height: 0; border: none;");
+
+	// Add to document...
+	form.parentNode.appendChild(iframe);
+	window.frames['upload_iframe'].name="upload_iframe";
+	iframe = $(iframe);
+
+
+	// Add event...
+	var eventHandler = function(){
+		// Message from server...
+		var resdoc;
+
+		if (iframe.contentDocument) {
+				resdoc = iframe.contentDocument;
+		} else if (iframe.contentWindow) {
+				resdoc = iframe.contentWindow.document;
+		} else if (iframe.document) {
+				resdoc = iframe.document;
+		}
+
+		var result = new SimpleXMLResult(resdoc);
+
+		if (result.getState()){
+			doRequest('/bouqueteditor/web/restore?Filename=' + result.getStateText() , incommingRestoreResult, false);
+		} else {
+			simpleResultHandler(result);
+		}
+		
+        try{
+			// unregister Eventhandler
+			iframe.stopObserving();
+			// remove iframe
+			iframe.parentNode().removeChild(iframe);
+		} catch(e){return;}
+    }
+	
+	iframe.observe("load", eventHandler);
+	// Set properties of form...
+	form.setAttribute("target","upload_iframe");
+	form.setAttribute("action", action_url);
+	form.setAttribute("method","post");
+	form.setAttribute("enctype","multipart/form-data");
+	form.setAttribute("encoding","multipart/form-data");
+
+	// Submit the form...
+	form.submit();
+
+	notify("Uploading...");
+}
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/bouquetlist.htm
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/bouquetlist.htm	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/bouquetlist.htm	(revision 9324)
@@ -0,0 +1,39 @@
+<table class="selectTab"> 
+	<tr>
+		<td>
+			<select id="bouquetlist" size="6" class="select" onchange="bouquetlistChange(this);">
+			{for bouquet in bouquets}
+			  <option data-hasprotection="${bouquet.serviceisprotected}" value="${bouquet.servicereference}">${bouquet.prefix}${bouquet.servicename}${bouquet.suffix}</option>
+			{/for}		
+			</select>
+		</td>
+	</tr>
+	<tr>
+		<td>
+			<button style="width: 23%" type="button"
+				  onclick="moveBouquetOptionsUp('bouquetlist');">
+				Up
+			</button>
+			<button style="width: 23%" type="button"
+				  onclick="moveBouquetOptionsDown('bouquetlist');">
+				Down
+			</button>
+			<button style="width: 23%" type="button"
+				  onclick="addBouquet();">
+				New
+			</button>
+			<button style="width: 23%" type="button"
+				  onclick="removeBouquet('bouquetlist');">
+				Remove
+			</button>
+			<button style="width: 23%" type="button"
+				  onclick="renameBouquet('bouquetlist');">
+				Rename
+			</button>
+			<button id="togglebouquetprotection" style="width: 23%" type="button"
+				  onclick="toggleBouquetProtection('bouquetlist');">
+				toggle protection
+			</button>
+		</td>
+	</tr>
+</table>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/index.html
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/index.html	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/index.html	(revision 9324)
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+	<meta content="text/html; charset=UTF-8" http-equiv="content-type">
+	<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
+	<title>AAF-BouquetEditor</title>
+	<link href="/bouqueteditor/style.css" type="text/css" rel="stylesheet">
+	<link rel="shortcut icon" type="/web-data/image/x-icon" href="/web-data/img/favicon.ico">
+	<!-- External Libraries - use the minified lib-collection of the standard webif -->
+	<script type="text/javascript" src="/web-data/lib/libs_minified.js"></script>	
+	<!-- userprefs Object -->
+	<script type="text/javascript" src="/web-data/userprefs.js"></script>
+	<!-- webif stuff //-->
+	<script type="text/javascript" src="/web-data/objects.js" ></script>
+	<script type="text/javascript" src="/web-data/statics.js" ></script>
+	<script type="text/javascript" src="/web-data/tools.js" ></script> 
+	<!-- bouqueteditor stuff -->
+	<script type="text/javascript" src="/bouqueteditor/bouqueteditor.js" ></script>
+</head>
+<body>
+	<div id="container">
+		<div id="banner" class="roundBorder" style="height: 40px; margin-bottom: 10px;">
+			<span id="notification"><div></div></span>
+			<div style="display: block; height: 100%; text-align: center; padding-top: 10px;">
+				<img src="/bouqueteditor/aaf_bouqueteditor.png" alt="AAF Web">				
+			</div>
+		</div>
+		<table class="contentTabMain roundBorder" style="height: auto; margin-bottom: 3px;" border="0" cellpadding="0" cellspacing="0">	
+
+			<tr class="black">
+				<th>
+					<ul class="BEmenu">
+						<li id="navTv"><a href="#" onClick="setMode(MODE.tv);">TV</a></li>
+						<li id="navRadio"><a href="#" onClick="setMode(MODE.radio);">Radio</a></li>
+					</ul>
+				</th>
+				<td>
+					<table style="width:100%;text-align:right">
+						<tr>
+							<td></td>
+						
+							<td>
+								<button style="font-weight: normal;" onClick="createBackup();">Backup Settings</button>
+								<form style="display:inline">									
+									<input type="button" value="Restore Settings"
+											onClick="fileUpload(this.form,'uploadfile'); return false;" >
+									<input type="file" name="file" id="file"/>
+								</form>
+							</td>
+						</tr>
+					</table>
+				</td>
+			</tr>
+		</table>
+		<table border="0" cellpadding="0" cellspacing="0">
+			<tr>
+				<td class="half">
+					<table class="contentTabInner roundBorder" border="0" cellpadding="0" cellspacing="0">
+						<tr class="black">
+							<th class="tabheader">
+								<ul class="BEmenu">
+									<li id="navSat"><a href="#" onClick="setServiceNav(1);">Satellites</a></li>
+									<li id="navProv"><a href="#" onClick="setServiceNav(0);">Provider</a></li>
+									<li id="navAll"><a href="#" onClick="setServiceNav(2);">All Services</a></li>
+								</ul>
+							</th>	
+						</tr>
+						<tr>
+							<td style="vertical-align: top;">
+								<div id="contentSelectionList"></div>
+							</td>
+						</tr>
+						<tr class="grey">						
+							<th id="providerServiceHeader">Services for Provider</th>
+						</tr>
+						<tr>
+							<td class="white normalFont">Search: <input id="serviceSearch" value="Service to search for..."/></td>
+						</tr>
+						<tr>
+							<td style="vertical-align: top;">
+								<div id="contentSelectionSubList"></div>
+							</td>		
+						</tr>
+					</table>
+				</td>
+				<td class="middle">&nbsp;</td>
+				<td class="half">
+					<table class="contentTabInner roundBorder" border="0" cellpadding="0" cellspacing="0">
+						<tr class="black">							
+							<th class="tabheader">Bouquets</th>				
+						</tr>
+						<tr>
+							<td style="vertical-align: top;">
+								<div id="contentBouquetList"></div>
+							</td>
+						</tr>
+						<tr class="grey">						
+							<th id="bouquetServiceHeader">Please select a Bouquet...</th>
+						</tr>
+						<tr>
+							<td style="vertical-align: top;">
+								<div id="contentServicelist"></div>
+							</td>
+						</tr>
+						<tr id="alternativesHead" style="display:none">						
+							<th class="grey">Alternatives</th>
+						</tr>
+						<tr id="alternatives" style="display:none">
+							<td id="contentAlternatives" class="white"><td>
+						</tr>
+					</table>					
+				</td>
+			</tr>
+		</table>		
+	</div>
+	<script language="JavaScript">
+		setMode(MODE.tv);
+		$('serviceSearch').observe('keyup', serviceSearch);
+		$('serviceSearch').observe('focus', onServiceSearchFocus);
+		$('serviceSearch').observe('blur', onServiceSearchBlur);
+	</script>
+</body>
+</html>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/providerlist.htm
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/providerlist.htm	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/providerlist.htm	(revision 9324)
@@ -0,0 +1,18 @@
+<table class="selectTab"> 
+	<tr>
+		<td>
+			<select id="providerlist" size="6" class="select" onchange="providerlistChange(this);">
+			{for service in services}
+			  <option value="${service.servicereference}">${service.servicename}</option>
+			{/for}		
+			</select>
+		</td>
+	</tr>
+	<tr>
+		<td>
+			<button type="button" onclick="addProviderToBouquet('providerlist');">
+				Add to bouquetlist
+			</button>
+		</td>
+	</tr>
+</table>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/providerservicelist.htm
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/providerservicelist.htm	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/providerservicelist.htm	(revision 9324)
@@ -0,0 +1,21 @@
+<table class="selectTab"> 
+	<tr>
+		<td>
+			<select id="providerservicelist" size="18" class="select">
+			{for service in services}
+			  <option id="service.servicereference" class="providerservice" data-servicename="${service.servicename}" value="${service.servicereference}">${service.servicename}</option>
+			{/for}		
+			</select>
+		</td>
+	</tr>
+	<tr>
+		<td>
+			<button class="half" type="button" onclick="addServiceToBouquet('providerservicelist');">
+				Add service to bouquet
+			</button>
+			<button class="half" type="button" onclick="addAlternativeService('providerservicelist');">
+				Add as alternative service
+			</button>
+		</td>
+	</tr>
+</table>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/servicelist.htm
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/servicelist.htm	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/servicelist.htm	(revision 9324)
@@ -0,0 +1,49 @@
+<table class="selectTab"> 
+	<tr>
+		<td>
+			<select id="servicelist" size="10" class="select" onchange="servicelistChange(this);">
+
+			{for service in services}
+				<option data-hasalt="${service.serviceisgroup}" data-hasprotection="${service.serviceisprotected}" value="${service.servicereference}">${service.prefix}${service.servicename}${service.suffix}</option>
+			{/for}		
+			</select>
+		</td>
+	</tr>
+	<tr>
+		<td>
+			<button type="button" onclick="moveServiceOptionsUp('servicelist');">
+				Up
+			</button>
+			<button type="button" onclick="moveServiceOptionsDown('servicelist');">
+				Down
+			</button>
+			<button type="button" onclick="moveServiceOptionsUp5('servicelist');">
+				Up +5
+			</button>
+			<button type="button" onclick="moveServiceOptionsDown5('servicelist');">
+				Down -5
+			</button>
+			<button type="button" onclick="moveServiceOptionsTop('servicelist');">
+				Top
+			</button>
+			<button type="button" onclick="moveServiceOptionsBottom('servicelist');">
+				Bottom
+			</button>
+			<button type="button" onclick="removeService('servicelist');">				  
+				Remove
+			</button>
+			<button id="renameservice" type="button" onclick="renameService('servicelist');">
+				Rename
+			</button><br>
+			<button id="addmarker" type="button" onclick="addMarkerToBouquet('servicelist');">
+				Add marker
+			</button>
+			<button id="removeAlternativServicesButton" type="button" onclick="removeAlternativServices('servicelist');">
+				Remove alternative list
+			</button>
+			<button id="toggleserviceprotection" type="button" onclick="toggleServiceProtection('servicelist');">
+				toggle protection
+			</button>
+		</td>
+	</tr>
+</table>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/style.css
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/style.css	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web-data/style.css	(revision 9324)
@@ -0,0 +1,142 @@
+html, body{
+	font-family: Tahoma, Sans-Serif;
+	font-size: 14px;
+	font-weight: bold;
+	color: #fff;
+	text-align: center;
+	background: #555
+}
+* html #banner{
+	width: 1005px;
+	height: 40px;
+}
+a, a:visited, a:active{
+	color: #485052;
+	text-decoration: none;
+}
+button{
+	/*font-weight: bold;*/
+	margin: 1px;
+	padding-left: 2px;
+	padding-right: 2px;
+}
+img{
+	border: 0px;
+}
+#banner{
+	width: 1000px;
+	height: 67px;
+	background: #000;
+	padding-left: 5px;
+	margin-bottom: 8px; 	
+}
+#serviceSearch{
+	width: 70%;
+	color: #AAA;
+}
+#container {
+	margin: 0 auto;   /* align for good browsers */
+	text-align: left; /* counter the body center */
+	width: 1005px;
+}
+#notification{		
+	color: #000;
+	width: 50%;
+	height: 32px;
+	position: absolute;
+	top: 0px;
+	left: 25%;		
+	text-align: center;
+	vertical-align: bottom;
+	z-index: 2;		
+}
+.normalFont{
+	font-weight: normal;
+}
+.contentTabMain{
+	background-color: #FFF;
+	text-align: left; 
+	width: 1004px;
+	margin:0px;
+	padding:0px;
+}
+.contentTabInner{	
+	background-color: #FFF;
+	text-align: left; 
+	width: 490px;
+	margin:0px;
+	padding:0px;
+}
+th.contentTabMain{
+	background: #000;
+}
+.selectTab{
+	width: 100%;
+}
+.roundBorder{
+	border: 2px solid #000;		
+	border-radius: 5px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+}
+.half{
+	width: 48%;
+	vertical-align: top;
+}
+.quarter{
+	width: 25%;
+}
+.middle{
+	padding: 0px;
+}
+.select{
+	width: 100%;
+	display: block;
+}
+.BEmenu{
+	text-align: center;
+	overflow:hidden;
+	background: #000;
+	margin: 0;
+	padding: 0;
+}
+.BEmenu li{
+	list-style: none;
+	float: left;
+	width: 130px;
+	height: 21px;
+	margin-left: 2px;
+	background:#485052; 
+	margin-top: 6px;
+	margin-bottom: 6px;
+	padding: 0px;	
+	border-radius: 5px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;		
+}
+.BEmenu a:hover, .BEmenu a:hover{ background: #AAA; }
+.BEmenu li.hover, .BEmenu li.hover{ background: #AAA; }
+.BEmenu a{
+	color: #fff;
+	display:block;
+	padding-top: 1px;
+	padding-bottom: 3px;
+			
+	border-radius: 5px;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+}
+.black{
+	background: #000;
+}
+.grey{
+	background: #DDD;
+	color: #000;
+}
+.white{
+	background: #FFF;
+	color: #000;
+}
+.tabheader{
+	height: 35px;
+}
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addbouquet.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addbouquet.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addbouquet.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="AddBouquet" id="name,mode">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="AddBouquet"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="AddBouquet"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addmarkertobouquet.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addmarkertobouquet.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addmarkertobouquet.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="AddMarkerToBouquet" id="sBouquetRef,Name,sRefBefore">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="AddMarkerToBouquet"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="AddMarkerToBouquet"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addprovidertobouquetlist.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addprovidertobouquetlist.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addprovidertobouquetlist.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="AddProviderToBouquetlist" id="sProviderRef,mode">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="AddProviderToBouquetlist"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="AddProviderToBouquetlist"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addservicetoalternative.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addservicetoalternative.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addservicetoalternative.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="AddServiceToAlternative" id="sBouquetRef,sCurrentRef,sRef,mode">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="AddServiceToAlternative"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="AddServiceToAlternative"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addservicetobouquet.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addservicetobouquet.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/addservicetobouquet.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="AddServiceToBouquet" id="sBouquetRef,sRef,sRefBefore">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="AddServiceToBouquet"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="AddServiceToBouquet"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/backup.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/backup.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/backup.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="Backup" id="Filename">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="Backup"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="Backup"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/getprotectionsettings.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/getprotectionsettings.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/getprotectionsettings.xml	(revision 9324)
@@ -0,0 +1,15 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.AdditionalWebScreens" name="AdditionalWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2protection>
+<e2:element source="ProtectionSettings" id="sref">				
+	<e2:convert type="web:ListFiller">
+	&lt;e2serviceprotection>
+		&lt;e2serviceprotectionconfigured><e2:item name="Configured" filter="xml" />&lt;/e2serviceprotectionconfigured>
+		&lt;e2serviceprotectiontype><e2:item name="Type" filter="xml" />&lt;/e2serviceprotectiontype>
+		&lt;e2serviceprotectionsetuppinactive><e2:item name="SetupPinActive" filter="xml" />&lt;/e2serviceprotectionsetuppinactive>
+		&lt;e2serviceprotectionsetuppin><e2:item name="SetupPin" filter="xml" />&lt;/e2serviceprotectionsetuppin>
+	&lt;/e2serviceprotection>
+	</e2:convert>
+	<e2:convert type="web:TextToHTML" />			
+</e2:element>
+</e2protection>	
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/getservices.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/getservices.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/getservices.xml	(revision 9324)
@@ -0,0 +1,16 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.AdditionalWebScreens" name="AdditionalWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2servicelist>
+<e2:element source="ServiceList" id="sRef">				
+	<e2:convert type="web:ListFiller">
+	&lt;e2service>
+		&lt;e2servicereference><e2:item name="Reference" filter="xml" />&lt;/e2servicereference>
+		&lt;e2servicename><e2:item name="Name" filter="xml" />&lt;/e2servicename>
+		&lt;e2serviceisgroup><e2:item name="isGroup" filter="xml" />&lt;/e2serviceisgroup>
+		&lt;e2serviceismarker><e2:item name="isMarker" filter="xml" />&lt;/e2serviceismarker>
+		&lt;e2serviceisprotected><e2:item name="isProtected" filter="xml" />&lt;/e2serviceisprotected>
+	&lt;/e2service>
+	</e2:convert>
+	<e2:convert type="web:TextToHTML" />			
+</e2:element>
+</e2servicelist>	
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/movebouquet.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/movebouquet.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/movebouquet.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="MoveBouquet" id="sBouquetRef,mode,position">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="MoveBouquet"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="MoveBouquet"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/moveservice.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/moveservice.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/moveservice.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="MoveService" id="sBouquetRef,sRef,mode,position">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="MoveService"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="MoveService"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removealternativeservices.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removealternativeservices.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removealternativeservices.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="RemoveAlternativeServices" id="sBouquetRef,sRef">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="RemoveAlternativeServices"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="RemoveAlternativeServices"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removebouquet.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removebouquet.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removebouquet.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="RemoveBouquet" id="sBouquetRef,mode">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="RemoveBouquet"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="RemoveBouquet"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removeservice.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removeservice.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/removeservice.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="RemoveService" id="sBouquetRef,sRef">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="RemoveService"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="RemoveService"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/renameservice.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/renameservice.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/renameservice.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="RenameService" id="sBouquetRef,sRef,sRefBefore,newName,mode">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="RenameService"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="RenameService"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/restore.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/restore.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/restore.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="Restore" id="Filename">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="Restore"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="Restore"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/satelliteslist.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/satelliteslist.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/satelliteslist.xml	(revision 9324)
@@ -0,0 +1,5 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.AdditionalWebScreens" name="AdditionalWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2servicelist>
+<e2:element source="SatellitesList" id="mode"><e2:convert type="web:TextToHTML" /></e2:element>
+</e2servicelist>
+</e2:screen>
Index: ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/togglelock.xml
===================================================================
--- ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/togglelock.xml	(revision 9324)
+++ ipk/source.sh4/swapnetwork_webif_1.0/var/swap/extensions/WebBouquetEditor/web/togglelock.xml	(revision 9324)
@@ -0,0 +1,9 @@
+<e2:screen external_module="Plugins.Extensions.WebBouquetEditor.WebScreens.BouquetEditorWebScreens" name="BouquetEditorWebScreen">&lt;?xml version="1.0" encoding="UTF-8"?>
+<e2:element source="ToggleLock" id="sRef,password">
+	<e2:convert type="web:Null" />
+</e2:element>
+<e2simplexmlresult>
+	<e2state><e2:element source="ToggleLock"><e2:convert type="SimpleResult">Result</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2state>
+	<e2statetext><e2:element source="ToggleLock"><e2:convert type="SimpleResult">ResultText</e2:convert><e2:convert type="web:TextToXML" /></e2:element></e2statetext>	
+</e2simplexmlresult>		
+</e2:screen>
