protected void LoadPlayList(string strPlayList)
        {
            IPlayListIO loader = PlayListFactory.CreateIO(strPlayList);

            if (loader == null)
            {
                return;
            }
            PlayList playlist = new PlayList();

            if (!loader.Load(playlist, strPlayList))
            {
                TellUserSomethingWentWrong();
                return;
            }

            playlistPlayer.CurrentPlaylistName = Path.GetFileNameWithoutExtension(strPlayList);
            if (playlist.Count == 1)
            {
                Log.Info("GUIVideoFiles: play single playlist item - {0}", playlist[0].FileName);
                if (g_Player.Play(playlist[0].FileName))
                {
                    if (Util.Utils.IsVideo(playlist[0].FileName))
                    {
                        g_Player.ShowFullScreenWindow();
                    }
                }
                return;
            }

            // clear current playlist
            playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Clear();

            // add each item of the playlist to the playlistplayer
            for (int i = 0; i < playlist.Count; ++i)
            {
                PlayListItem playListItem = playlist[i];
                playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Add(playListItem);
            }

            // if we got a playlist
            if (playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Count > 0)
            {
                // then get 1st song
                playlist = playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO);
                PlayListItem item = playlist[0];

                // and start playing it
                playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO;
                playlistPlayer.Reset();
                playlistPlayer.Play(0);

                // and activate the playlist window if its not activated yet
                if (GetID == GUIWindowManager.ActiveWindow)
                {
                    GUIWindowManager.ActivateWindow((int)Window.WINDOW_VIDEO_PLAYLIST);
                }
            }
        }
        /// <summary>
        /// Private method to start playlist (needed for the invoke callback)
        /// </summary>
        private static void StartPlayingPlaylist(bool switchToPlaylistView)
        {
            if (GUIGraphicsContext.form.InvokeRequired)
            {
                StartPlayingPlaylistDelegate d = StartPlayingPlaylist;
                GUIGraphicsContext.form.Invoke(d, new object[] { switchToPlaylistView });
            }
            else
            {
                PlayListPlayer playlistPlayer = PlayListPlayer.SingletonPlayer;
                PlayList       playlist       = playlistPlayer.GetPlaylist(mPlaylistStartType);
                // if we got a playlist
                if (playlist.Count > 0)
                {
                    // and activate the playlist window if its not activated yet
                    if (switchToPlaylistView)
                    {
                        if (mPlaylistStartType == PlayListType.PLAYLIST_MUSIC)
                        {
                            WindowPluginHelper.ActivateWindow((int)MediaPortal.GUI.Library.GUIWindow.Window.WINDOW_MUSIC_PLAYLIST);
                        }
                        else if (mPlaylistStartType == PlayListType.PLAYLIST_VIDEO)
                        {
                            WindowPluginHelper.ActivateWindow((int)MediaPortal.GUI.Library.GUIWindow.Window.WINDOW_VIDEO_PLAYLIST);
                        }
                    }

                    // and start playing it
                    playlistPlayer.CurrentPlaylistType = mPlaylistStartType;
                    playlistPlayer.Reset();
                    playlistPlayer.Play(mPlaylistStartIndex);
                }
            }
        }
        protected override void OnPageLoad()
        {
            base.OnPageLoad();

            // Get notification, that an Internet Stream has changed
            // Moved out of the constructor, since it would cause loading of BASS in the Main thread,
            // because it is called by the Plugin Manager
            if (BassAudioEngine._initialized)
            {
                BassMusicPlayer.Player.InternetStreamSongChanged += OnInternetStreamSongChanged;
            }

            ImagePathContainer.Clear();

            _trackChanged = true;

            GUIPropertyManager.SetProperty("#currentmodule",
                                           String.Format("{0}/{1}", GUILocalizeStrings.Get(100005),
                                                         GUILocalizeStrings.Get(4540)));
            if (LblUpNext != null)
            {
                LblUpNext.Label = GUILocalizeStrings.Get(4541);
            }

            if (GUIPropertyManager.GetProperty("#Play.Next.Title") == string.Empty && LblUpNext != null)
            {
                LblUpNext.Visible = false;
            }

            ControlsInitialized = true;

            if (ImageChangeTimer == null)
            {
                ImageChangeTimer          = new Timer();
                ImageChangeTimer.Interval = 3600 * 1000;
                ImageChangeTimer.Elapsed += new ElapsedEventHandler(OnImageTimerTickEvent);
                ImageChangeTimer.Start();
            }

            if (ProgramChangeTimer == null)
            {
                ProgramChangeTimer          = new Timer();
                ProgramChangeTimer.Interval = 3 * 1000;
                ProgramChangeTimer.Elapsed += OnProgramTimerTickEvent;
                ProgramChangeTimer.Start();
            }
            else
            {
                ProgramChangeTimer.Start();
            }

            // Start the VUMeter Update Timer, when it is enabled in skin file
            GUIPropertyManager.SetProperty("#VUMeterL", @"VU1.png");
            GUIPropertyManager.SetProperty("#VUMeterR", @"VU1.png");

            if (VUMeterTimer == null && _usingBassEngine &&
                _vuMeter.ToLowerInvariant() != "none")
            {
                VUMeterTimer          = new Timer();
                VUMeterTimer.Interval = 10;
                VUMeterTimer.Elapsed += new ElapsedEventHandler(OnVUMterTimerTickEvent);
                VUMeterTimer.Start();
            }

            UpdateImagePathContainer();

            if (g_Player.Playing && g_Player.IsRadio)
            {
                PlaylistPlayer.Reset();
            }

            if (g_Player.Playing)
            {
                OnPlayBackStarted(g_Player.MediaType.Music, g_Player.CurrentFile);

                _isStopped = false;
            }
            else
            {
                CurrentTrackTag = null;
                NextTrackTag    = null;
                UpdateTrackInfo();
            }
        }
        /// <summary>
        /// Tune to a new last.fm radio station and add tracks to playlist
        /// </summary>
        /// <param name="strStation">name os station to tune to</param>
        private void TuneToStation(string strStation)
        {
            if (!Win32API.IsConnectedToInternet())
            {
                var dlgNotify = (GUIDialogNotify)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_NOTIFY);
                if (null != dlgNotify)
                {
                    dlgNotify.SetHeading(GUILocalizeStrings.Get(107890));
                    dlgNotify.SetText(GUILocalizeStrings.Get(34064));
                    dlgNotify.DoModal(GetID);
                }
                return;
            }

            Log.Debug("Attempting to Tune to last.fm station: {0}", strStation);

            // Clear playlist and start playback
            var pl = _playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_LAST_FM);

            pl.Clear();
            _playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_LAST_FM;
            _playlistPlayer.Reset();

            try
            {
                LastFMLibrary.TuneRadio(strStation);
            }
            catch (LastFMException ex)
            {
                Log.Error(ex);
                var dlgNotify = (GUIDialogNotify)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_NOTIFY);
                if (null != dlgNotify)
                {
                    dlgNotify.SetHeading(GUILocalizeStrings.Get(107890));
                    dlgNotify.SetText(ex.Message);
                    dlgNotify.DoModal(GetID);
                }
                return;
            }

            Log.Debug("Tuned to last.fm station: {0}", strStation);

            try
            {
                AddMoreTracks();
            }
            catch (LastFMException ex)
            {
                Log.Error("Unable to add last.fm tracks to playlist");
                var errMessage = "Unable to add last.fm tracks to playlist\n";
                if (ex.LastFMError == LastFMException.LastFMErrorCode.UnknownError)
                {
                    Log.Error(ex);
                    errMessage += "Please check logs";
                }
                else
                {
                    errMessage += ex.Message;
                }

                var dlgNotify = (GUIDialogNotify)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_NOTIFY);
                if (null != dlgNotify)
                {
                    dlgNotify.SetHeading(GUILocalizeStrings.Get(107890));
                    dlgNotify.SetText(errMessage);
                    dlgNotify.DoModal(GetID);
                }
                return;
            }
            _playlistPlayer.Play(0);
        }
        /// <summary>
        /// Play all episodes of a season
        /// </summary>
        /// <param name="seriesId">ID of a series</param>
        /// <param name="seasonNumber">Number of the season</param>
        /// <param name="onlyUnwatched">Play only unwatched episodes</param>
        /// <param name="autostart">If yes, automatically starts playback with the first episode</param>
        /// <param name="startIndex">Index of the item with which playback should start</param>
        /// <param name="switchToPlaylistView">If yes the playlistview will be shown</param>
        public static void PlaySeason(int seriesId, int seasonNumber, bool autostart, int startIndex, bool onlyUnwatched, bool switchToPlaylistView)
        {
            if (GUIGraphicsContext.form.InvokeRequired)
            {
                PlaySeasonAsyncDelegate d = new PlaySeasonAsyncDelegate(PlaySeason);
                GUIGraphicsContext.form.Invoke(d, new object[] { seriesId, seasonNumber, autostart, startIndex, onlyUnwatched, switchToPlaylistView });
                return;
            }

            List <DBEpisode> episodes = DBEpisode.Get(seriesId, seasonNumber);

            if (episodes == null || episodes.Count == 0)
            {
                return;
            }

            // filter out anything we can't play
            episodes.RemoveAll(e => string.IsNullOrEmpty(e[DBEpisode.cFilename]));

            // filter out watched episodes
            if (onlyUnwatched)
            {
                episodes.RemoveAll(e => e[DBOnlineEpisode.cWatched] != 0);
            }
            if (episodes.Count == 0)
            {
                return;
            }

            // Sort episodes and add them to the MP-TVSeries playlist player
            // Setup playlist player
            if (playlistPlayer == null)
            {
                playlistPlayer = PlayListPlayer.SingletonPlayer;
                playlistPlayer.PlaylistAutoPlay = true;
                playlistPlayer.RepeatPlaylist   = DBOption.GetOptions(DBOption.cRepeatPlaylist);
            }

            playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_TVSERIES).Clear();
            episodes.Sort();

            foreach (DBEpisode episode in episodes)
            {
                PlayListItem playlistItem = new PlayListItem(episode);
                playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_TVSERIES).Add(playlistItem);
            }

            //automatically start playing the playlist
            if (autostart)
            {
                // and activate the playlist window if its not activated yet
                if (switchToPlaylistView)
                {
                    GUIWindowManager.ActivateWindow(GUITVSeriesPlayList.GetWindowID);
                }

                playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_TVSERIES;
                playlistPlayer.Reset();
                playlistPlayer.Play(0);
            }
        }
        /// <summary>
        /// Loads a playlist and starts the playback
        /// </summary>
        /// <param name="playListFileName">Filename of the playlist</param>
        private void LoadPlayList(string playListFileName)
        {
            IPlayListIO loader   = PlayListFactory.CreateIO(playListFileName);
            PlayList    playlist = new PlayList();

            if (!loader.Load(playlist, playListFileName))
            {
                GUIDialogOK dlgOk = (GUIDialogOK)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_OK);
                if (dlgOk != null)
                {
                    dlgOk.SetHeading(6);
                    dlgOk.SetLine(1, 477);
                    dlgOk.SetLine(2, String.Empty);
                    dlgOk.DoModal(GetID);
                }
                return;
            }
            if (playlist.Count == 1)
            {
                string movieFileName = playlist[0].FileName + ".mplayer";
                if (movieFileName.StartsWith("rtsp:"))
                {
                    movieFileName = "ZZZZ:" + movieFileName.Remove(0, 5);
                }
                if (g_Player.Play(movieFileName))
                {
                    if (g_Player.Player != null && g_Player.IsVideo)
                    {
                        GUIGraphicsContext.IsFullScreenVideo = true;
                        GUIWindowManager.ActivateWindow((int)Window.WINDOW_FULLSCREEN_VIDEO);
                    }
                }
                return;
            }

            PlaylistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Clear();

            for (int i = 0; i < playlist.Count; ++i)
            {
                string movieFileName = playlist[i].FileName + ".mplayer";
                if (movieFileName.StartsWith("rtsp:"))
                {
                    movieFileName = "ZZZZ:" + movieFileName.Remove(0, 5);
                }
                playlist[i].FileName = movieFileName;
                PlayListItem playListItem = playlist[i];
                playListItem.Type = PlayListItem.PlayListItemType.Unknown;
                PlaylistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Add(playListItem);
            }


            if (PlaylistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Count > 0)
            {
                PlaylistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO);
                PlaylistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO;
                PlaylistPlayer.Reset();
                PlaylistPlayer.Play(0);

                if (g_Player.Player != null && g_Player.IsVideo)
                {
                    GUIGraphicsContext.IsFullScreenVideo = true;
                    GUIWindowManager.ActivateWindow((int)Window.WINDOW_FULLSCREEN_VIDEO);
                }
            }
        }