public LoginPage(MainWindow main)
        {
            InitializeComponent();
            window = main;

            // Auto login if login is stored in settings
            if(AppSettings.Settings.GetValue<string>("Username") != "" && AppSettings.Settings.GetValue<string>("Password") != "") {
                Task.Factory.StartNew(() => {
                    try {
                        UICore.ToggleSpinner(grid);

                        string user = Crypt.Decrypt(AppSettings.Settings.GetValue<string>("Username"), cryptor),
                            pass = Crypt.Decrypt(AppSettings.Settings.GetValue<string>("Password"), cryptor);

                        // Attempt to login
                        SoundCloudCore.Connect(new Login(user, pass, clientID, clientSecret));
                        if(SoundCloudCore.IsConnected)
                            Dispatcher.Invoke(() => NavigateWindow(window));
                        UICore.ToggleSpinner(grid);
                    }
                    catch { }
                });
            }
        }
        void NavigateWindow(MainWindow window)
        {
            //Fetch Avatar Image
            window.meImg.Source = new BitmapImage(new Uri(Me.AvatarUrl, UriKind.Absolute));
            window.meName.Text = Me.Fullname;

            // Load all playlists
            Task.Factory.StartNew(() => {
                UICore.ToggleSpinner(window.playlistGrid, Colors.LightGray, 75);
                for(int i = 0; i < Me.PlaylistsCount; i++) {
                    foreach(var playlist in Me.GetPlaylists(i, 1)) {
                        Dispatcher.Invoke(() => {
                            // Create a menu row for each playlist
                            var txb = new TextBlock {
                                Foreground = (Brush)new BrushConverter().ConvertFromString("#FFB7B7B7"),
                                FontSize = 15,
                                Text = playlist.Title
                            };
                            txb.MouseDown += (sender, e) => window.contentFrame.Navigate(new PlaylistPage(playlist));
                            txb.MouseEnter += window.Menu_Enter;
                            txb.MouseLeave += window.Menu_Leave;
                            // Add playlist to menu
                            window.playlists.Children.Add(txb);
                        });
                    }
                }
                UICore.ToggleSpinner(window.playlistGrid);
            });

            // Go to the dashboard/stream
            window.contentFrame.Navigate(window.streamPage = new StreamPage());
        }
        // Login and Initialize Application UI
        public MainWindow()
        {
            window = this;
            // Loads all the settings
            Player.Init(new System.Windows.Interop.WindowInteropHelper(this).Handle);
            AppSettings.Load();
            // Update check
            if(AppSettings.Settings.GetValue<bool>("AutoUpdate"))
                AppSettings.CheckUpdate(false);

            InitializeComponent();

            #region Events
            // Safely frees all the bass resources and saves all settings
            Closing += OnClosing;
            spectrumSize.MouseDown += spectrumSize_MouseDown;
            spectrumClose.MouseDown += spectrumClose_MouseDown;

            // Player Events
            Player.SongEnded += (sender, e) => Player.Play(Player.TrackIndex + 1);
            Player.SongStarted += Player_SongStarted;

            // Player Progressbar & Progressbar Popup Events
            playerBbar.MouseDown += playerPop_MouseDown;
            playerBbar.MouseLeave += playerBbar_MouseLeave;
            playerBbar.MouseEnter += (sender, e) => playerPop.IsOpen = true;
            playerBbar.MouseMove += playerBbar_MouseMove;

            // Volume Popup Events
            playerVolPop.MouseLeave += playerVolPop_MouseLeave;
            playerVolSlider.ValueChanged += playerVolSlider_ValueChanged;
            playerVol.MouseDown += playerVol_MouseDown;
            playerVol.MouseEnter += playerVol_MouseEnter;
            playerVol.MouseLeave += playerVol_MouseLeave;

            // Player buttons
            playerPlay.MouseDown += playerPlay_MouseDown;
            playerPrev.MouseDown += playerPrev_MouseDown;
            playerNext.MouseDown += playerNext_MouseDown;

            // Search Box Events
            tbxSearch.KeyDown += (sender, e) => {
                if(e.Key == Key.Return) {
                    contentFrame.Navigate(new SearchPage(tbxSearch.Text));
                    menuSelected = "search";
                }
            };
            tbxSearch.GotFocus += (sender, e) => tbxSearch.Text = "";
            tbxSearch.LostFocus += (sender, e) => {
                if(string.IsNullOrWhiteSpace(tbxSearch.Text))
                    tbxSearch.Text = "Search";
            };
            #endregion

            // Player Timer
            timer.Interval = TimeSpan.FromMilliseconds(100);
            timer.Tick += OnTick;
            timer.Start();

            // Add event to every menu element
            foreach(TextBlock item in mainStack.Children) {
                item.MouseDown += Menu_Click;
                if(item.Name != "mainTitle") {
                    item.MouseLeave += Menu_Leave;
                    item.MouseEnter += Menu_Enter;
                }
            }

            // Init Shortcut Keys
            if(AppSettings.Settings.GetValue<bool>("HotkeysEnabled"))
                Shortcuts.Init(this);

            // Navigate to login page
            contentFrame.Navigate(new LoginPage(this));
            menuSelected = "stream";
        }