private void TestAccount(TraktAccount account)
        {
            TraktResponse response = null;

            if (NewAccount)
            {
                if (lblTestConnect != null)
                {
                    GUIControl.SetControlLabel(GetID, lblTestConnect.GetID, Translation.CreatingAccount);
                }

                GUIWindowManager.Process();
                response = TraktAPI.TraktAPI.CreateAccount(account);
            }
            else
            {
                if (lblTestConnect != null)
                {
                    GUIControl.SetControlLabel(GetID, lblTestConnect.GetID, Translation.SigningIntoAccount);
                }

                GUIWindowManager.Process();
                response = TraktAPI.TraktAPI.TestAccount(account);
            }

            if (response.Status == "failure")
            {
                string errorMessage = string.IsNullOrEmpty(response.Error) ? response.Message : response.Error;
                GUIUtils.ShowNotifyDialog(Translation.Error, errorMessage);
                if (lblTestConnect != null)
                {
                    GUIControl.SetControlLabel(GetID, lblTestConnect.GetID, string.Empty);
                }
            }
            else
            {
                // Save New Account Settings
                TraktSettings.Username = account.Username;
                TraktSettings.Password = account.Password;
                if (!TraktSettings.UserLogins.Exists(u => u.Username == TraktSettings.Username))
                {
                    TraktSettings.UserLogins.Add(new TraktAuthentication {
                        Username = TraktSettings.Username, Password = TraktSettings.Password
                    });
                }
                TraktSettings.AccountStatus = ConnectionState.Connected;
                HideAccountControls();
                InitProperties();

                // clear caches
                // watch lists are stored by user so dont need clearing.
                GUITraktFriends.ClearCache();
                GUICalendar.ClearCache();
                GUIRecommendationsMovies.ClearCache();
                GUIRecommendationsShows.ClearCache();
            }
        }
        protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType)
        {
            // wait for any background action to finish
            if (GUIBackgroundTask.Instance.IsBusy)
            {
                return;
            }

            switch (controlId)
            {
            // Disconnect
            case ((int)SkinControls.Disconnect):
                DisconnectAccount();
                break;

            case ((int)SkinControls.Create):
                ShowAccountControls(true);
                break;

            case ((int)SkinControls.Login):
                bool autoLogin = ShowLoginMenu();
                ShowAccountControls(false);
                if (autoLogin)
                {
                    GUIControl.SetControlLabel(GetID, btnUsername.GetID, this.Username);
                    GUIControl.SetControlLabel(GetID, btnPassword.GetID, GetMaskedPassword(this.Password));
                    TraktAccount account = new TraktAccount
                    {
                        Username = this.Username,
                        Password = this.Password
                    };
                    TestAccount(account);
                }
                break;

            case ((int)SkinControls.Username):
                string username = Username;
                if (GUIUtils.GetStringFromKeyboard(ref username))
                {
                    Username = username;
                    GUIControl.SetControlLabel(GetID, btnUsername.GetID, username);
                }
                break;

            case ((int)SkinControls.Password):
                string password = Password;
                if (GUIUtils.GetStringFromKeyboard(ref password, true))
                {
                    Password = password;
                    GUIControl.SetControlLabel(GetID, btnPassword.GetID, GetMaskedPassword(password));
                }
                break;

            case ((int)SkinControls.EmailButton):
                string email = Email;
                if (GUIUtils.GetStringFromKeyboard(ref email))
                {
                    Email = email;
                    GUIControl.SetControlLabel(GetID, btnEmail.GetID, email);
                }
                break;

            case ((int)SkinControls.Ok):
                if (ValidateFields())
                {
                    TraktAccount account = new TraktAccount
                    {
                        Username = this.Username,
                        Password = this.Password.GetSha1(),
                        Email    = this.Email
                    };
                    TestAccount(account);
                }
                break;

            case ((int)SkinControls.Cancel):
                HideAccountControls();
                break;

            default:
                break;
            }
            base.OnClicked(controlId, control, actionType);
        }