def __init__( self, *args, **kwargs ):
		self.exit_monitor = self.ExitMonitor(self.stopRunning)
		if os.path.exists(ignored_league_list_file):
			self.ignored_leagues = eval(FileIO.fileread(ignored_league_list_file))
		else:
			self.ignored_leagues = []
		
		self.tables = ssutils.get_league_tables_ids()
		random.shuffle(self.tables)
		
		self.table_index = -1
		self.teamObjs = {}
		self.cache_object = AddonCache()
class Main(xbmcgui.WindowXMLDialog):

	class ExitMonitor(xbmc.Monitor):

		def __init__(self, exit_callback):
			self.exit_callback = exit_callback

		def onAbortRequested(self):
			self.exit_callback()

		def onScreensaverDeactivated(self):
			self.exit_callback()
	
	def __init__( self, *args, **kwargs ):
		self.exit_monitor = self.ExitMonitor(self.stopRunning)
		if os.path.exists(ignored_league_list_file):
			self.ignored_leagues = eval(FileIO.fileread(ignored_league_list_file))
		else:
			self.ignored_leagues = []
		
		self.tables = ssutils.get_league_tables_ids()
		random.shuffle(self.tables)
		
		self.table_index = -1
		self.teamObjs = {}
		self.cache_object = AddonCache()

	def onInit(self):
		xbmc.log(msg="[Football Panel] Script started", level=xbmc.LOGDEBUG)
		self.isRunning = True
		xbmc.executebuiltin("ClearProperty(no-games,Home)")
		xbmc.executebuiltin("ClearProperty(has-tables,Home)")
		xbmc.executebuiltin("ClearProperty(has-rss,Home)")
		xbmc.executebuiltin("SetProperty(loading,1,home)")
		
		t1 = threading.Thread(target=self.livescoresThread)
		t2 = threading.Thread(target=self.tablesThread)
		t3 = threading.Thread(target=self.rssThread)
		t1.start()
		t2.start()
		t3.start()
		t1.join()
		t2.join()
		t3.join()
		xbmc.executebuiltin("ClearProperty(loading,Home)")
		i = 0
		while self.isRunning:
			if (float(i*200)/(livescores_update_time*60*1000)).is_integer() and i != 0:
				self.livescoresThread()
			if (float(i*200)/(tables_update_time*60*1000)).is_integer() and i != 0:
				self.tablesThread()
			if (float(i*200)/(rss_update_time*60*1000)).is_integer() and i != 0:
				self.rssThread()
			xbmc.sleep(200)
			i += 1
		xbmc.log(msg="[Football Panel] Script stopped", level=xbmc.LOGDEBUG)

	def livescoresThread(self):
		self.getLivescores()
		self.setLivescores()
		return

	def tablesThread(self):
		self.getLeagueTable()
		return

	def rssThread(self):
		self.setRss()
		return

	def setRss(self):
		feed = feedparser.parse(addon.getSetting("rss-url"))
		rss_line = ''
		for entry in feed['entries']:
			rss_line = rss_line + entry['summary_detail']['value'] + " | "
		if rss_line:
			#cleanup html code from the rss line
			htmlstriper = ssutils.HTMLStripper()
			htmlstriper.feed(rss_line)
			rss_line = htmlstriper.get_data()
			self.getControl(RSS_FEEDS).setLabel("")
			self.getControl(RSS_FEEDS).setLabel(rss_line)
			xbmc.executebuiltin("SetProperty(has-rss,1,home)")

	def getLivescores(self):
		self.livescoresdata = api.Livescores().Soccer()
		return

	def set_no_games(self):
		images = []
		self.updateCacheTimes()
		league_id = ssutils.get_league_id_no_games()

		update_team_data = True
		if self.cache_object.isCachedLeagueTeams(league_id):
			update_team_data = abs(self.t2 - self.cache_object.getCachedLeagueTeamsTimeStamp(league_id)) > datetime.timedelta(hours=self.hoursList[self.interval])

		if update_team_data:
			xbmc.log(msg="[Football Panel] Timedelta was reached for teams in league %s new request to be made..." % (str(league_id)), level=xbmc.LOGDEBUG)
			teams_in_league = api.Lookups().Team(leagueid=league_id)
			self.cache_object.cacheLeagueTeams(leagueid=league_id,team_obj_list=teams_in_league)
		else:
			xbmc.log(msg="[Football Panel] Using cached object for teams in league %s" % (str(league_id)), level=xbmc.LOGDEBUG)
			teams_in_league = self.cache_object.getcachedLeagueTeams(league_id)

		for team in teams_in_league:
			if team.strTeamFanart3: images.append(team.strTeamFanart3)
			if team.strTeamFanart4: images.append(team.strTeamFanart4)
		
		if images:
			random_photo = images[random.randint(0,len(images)-1)]
			self.getControl(NO_GAMES).setImage(random_photo)
		xbmc.executebuiltin("SetProperty(no-games,1,home)")
		return

	def updateCacheTimes(self):
		self.t2 = datetime.datetime.now()
		self.hoursList = [24, 48, 96, 168, 336]
		self.interval = int(addon.getSetting("new_request_interval"))
		return

	def getLeagueTable(self):
		
		self.table_index += 1
		if self.table_index > (len(self.tables)-1):
			self.table_index = 0

		leagueid = self.tables[self.table_index]
		table = api.Lookups().Table(leagueid)

		#Look for cached data first
		self.updateCacheTimes()

		#league data
		update_league_data = True
		if self.cache_object.isCachedLeague(leagueid):
			update_league_data = abs(self.t2 - self.cache_object.getCachedLeagueTimeStamp(leagueid)) > datetime.timedelta(hours=self.hoursList[self.interval])

		if update_league_data:
			xbmc.log(msg="[Football Panel] Timedelta was reached for league %s new request to be made..." % (str(leagueid)), level=xbmc.LOGDEBUG)
			league = api.Lookups().League(self.tables[self.table_index])[0]
			self.cache_object.cacheLeague(leagueid=leagueid,league_obj=league)
		else:
			xbmc.log(msg="[Football Panel] Using cached object for league %s" % (str(leagueid)), level=xbmc.LOGDEBUG)
			league = self.cache_object.getcachedLeague(leagueid)

		#team data
		update_team_data = True
		if self.cache_object.isCachedLeagueTeams(leagueid):
			update_team_data = abs(self.t2 - self.cache_object.getCachedLeagueTeamsTimeStamp(leagueid)) > datetime.timedelta(hours=self.hoursList[self.interval])

		if update_team_data:
			xbmc.log(msg="[Football Panel] Timedelta was reached for teams in league %s new request to be made..." % (str(leagueid)), level=xbmc.LOGDEBUG)
			teams_in_league = api.Lookups().Team(leagueid=self.tables[self.table_index])
			self.cache_object.cacheLeagueTeams(leagueid=leagueid,team_obj_list=teams_in_league)
		else:
			xbmc.log(msg="[Football Panel] Using cached object for teams in league %s" % (str(leagueid)), level=xbmc.LOGDEBUG)
			teams_in_league = self.cache_object.getcachedLeagueTeams(leagueid)
		
		#Finnaly set the table

		self.table = []
		for tableentry in table:
			try:
				item = xbmcgui.ListItem(tableentry.name)
				for team in teams_in_league:
					if tableentry.teamid == team.idTeam:
						item.setArt({ 'thumb': team.strTeamBadge })
						if show_alternative == "true":
							item.setLabel(team.AlternativeNameFirst)

				item.setProperty('points',str(tableentry.total))
				self.table.append(item)
			except Exception, e:
				xbmc.log(msg="[Football Panel] Exception: %s" % (str(e)), level=xbmc.LOGDEBUG)

		
		self.getControl(LEAGUETABLES_LIST_CONTROL).reset()
		if league.strLogo:
			self.getControl(LEAGUETABLES_CLEARART).setImage(league.strLogo)
		self.getControl(LEAGUETABLES_LIST_CONTROL).addItems(self.table)
		xbmc.executebuiltin("SetProperty(has-tables,1,home)")
		return
    if len(sys.argv) >= 2:
        params=sys.argv[1]
        pairsofparams=params.split('/')
        pairsofparams = [parm for parm in pairsofparams if parm]
    return pairsofparams

params=get_params()

if not params:
	main = Main(
			'script-livescores-Main.xml',
			addon_path,
			'default',
			'',
			)
	main.doModal()
	del main

else:
	if "ignoreleagues" in params:
		ignoreWindow = ignoreleagues.Select(
				'DialogSelect.xml',
				addon_path,
				'default',
				'',
				)
		ignoreWindow.doModal()
		del ignoreWindow
	elif "removecache" in params:
		AddonCache.removeCachedData()