function urlencode(plaintext)
{
	// 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 encoded = "";
		var encoded_a = new Array();
		var ch;
		var l = plaintext.length;
		var j = 0;
		for (var i = 0; i < l; i++ ) {
			ch = plaintext.charAt(i);
			if (ch == " ") {
				encoded_a[j++] = "+";		// x-www-urlencoded, rather than %20
			} else if (SAFECHARS.indexOf(ch) != -1) {
				encoded_a[j++] = ch;
			} else {
				var charCode = ch.charCodeAt(0);
				if (charCode > 255) {
					if (charCode < 2048) {
						encoded_a[j++] = String.fromCharCode((charCode >> 6) | 192);
						encoded_a[j++] = String.fromCharCode((charCode & 63) | 128);
					}
					else {
						encoded_a[j++] = String.fromCharCode((charCode >> 12) | 224);
						encoded_a[j++] = String.fromCharCode(((charCode >> 6) & 63) | 128);
						encoded_a[j++] = String.fromCharCode((charCode & 63) | 128);
					}
				/*
					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_a[j++] = "%";
					encoded_a[j++] = HEX.charAt((charCode >> 4) & 0xF);
					encoded_a[j++] = HEX.charAt(charCode & 0xF);
				}
			}
		} // for
	return encoded_a.join('');
};

function urldecode(encoded)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
};

function trim(sInString) {
  sInString = sInString.replace( /^\s+/g, "" );// strip leading
  return sInString.replace( /\s+$/g, "" );// strip trailing
};

function create_args(a) {
	n = a.length;
	r = a[0]+"="+urlencode(v(a[0]));
	for (x=1;x<n;x++) {
		r += "&"+a[x]+"="+urlencode(v(a[x]));
	}
	return urlencode(r);
};

function java_create_args() {
	n = arguments.length;
	r = urlencode(arguments[0]);
	for (x=1;x<n;x++) {
		r += "&"+urlencode(arguments[x]);
	}
	return urlencode(r);
};

function create_args_urlencode(a) {
	n = a.length;
	r = a[0]+"="+v(a[0]);
	for (x=1;x<n;x++) {
		r += "&"+a[x]+"="+v(a[x]);
	}
	return urlencode(r);
};

function create_args_encodeURI(a) {
	n = a.length;
	r = a[0]+"="+v(a[0]);
	for (x=1;x<n;x++) {
		r += "&"+a[x]+"="+v(a[x]);
	}
	return encodeURI(r);
};