/// <summary>
        /// Form constructor.
        /// Grabs handles to all the important controls and builds
        /// the auth websocket
        /// </summary>
        public Login()
        {
            this.DataContext = this;
            InitializeComponent();
            Text_Failed.Visibility         = Visibility.Hidden;
            Spinner_Login.Visibility       = Visibility.Hidden;
            Text_RegisterResult.Visibility = Visibility.Hidden;
            Spinner_Register.Visibility    = Visibility.Hidden;

            this.AddProcessor(typeof(ANWI.Messaging.LoginResponse),
                              Login_Response);
            this.AddProcessor(typeof(ANWI.Messaging.RegisterResponse),
                              Register_Response);


            // Load credentials
            if (Appdata.CheckFileExists(credentialsFile))
            {
                try {
                    JObject root
                        = Appdata.OpenJSONFileEncrypted(credentialsFile);


                    Textbox_Username.Text         = (string)root["username"];
                    Textbox_Password.Password     = (string)root["password"];
                    Checkbox_RememberMe.IsChecked = true;
                } catch (Exception e) {
                    // Delete the credentials file so we don't fail again
                    Appdata.DeleteFile(credentialsFile);
                }
            }
        }
        /// <summary>
        /// Sends the login message to the server
        /// Also records credentials to file if checkbox is clicked
        /// </summary>
        /// <param name="uname"></param>
        /// <param name="pass"></param>
        /// <param name="remember"></param>
        private void SendLogin(string uname, string pass, bool remember)
        {
            // Make sure fields have text
            if (uname != "" && pass != "")
            {
                MessageRouter.Instance.Connect(MessageRouter.Service.Auth);

                // Send message to login server
                MessageRouter.Instance.Send(
                    MessageRouter.Service.Auth,
                    new ANWI.Messaging.LoginRequest(
                        CommonData.version,
                        uname,
                        pass),
                    this
                    );

                // Save credentials
                if (remember)
                {
                    try {
                        JObject root = new JObject(
                            new JProperty("username", uname),
                            new JProperty("password", pass));

                        Appdata.WriteFileEncrypted(
                            credentialsFile, root.ToString());
                    } catch (Exception e) {
                        // Fail silently, just prevent crashes
                    }
                }
            }
        }