var hexchars	= "0123456789ABCDEF";
var okURIchars	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-";

function utf8(wide) 
{
	var c, s;
	var enc	= "";
	var i	= 0;
	while(i < wide.length) {
		c = wide.charCodeAt(i++);
		// handle UTF-16 surrogates
		if (c>=0xDC00 && c<0xE000) continue;
		if (c>=0xD800 && c<0xDC00) {
			if (i>=wide.length) continue;
			s = wide.charCodeAt(i++);
			if (s<0xDC00 || c>=0xDE00) continue;
			c = ((c-0xD800)<<10)+(s-0xDC00)+0x10000;
		}
		// output value
		if (c<0x80) enc += String.fromCharCode(c);
		else if (c<0x800) enc += String.fromCharCode(0xC0+(c>>6),0x80+(c&0x3F));
		else if (c<0x10000) enc += String.fromCharCode(0xE0+(c>>12),0x80+(c>>6&0x3F),0x80+(c&0x3F));
		else enc += String.fromCharCode(0xF0+(c>>18),0x80+(c>>12&0x3F),0x80+(c>>6&0x3F),0x80+(c&0x3F));
	}
	return enc;
}

function toHex(n)
{
	return hexchars.charAt(n>>4) + hexchars.charAt(n & 0xF);
}

function encodeURIComponentNew(value) 
{
	var valueutf8	= utf8(value);
	var enc			= "";
	for (var i= 0; i<valueutf8.length; i++) {
		if (okURIchars.indexOf(valueutf8.charAt(i))==-1)
			enc += "%"+toHex(valueutf8.charCodeAt(i));
		else
			enc += valueutf8.charAt(i);
	}
	return enc;
}

function buildURL(value)
{
	if (value == "") return "";
	if (typeof encodeURIComponent == "function") {
		// Use JavaScript built-in function
		// IE 5.5+ and Netscape 6+ and Mozilla
		return encodeURIComponent(value);
	} else {
		// Need to mimic the JavaScript version
		// Netscape 4 and IE 4 and IE 5.0
		return encodeURIComponentNew(value);
	}
}