public ActionResult Register(User u)
        {
            try
            {
                if (u.Username == null || u.Password == null || u.Email == null || u.Country == null)
                {
                    throw new CustomException("Please fill all fields");
                }
                else
                {
                    UsersBL uBl = new UsersBL();
                    if (uBl.UserAlreadyExists(u.Username))
                    {
                        throw new CustomException("Username Already Exists");
                    }
                    else if (uBl.EmailAlreadyExists(u.Email))
                    {
                        throw new CustomException("Email Already Exists");
                    }
                    else
                    {
                        CaptchaResponse response = ValidateCaptcha(Request.Form["g-recaptcha-response"]);


                        if (response.Success && ModelState.IsValid) //ModelState.isValid: if an input passed is not like the model it will return false //response.Success (captcha resposne)
                        {
                            uBl.Register(u);
                            TempData["message"] = "Account Successfully Registered.";
                            Logger.Log("Guest", Request.Path, "Registered as " + u.Username);
                            return(RedirectToAction("Login", "Accounts"));
                        }
                        else
                        {
                            throw new CustomException("CAPTCHA Error: " + response.ErrorMessage[0].ToString());
                        }
                    }
                }
            }

            catch (CustomException ex) {
                TempData["errormessage"] = ex.Message;
                Logger.Log(User.Identity.Name, Request.Path, ex.Message);
                return(View());
            }

            catch (Exception ex)
            {
                TempData["errormessage"] = ex.Message;
                Logger.Log(User.Identity.Name, Request.Path, ex.Message);
                return(View());
            }
        }