public static void ValidateModelForNew(OnlineRegPersonModel model, ModelStateDictionary modelState, int i)
        {
            var dobname   = model.Parent.GetNameFor(mm => mm.List[i].DateOfBirth);
            var foundname = model.Parent.GetNameFor(mm => mm.List[i].Found);

            ValidBasic(model, modelState, i);

            DateTime dt;

            if (model.RequiredDOB() && model.DateOfBirth.HasValue() && !Util.BirthDateValid(model.bmon, model.bday, model.byear, out dt))
            {
                modelState.AddModelError(dobname, "birthday invalid");
            }
            else if (!model.birthday.HasValue && model.RequiredDOB())
            {
                modelState.AddModelError(dobname, "birthday required");
            }
            if (model.birthday.HasValue && model.NoReqBirthYear() == false && model.birthday.Value.Year == Util.SignalNoYear)
            {
                modelState.AddModelError(dobname, "BirthYear is required");
                model.IsValidForNew = false;
                return;
            }

            var minage = DbUtil.Db.Setting("MinimumUserAge", "16").ToInt();

            if (model.orgid == Util.CreateAccountCode && model.age < minage)
            {
                modelState.AddModelError(dobname, "must be {0} to create account".Fmt(minage));
            }

            if (model.ComputesOrganizationByAge() && model.GetAppropriateOrg() == null)
            {
                modelState.AddModelError(dobname, model.NoAppropriateOrgError);
            }

            ValidateBirthdayRange(model, modelState, i);
            var n = 0;

            if (model.Phone.HasValue() && model.Phone.GetDigits().Length >= 10)
            {
                n++;
            }
            if (model.ShowAddress && model.HomePhone.HasValue() && model.HomePhone.GetDigits().Length >= 10)
            {
                n++;
            }

            if (model.RequiredPhone() && n == 0)
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].Phone), "cell or home phone required");
            }

            if (model.HomePhone.HasValue() && model.HomePhone.GetDigits().Length > 20)
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].HomePhone), "homephone too long");
            }

            if (model.EmailAddress.HasValue())
            {
                model.EmailAddress = model.EmailAddress.Trim();
            }

            if (!model.EmailAddress.HasValue() || !Util.ValidEmail(model.EmailAddress))
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].person.EmailAddress), "Please specify a valid email address.");
            }

            var isnewfamily = model.whatfamily == 3;

            if (isnewfamily)
            {
                if (!model.AddressLineOne.HasValue() && model.RequiredAddr())
                {
                    modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].AddressLineOne), "address required.");
                }
                if (model.RequiredZip() && model.AddressLineOne.HasValue())
                {
                    var addrok = model.City.HasValue() && model.State.HasValue();
                    if (model.ZipCode.HasValue())
                    {
                        addrok = true;
                    }

                    if (!addrok)
                    {
                        modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].ZipCode), "zip required (or \"na\")");
                    }

                    if (modelState.IsValid && model.AddressLineOne.HasValue() &&
                        (model.Country == "United States" || !model.Country.HasValue()))
                    {
                        var r = AddressVerify.LookupAddress(model.AddressLineOne, model.AddressLineTwo, model.City, model.State, model.ZipCode);
                        if (r.Line1 != "error")
                        {
                            if (r.found == false)
                            {
                                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].ZipCode), r.address + ", to skip address check, Change the country to USA, Not Validated");
                                model.ShowCountry = true;
                                return;
                            }
                            if (r.Line1 != model.AddressLineOne)
                            {
                                model.AddressLineOne = r.Line1;
                            }
                            if (r.Line2 != (model.AddressLineTwo ?? ""))
                            {
                                model.AddressLineTwo = r.Line2;
                            }
                            if (r.City != (model.City ?? ""))
                            {
                                model.City = r.City;
                            }
                            if (r.State != (model.State ?? ""))
                            {
                                model.State = r.State;
                            }
                            if (r.Zip != (model.ZipCode ?? ""))
                            {
                                model.ZipCode = r.Zip;
                            }
                        }
                    }
                }
            }

            if (!model.gender.HasValue && model.RequiredGender())
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].gender), "Please specify gender");
            }
            if (!model.married.HasValue && model.RequiredMarital())
            {
                modelState.AddModelError(model.Parent.GetNameFor(mm => mm.List[i].married), "Please specify marital status");
            }

            if (model.MemberOnly())
            {
                modelState.AddModelError(foundname, "Sorry, must be a member of church");
            }
            else if (model.org != null && model.setting.ValidateOrgIds.Count > 0 && !model.Parent.SupportMissionTrip)
            {
                modelState.AddModelError(foundname, "Must be member of specified organization");
            }

            model.IsValidForNew      = modelState.IsValid;
            model.IsValidForContinue = modelState.IsValid;
        }