    //<![CDATA[
        function sendRequest(oForm, formId, fCall, fSubmit) {
            fSubmit.disabled = true;
            fSubmit.value = 'Please wait ...';
            oForm.p_what.value = fCall;

            var sBody = getRequestBody(oForm);

            var oXHR = zXmlHttp.createRequest();
            oXHR.open("post", oForm.action, true);
            oXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

            oXHR.onreadystatechange = function () {
                if (oXHR.readyState == 4) {
                    if (oXHR.status == 200) {
                        saveResult(oXHR.responseText, formId);
                    } else {
                        saveResult("An error occurred: " + oXHR.statusText, formId);
                    }
                }
            };
            oXHR.send(sBody);
        }

        function encodeNameAndValue(sName, sValue) {
            var sParam = encodeURIComponent(sName);
            sParam += "=";
            sParam += encodeURIComponent(sValue);
            return sParam;
        }

        function getRequestBody(oForm) {

            //array to hold the params
            var aParams = new Array();

            //iterate over each element in the form
            for (var i=0 ; i < oForm.elements.length; i++) {

                //get reference to the field
                var oField = oForm.elements[i];

                //different behavior based on the type of field
                switch (oField.type) {

                    //buttons - we don't care
                    case "button":
                    case "submit":
                    case "reset":
                             break;

                    //checkboxes/radio buttons - only return the value if the control is checked.
                    case "checkbox":
                    case "radio":
                        if (!oField.checked) {
                            break;
                        } //End: if

                    //text/hidden/password all return the value
                    case "text":
                    case "hidden":
                    case "password":
                        aParams.push(encodeNameAndValue(oField.name, oField.value));
                        break;

                    //everything else
                    default:

                        switch(oField.tagName.toLowerCase()) {
                            case "select":
                                aParams.push(encodeNameAndValue(oField.name, oField.options[oField.selectedIndex].value));
                                break;
                            default:
                                aParams.push(encodeNameAndValue(oField.name, oField.value));
                        }
                }

            }

            return aParams.join("&");
        }

        function saveResult(sMessage, formId) {
            var divReturn = document.getElementById("divReturn-" + formId);
            divReturn.innerHTML = sMessage;
        }
    //]]>

