function refer(cgiURL) {
	r = document.referrer;
	if (r == parent.document.URL) r = top.document.referrer;
	t = document.title;
	tc = t.split(/:\s+/, 2);
	if (tc[1]) t = tc[1];
	t = encodeURL(t);
	document.write('<script type="text/javascript" src="' + cgiURL + '?' + document.URL + '%09%09' + r + '%09%09' + t + '"></scr' + 'ipt>');
}

// thanks a lot
// http://www.cresc.co.jp/tech/java/URLencoding/JavaScript_URLEncoding.htm
/*	Function Equivalent to java.net.URLEncoder.encode(String, "UTF-8")
	Copyright (C) 2002, Cresc Corp.
	Version: 1.0
*/
function encodeURL(str){
	var s0, i, s, u;
	s0 = "";				// encoded str
	for (i = 0; i < str.length; i++){	// scan the source
		s = str.charAt(i);
		u = str.charCodeAt(i);			// get unicode of the char
		if (s == " "){s0 += "+";}		// SP should be converted to "+"
		else {
			if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))){ 	  // check for escape
				s0 = s0 + s;			// don't escape
			}
			else {					// escape
				if ((u >= 0x0) && (u <= 0x7f)){ 	// single byte format
					s = "0"+u.toString(16);
					s0 += "%"+ s.substr(s.length-2);
				}
				else if (u > 0x1fffff){ 	// quaternary byte format (extended)
					s0 += "%" + (oxf0 + ((u & 0x1c0000) >> 18)).toString(16);
					s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);
					s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
					s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
				}
				else if (u > 0x7ff){		// triple byte format
					s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);
					s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
					s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
				}
				else {						// double byte format
					s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);
					s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
				}
			}
		}
	}
	return s0;
}
