'Returns a form to reset the user password, overrides web2py\'s
version of the method to apply Eden formstyles.
@param next: URL to redirect to after successful form submission
@param onvalidation: callback to validate password reset form
@param onaccept: callback to post-process password reset request
@param log: event description for the log (string)'

def request_reset_password(self, next=DEFAULT, onvalidation=DEFAULT, onaccept=DEFAULT, log=DEFAULT):

    messages = self.messages
    settings = self.settings
    utable = settings.table_user
    request = current.request
    response = current.response
    session = current.session
    captcha = (settings.retrieve_password_captcha or ((settings.retrieve_password_captcha != False) and settings.captcha))
    if (next is DEFAULT):
        next = (self.get_vars_next() or settings.request_reset_password_next)
    if (not settings.mailer):
        response.error = messages.function_disabled
        return ''
    if (onvalidation is DEFAULT):
        onvalidation = settings.reset_password_onvalidation
    if (onaccept is DEFAULT):
        onaccept = settings.reset_password_onaccept
    if (log is DEFAULT):
        log = messages['reset_password_log']
    userfield = settings.login_userfield
    if (userfield == 'email'):
        utable.email.requires = [IS_EMAIL(error_message=messages.invalid_email), IS_IN_DB(self.db, utable.email, error_message=messages.invalid_email)]
    else:
        utable[userfield].requires = [IS_IN_DB(self.db, utable[userfield], error_message=messages.invalid_username)]
    form = SQLFORM(utable, fields=[userfield], hidden=dict(_next=next), showid=settings.showid, submit_button=messages.password_reset_button, delete_label=messages.delete_label, formstyle=current.deployment_settings.get_ui_formstyle(), separator=settings.label_separator)
    form.add_class('auth_reset_password')
    if captcha:
        s3_addrow(form, captcha.label, captcha, captcha.comment, settings.formstyle, 'captcha__row')
    if form.accepts(request, (session if self.csrf_prevention else None), formname='reset_password', dbio=False, onvalidation=onvalidation, hideerror=settings.hideerror):
        user = utable(**{userfield: form.vars.get(userfield)})
        if (not user):
            session.error = messages[('invalid_%s' % userfield)]
            redirect(self.url(args=request.args), client_side=settings.client_side)
        elif (user.registration_key in ('pending', 'disabled', 'blocked')):
            session.warning = messages.registration_pending
            redirect(self.url(args=request.args), client_side=settings.client_side)
        if self.email_reset_password(user):
            session.confirmation = messages.email_sent
        else:
            session.error = messages.unable_to_send_email
        self.log_event(log, user)
        callback(onaccept, form)
        if (not next):
            next = self.url(args=request.args)
        else:
            next = replace_id(next, form)
        redirect(next, client_side=settings.client_side)
    return form
