function sf_recaptcha(form_id, submit_button_id, submit_button_loading, form_action, thanks_page_url, form_validation_message) {
    var loader = new YAHOO.util.YUILoader({
        require: ["event", "connection", "selector", "element", "json", "dom", "container"],
        onSuccess: function() {
            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;
                }
            };
        },
        // success
        combine: true
    });
    loader.insert();
} // function
function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onLoad = func;
  } else {
    window.onLoad = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    }
  }
}