function sf_recaptcha(form_id, submit_button_id, submit_button_loading, form_action, thanks_page_url, form_validation_message) {
    var form_submit_button = document.getElementById(submit_button_id);
    if (form_submit_button.tagName == 'A') {
        var submit_button_image = YAHOO.util.Dom.getChildren(form_submit_button)[0];
        var submit_button_source = submit_button_image.src;
    } else if (form_submit_button.tagName == 'INPUT') {
        var form_submit_button_value = form_submit_button.value;
    }
    var some_form = document.getElementById(form_id);
    var some_form_was_submitted = "no";
    var handleSuccess = function(o) {
        var message_checker_array = [];
        if (o.responseText !== undefined) {
            validation_response = o.responseText;
            var validation_messages = validation_response;
            validation_messages = YAHOO.lang.JSON.parse(validation_messages);
            validation_passed = 'yes';
            if (validation_response != message_checker_array) {
                Recaptcha.reload();
                // remove validation comments
                if (some_form_was_submitted == "yes") {
                    for (var key in validation_messages) {
                        var obj = validation_messages[key];
                        for (var prop in obj) {
                            var field_with_error_arr = document.getElementsByName(obj['field_name']);
							if (field_with_error_arr.length > 0) {
								field_with_error = field_with_error_arr[field_with_error_arr.length - 1];
							}
                            field_with_error.className = '';
                            var error_msg_after_input = YAHOO.util.Dom.getNextSibling(field_with_error);
                            if (error_msg_after_input != null) {
                                error_msg_after_input.parentNode.removeChild(error_msg_after_input);
                            }
                            // remove error class
                            var the_curr_input_name = field_with_error.getAttribute('name');
                            var input_before_error = YAHOO.util.Dom.getPreviousSibling(field_with_error);
                            function input_checker_remove() {
                                if (input_before_error != null) {
                                    if (input_before_error.getAttribute('name') == the_curr_input_name) {
                                        input_before_error.className = '';
                                        input_before_error = YAHOO.util.Dom.getPreviousSibling(input_before_error);
                                        input_checker_remove();
                                    } //if
                                } // if
                            } // function
                            input_checker_remove();
                        }
                    }
                }
                // show message at top of form
                form_validation_m = document.getElementById('form_validation_message');
                form_validation_m.innerHTML = form_validation_message;
                // show message for each item that did not pass validation
                for (var key in validation_messages) {
                    var obj = validation_messages[key];
                    for (var prop in obj) {
                        if (prop == 'field_name' && obj['field_msg'] != '0') {
                            validation_passed = "no";
                            //append error message to current field
                            el = document.createElement('div');
                            el.className = 'v_msg';
                            el.appendChild(document.createTextNode(obj['field_msg']));
                            var field_with_error_arr = document.getElementsByName(obj['field_name']);
                            if(field_with_error_arr.length > 0){
							field_with_error = field_with_error_arr[field_with_error_arr.length - 1];
							}
                            field_with_error.className = 'validation_error_state';
                            YAHOO.util.Dom.insertAfter(el, field_with_error);
                            // add error state to inputs with same name
                            var the_curr_input_name = field_with_error.getAttribute('name');
                            var input_before_error = YAHOO.util.Dom.getPreviousSibling(field_with_error);
                            function input_checker_add() {
                                if (input_before_error != null) {
                                    if (input_before_error.getAttribute('name') == the_curr_input_name) {
                                        YAHOO.util.Dom.addClass(input_before_error, 'validation_error_state');
                                        input_before_error = YAHOO.util.Dom.getPreviousSibling(input_before_error);
                                        input_checker_add()
                                    } //if
                                } //if
                            } // function
                            input_checker_add();
                        }
                    }
                }
                // send to thanks page
                if (validation_passed == 'yes') {
                   window.location.href = thanks_page_url;
                }
                // enable submit button
                if (form_submit_button.tagName == 'INPUT') {
                    form_submit_button.disabled = false;
                    form_submit_button.value = form_submit_button_value;
                } else if (form_submit_button.tagName == 'A') {
                    submit_button_image.src = submit_button_source;
                }
                some_form_was_submitted = "yes";
            }
        }
    }
    var handleFailure = function(o) {
        YAHOO.log("The failure handler was called.  tId: " + o.tId + ".", "info", "example");
        if (o.responseText !== undefined) {
            responseText_alert = "Transaction id: " + o.tId + ", Status:" + o.status + ": " + o.statusText;
            responseText_alert = "There was an error processing your request. The form was not submitted.";
            alert(responseText_alert);
        }
    }
    var callback = {
        success: handleSuccess,
        failure: handleFailure,
        argument: ['foo', 'bar']
    }
    var sUrl = form_action;
    //var postData = "username=anonymous&userid=
    makeRequest = function() {
        var formObject = document.getElementById('form_id');
        YAHOO.util.Connect.setForm(form_id);
        var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback);
        YAHOO.log("Initiating request; tId: " + request.tId + ".", "info", "example");
        if (form_submit_button.tagName == 'INPUT') {
            form_submit_button.disabled = true;
            form_submit_button.value = submit_button_loading;
        } else if (form_submit_button.tagName == 'A') {
            submit_button_image.src = submit_button_loading;
        }
    };
}