function rsvp_find(&$output, &$text)
{
    global $wpdb, $rsvp_form_action;
    $passcodeOptionEnabled = rsvp_require_passcode() ? true : false;
    $passcodeOnlyOption = rsvp_require_only_passcode_to_register() ? true : false;
    $_SESSION['rsvpFirstName'] = $_POST['firstName'];
    $_SESSION['rsvpLastName'] = $_POST['lastName'];
    $passcode = "";
    if (isset($_POST['passcode'])) {
        $passcode = $_POST['passcode'];
        $_SESSION['rsvpPasscode'] = $_POST['passcode'];
    }
    $firstName = $_POST['firstName'];
    $lastName = $_POST['lastName'];
    if (!$passcodeOnlyOption && (strlen($_POST['firstName']) <= 1 || strlen($_POST['lastName']) <= 1)) {
        $output = "<p class=\"rsvpParagraph\" style=\"color:red\">" . __("A first and last name must be specified", 'rsvp-plugin') . "</p>\r\n";
        $output .= rsvp_frontend_greeting();
        return rsvp_handle_output($text, $output);
    }
    // Try to find the user.
    if ($passcodeOptionEnabled) {
        if ($passcodeOnlyOption) {
            $attendee = $wpdb->get_row($wpdb->prepare("SELECT id, firstName, lastName, rsvpStatus \n  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM " . ATTENDEES_TABLE . " \n  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE passcode = %s", $passcode));
        } else {
            $attendee = $wpdb->get_row($wpdb->prepare("SELECT id, firstName, lastName, rsvpStatus \n  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM " . ATTENDEES_TABLE . " \n  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE firstName = %s AND lastName = %s AND passcode = %s", $firstName, $lastName, $passcode));
        }
    } else {
        $attendee = $wpdb->get_row($wpdb->prepare("SELECT id, firstName, lastName, rsvpStatus \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM " . ATTENDEES_TABLE . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE firstName = %s AND lastName = %s", $firstName, $lastName));
    }
    if ($attendee != null) {
        // hey we found something, we should move on and print out any associated users and let them rsvp
        $output = "<div>\r\n";
        if (strtolower($attendee->rsvpStatus) == "noresponse") {
            $output .= RSVP_START_PARA . "Hi " . htmlspecialchars(stripslashes($attendee->firstName . " " . $attendee->lastName)) . "!" . RSVP_END_PARA;
            if (trim(get_option(OPTION_WELCOME_TEXT)) != "") {
                $output .= RSVP_START_PARA . trim(get_option(OPTION_WELCOME_TEXT)) . RSVP_END_PARA;
            } else {
                $output .= RSVP_START_PARA . __("There are a few more questions we need to ask you if you could please fill them out below to finish up the RSVP process.", 'rsvp-plugin') . RSVP_END_PARA;
            }
            $output .= rsvp_frontend_main_form($attendee->id);
        } else {
            $output .= rsvp_frontend_prompt_to_edit($attendee);
        }
        return rsvp_handle_output($text, $output . "</div>\r\n");
    }
    // We did not find anyone let's try and do a rough search
    $attendees = null;
    if (!$passcodeOptionEnabled) {
        for ($i = 3; $i >= 1; $i--) {
            $truncFirstName = rsvp_chomp_name($firstName, $i);
            $attendees = $wpdb->get_results("SELECT id, firstName, lastName, rsvpStatus FROM " . ATTENDEES_TABLE . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE lastName = '" . mysql_real_escape_string($lastName) . "' AND firstName LIKE '" . mysql_real_escape_string($truncFirstName) . "%'");
            if (count($attendees) > 0) {
                $output = RSVP_START_PARA . "<strong>" . __("We could not find an exact match but could any of the below entries be you?", 'rsvp-plugin') . "</strong>" . RSVP_END_PARA;
                foreach ($attendees as $a) {
                    $output .= "<form method=\"post\" action=\"{$rsvp_form_action}\">\r\n\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rsvpStep\" value=\"foundattendee\" />\r\n\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"attendeeID\" value=\"" . $a->id . "\" />\r\n\n\t\t\t\t\t\t\t\t\t<p class=\"rsvpParagraph\" style=\"text-align:left;\">\r\n\n\t\t\t\t\t\t\t" . htmlspecialchars($a->firstName . " " . $a->lastName) . " \n\t\t\t\t\t\t\t<input type=\"submit\" value=\"RSVP\" />\r\n\n\t\t\t\t\t\t\t</p>\r\n</form>\r\n";
                }
                return rsvp_handle_output($text, $output);
            } else {
                $i = strlen($truncFirstName);
            }
        }
    }
    if (rsvp_require_only_passcode_to_register()) {
        $notFoundText = sprintf(__(RSVP_START_PARA . '<strong>We were unable to find anyone with the password you specified.</strong>' . RSVP_END_PARA, 'rsvp-plugin'));
    } else {
        $notFoundText = sprintf(__(RSVP_START_PARA . '<strong>We were unable to find anyone with a name of %1$s %2$s</strong>' . RSVP_END_PARA, 'rsvp-plugin'), htmlspecialchars($firstName), htmlspecialchars($lastName));
    }
    $notFoundText .= rsvp_frontend_greeting();
    return rsvp_handle_output($text, $notFoundText);
}
function rsvp_frontend_handler($text)
{
    global $wpdb;
    $passcodeOptionEnabled = get_option(OPTION_RSVP_PASSCODE) == "Y" ? true : false;
    //QUIT if the replacement string doesn't exist
    if (!strstr($text, RSVP_FRONTEND_TEXT_CHECK)) {
        return $text;
    }
    // See if we should allow people to RSVP, etc...
    $openDate = get_option(OPTION_OPENDATE);
    $closeDate = get_option(OPTION_DEADLINE);
    if (strtotime($openDate) !== false && strtotime($openDate) > time()) {
        return "<p>I am sorry but the ability to RSVP for our wedding won't open till <strong>" . date("m/d/Y", strtotime($openDate)) . "</strong></p>";
    }
    if (strtotime($closeDate) !== false && strtotime($closeDate) < time()) {
        return "<p>The deadline to RSVP for this wedding has passed, please contact the bride and groom to see if there is still a seat for you.</p>";
    }
    if (isset($_POST['rsvpStep'])) {
        $output = "";
        switch (strtolower($_POST['rsvpStep'])) {
            case "handlersvp":
                if (is_numeric($_POST['attendeeID']) && $_POST['attendeeID'] > 0) {
                    // update their information and what not....
                    if (strToUpper($_POST['mainRsvp']) == "Y") {
                        $rsvpStatus = "Yes";
                    } else {
                        $rsvpStatus = "No";
                    }
                    $attendeeID = $_POST['attendeeID'];
                    $wpdb->update(ATTENDEES_TABLE, array("rsvpDate" => date("Y-m-d"), "rsvpStatus" => $rsvpStatus, "note" => $_POST['rsvp_note'], "kidsMeal" => isset($_POST['mainKidsMeal']) && strToUpper($_POST['mainKidsMeal']) == "Y" ? "Y" : "N", "veggieMeal" => isset($_POST['mainVeggieMeal']) && strToUpper($_POST['mainVeggieMeal']) == "Y" ? "Y" : "N"), array("id" => $attendeeID), array("%s", "%s", "%s", "%s", "%s"), array("%d"));
                    rsvp_printQueryDebugInfo();
                    rsvp_handleAdditionalQuestions($attendeeID, "mainquestion");
                    $sql = "SELECT id FROM " . ATTENDEES_TABLE . " \n\t\t\t\t\t \tWHERE (id IN (SELECT attendeeID FROM " . ASSOCIATED_ATTENDEES_TABLE . " WHERE associatedAttendeeID = %d) \n\t\t\t\t\t\t\tOR id in (SELECT associatedAttendeeID FROM " . ASSOCIATED_ATTENDEES_TABLE . " WHERE attendeeID = %d)) \n\t\t\t\t\t\t\t AND rsvpStatus = 'NoResponse'";
                    $associations = $wpdb->get_results($wpdb->prepare($sql, $attendeeID, $attendeeID));
                    foreach ($associations as $a) {
                        if ($_POST['rsvpFor' . $a->id] == "Y") {
                            if ($_POST['attending' . $a->id] == "Y") {
                                $rsvpStatus = "Yes";
                            } else {
                                $rsvpStatus = "No";
                            }
                            $wpdb->update(ATTENDEES_TABLE, array("rsvpDate" => date("Y-m-d"), "rsvpStatus" => $rsvpStatus, "kidsMeal" => strToUpper(isset($_POST['attending' . $a->id . 'KidsMeal']) ? $_POST['attending' . $a->id . 'KidsMeal'] : "N") == "Y" ? "Y" : "N", "veggieMeal" => strToUpper(isset($_POST['attending' . $a->id . 'VeggieMeal']) ? $_POST['attending' . $a->id . 'VeggieMeal'] : "N") == "Y" ? "Y" : "N"), array("id" => $a->id), array("%s", "%s", "%s", "%s"), array("%d"));
                            rsvp_printQueryDebugInfo();
                            rsvp_handleAdditionalQuestions($a->id, $a->id . "question");
                        }
                    }
                    if (get_option(OPTION_HIDE_ADD_ADDITIONAL) != "Y") {
                        if (is_numeric($_POST['additionalRsvp']) && $_POST['additionalRsvp'] > 0) {
                            for ($i = 1; $i <= $_POST['additionalRsvp']; $i++) {
                                if ($i <= 3 && !empty($_POST['newAttending' . $i . 'FirstName']) && !empty($_POST['newAttending' . $i . 'LastName'])) {
                                    $wpdb->insert(ATTENDEES_TABLE, array("firstName" => trim($_POST['newAttending' . $i . 'FirstName']), "lastName" => trim($_POST['newAttending' . $i . 'LastName']), "rsvpDate" => date("Y-m-d"), "rsvpStatus" => $_POST['newAttending' . $i] == "Y" ? "Yes" : "No", "kidsMeal" => isset($_POST['newAttending' . $i . 'KidsMeal']) ? $_POST['newAttending' . $i . 'KidsMeal'] : "N", "veggieMeal" => isset($_POST['newAttending' . $i . 'VeggieMeal']) ? $_POST['newAttending' . $i . 'VeggieMeal'] : "N", "additionalAttendee" => "Y"), array('%s', '%s', '%s', '%s', '%s', '%s'));
                                    rsvp_printQueryDebugInfo();
                                    $newAid = $wpdb->insert_id;
                                    rsvp_handleAdditionalQuestions($newAid, $i . 'question');
                                    // Add associations for this new user
                                    $wpdb->insert(ASSOCIATED_ATTENDEES_TABLE, array("attendeeID" => $newAid, "associatedAttendeeID" => $attendeeID), array("%d", "%d"));
                                    rsvp_printQueryDebugInfo();
                                    $wpdb->query($wpdb->prepare("INSERT INTO " . ASSOCIATED_ATTENDEES_TABLE . "(attendeeID, associatedAttendeeID)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t SELECT " . $newAid . ", associatedAttendeeID \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM " . ASSOCIATED_ATTENDEES_TABLE . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE attendeeID = " . $attendeeID));
                                    rsvp_printQueryDebugInfo();
                                }
                            }
                        }
                    }
                    if (get_option(OPTION_NOTIFY_ON_RSVP) == "Y" && get_option(OPTION_NOTIFY_EMAIL) != "") {
                        $sql = "SELECT firstName, lastName, rsvpStatus FROM " . ATTENDEES_TABLE . " WHERE id= " . $attendeeID;
                        $attendee = $wpdb->get_results($sql);
                        if (count($attendee) > 0) {
                            $body = "Hello, \r\n\r\n";
                            $body .= stripslashes($attendee[0]->firstName) . " " . stripslashes($attendee[0]->lastName) . " has submitted their RSVP and has RSVP'd with '" . $attendee[0]->rsvpStatus . "'.";
                            wp_mail(get_option(OPTION_NOTIFY_EMAIL), "New RSVP Submission", $body);
                        }
                    }
                    return frontend_rsvp_thankyou();
                } else {
                    return rsvp_frontend_greeting();
                }
                break;
            case "editattendee":
                if (is_numeric($_POST['attendeeID']) && $_POST['attendeeID'] > 0) {
                    // Try to find the user.
                    $attendee = $wpdb->get_row($wpdb->prepare("SELECT id, firstName, lastName, rsvpStatus \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM " . ATTENDEES_TABLE . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE id = %d", $_POST['attendeeID']));
                    if ($attendee != null) {
                        $output .= "<div>\r\n";
                        $output .= "<p>Welcome back " . htmlentities($attendee->firstName . " " . $attendee->lastName) . "!</p>";
                        $output .= rsvp_frontend_main_form($attendee->id);
                        return $output . "</div>\r\n";
                    }
                }
                break;
            case "foundattendee":
                if (is_numeric($_POST['attendeeID']) && $_POST['attendeeID'] > 0) {
                    $attendee = $wpdb->get_row($wpdb->prepare("SELECT id, firstName, lastName, rsvpStatus \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM " . ATTENDEES_TABLE . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE id = %d", $_POST['attendeeID']));
                    if ($attendee != null) {
                        $output = "<div>\r\n";
                        if (strtolower($attendee->rsvpStatus) == "noresponse") {
                            $output .= "<p>Hi " . htmlentities(stripslashes(utf8_decode($attendee->firstName . " " . $attendee->lastName))) . "!</p>";
                            if (trim(get_option(OPTION_WELCOME_TEXT)) != "") {
                                $output .= "<p>" . trim(utf8_decode(get_option(OPTION_WELCOME_TEXT))) . "</p>";
                            } else {
                                $output .= "<p>There are a few more questions we need to ask you if you could please fill them out below to finish up the RSVP process.</p>";
                            }
                            $output .= rsvp_frontend_main_form($attendee->id);
                        } else {
                            $output .= rsvp_frontend_prompt_to_edit($attendee);
                        }
                        return $output . "</div>\r\n";
                    }
                    return rsvp_frontend_greeting();
                } else {
                    return rsvp_frontend_greeting();
                }
                break;
            case "find":
                $_SESSION['rsvpFirstName'] = $_POST['firstName'];
                $_SESSION['rsvpLastName'] = $_POST['lastName'];
                $passcode = "";
                if (isset($_POST['passcode'])) {
                    $passcode = $_POST['passcode'];
                    $_SESSION['rsvpPasscode'] = $_POST['passcode'];
                }
                $firstName = $_POST['firstName'];
                $lastName = $_POST['lastName'];
                if (strlen($_POST['firstName']) <= 1 || strlen($_POST['lastName']) <= 1) {
                    $output = "<p style=\"color:red\">A first and last name must be specified</p>\r\n";
                    $output .= rsvp_frontend_greeting();
                    return $output;
                }
                // Try to find the user.
                if ($passcodeOptionEnabled) {
                    $attendee = $wpdb->get_row($wpdb->prepare("SELECT id, firstName, lastName, rsvpStatus \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM " . ATTENDEES_TABLE . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE firstName = %s AND lastName = %s AND passcode = %s", $firstName, $lastName, $passcode));
                } else {
                    $attendee = $wpdb->get_row($wpdb->prepare("SELECT id, firstName, lastName, rsvpStatus \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t FROM " . ATTENDEES_TABLE . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE firstName = %s AND lastName = %s", $firstName, $lastName));
                }
                if ($attendee != null) {
                    // hey we found something, we should move on and print out any associated users and let them rsvp
                    $output = "<div>\r\n";
                    if (strtolower($attendee->rsvpStatus) == "noresponse") {
                        $output .= "<p>Hi " . htmlentities(stripslashes(utf8_decode($attendee->firstName . " " . $attendee->lastName))) . "!</p>";
                        if (trim(get_option(OPTION_WELCOME_TEXT)) != "") {
                            $output .= "<p>" . trim(utf8_decode(get_option(OPTION_WELCOME_TEXT))) . "</p>";
                        } else {
                            $output .= "<p>There are a few more questions we need to ask you if you could please fill them out below to finish up the RSVP process.</p>";
                        }
                        $output .= rsvp_frontend_main_form($attendee->id);
                    } else {
                        $output .= rsvp_frontend_prompt_to_edit($attendee);
                    }
                    return $output . "</div>\r\n";
                }
                // We did not find anyone let's try and do a rough search
                $attendees = null;
                if (!$passcodeOptionEnabled) {
                    for ($i = 3; $i >= 1; $i--) {
                        $truncFirstName = rsvp_chomp_name($firstName, $i);
                        $attendees = $wpdb->get_results("SELECT id, firstName, lastName, rsvpStatus FROM " . ATTENDEES_TABLE . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t WHERE lastName = '" . mysql_real_escape_string($lastName) . "' AND firstName LIKE '" . mysql_real_escape_string($truncFirstName) . "%'");
                        if (count($attendees) > 0) {
                            $output = "<p><strong>We could not find an exact match but could any of the below entries be you?</strong></p>";
                            foreach ($attendees as $a) {
                                $output .= "<form method=\"post\">\r\n\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rsvpStep\" value=\"foundattendee\" />\r\n\n\t\t\t\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"attendeeID\" value=\"" . $a->id . "\" />\r\n\n\t\t\t\t\t\t\t\t\t\t\t\t<p style=\"text-align:left;\">\r\n\n\t\t\t\t\t\t\t\t\t\t" . htmlentities(utf8_decode($a->firstName . " " . $a->lastName)) . " \n\t\t\t\t\t\t\t\t\t\t<input type=\"submit\" value=\"RSVP\" />\r\n\n\t\t\t\t\t\t\t\t\t\t</p>\r\n</form>\r\n";
                            }
                            return $output;
                        } else {
                            $i = strlen($truncFirstName);
                        }
                    }
                }
                return "<p><strong>We were unable to find anyone with a name of " . htmlentities(utf8_decode($firstName . " " . $lastName)) . "</strong></p>\r\n" . rsvp_frontend_greeting();
                break;
            case "newsearch":
            default:
                return rsvp_frontend_greeting();
                break;
        }
    } else {
        return rsvp_frontend_greeting();
    }
}