function URLEncode(str)
{
    // The Javascript escape and unescape functions do not correspond
    // with what browsers actually do...
    var SAFECHARS = "0123456789" +                                  // Numeric
                                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +  // Alphabetic
                                    "abcdefghijklmnopqrstuvwxyz" +
                                    "-_.!~*'()";                                    // RFC2396 Mark characters
    var HEX = "0123456789ABCDEF";

    var plaintext = str;
    var encoded = "";
    for (var i = 0; i < plaintext.length; i++ ) {
            var ch = plaintext.charAt(i);
            if (ch == " ") {
                    encoded += "+";                         // x-www-urlencoded, rather than %20
            } else if (SAFECHARS.indexOf(ch) != -1) {
                    encoded += ch;
            } else {
                    var charCode = ch.charCodeAt(0);
                    if (charCode > 255) {
                            alert( "Unicode Character '" 
                                            + ch 
                                            + "' cannot be encoded using standard URL encoding.\n" +
                                              "(URL encoding only supports 8-bit characters.)\n" +
                                              "A space (+) will be substituted." );
                            encoded += "+";
                    } else {
                            encoded += "%";
                            encoded += HEX.charAt((charCode >> 4) & 0xF);
                            encoded += HEX.charAt(charCode & 0xF);
                    }
            }
    } // for

    return encoded;
};
