
	// Slash2 (www.slash2.nl)
	// Ajax Handling Class
	// (C) 2009, Slash2, Groningen, NL and the respective authors of implemented open-source functions/applications/code
	
	function urlencode (str) {
		// version: 910.813
		// (C) Philip Peterson, Kevin van Zonneveld, AJ, Brett Zamin, travc, Lars Fischer, Ratheous, Joris
		var hexStr = function (dec) { return '%' + (dec < 16 ? '0' : '') + dec.toString(16).toUpperCase(); }; var ret = '', unreserved = /[\w.-]/; str = (str+'').toString(); for (var i = 0, dl = str.length; i < dl; i++) { var ch = str.charAt(i); if (unreserved.test(ch)) { ret += ch; } else { var code = str.charCodeAt(i); if (0xD800 <= code && code <= 0xDBFF) { ret += ((code - 0xD800) * 0x400) + (str.charCodeAt(i+1) - 0xDC00) + 0x10000; i++; } else if (code === 32) { ret += '+'; } else if (code < 128) { ret += hexStr(code); } else if (code >= 128 && code < 2048) { ret += hexStr((code >> 6) | 0xC0); ret += hexStr((code & 0x3F) | 0x80); } else if (code >= 2048) { ret += hexStr((code >> 12) | 0xE0); ret += hexStr(((code >> 6) & 0x3F) | 0x80); ret += hexStr((code & 0x3F) | 0x80); } } } return ret;
	}

	function rand (min, max) {
		// version: 909.322
		// (C) Leslie Hoare, Onno Marsman
		var argc = arguments.length; if (argc === 0) { min = 0; max = 2147483647; } else if (argc === 1) { throw new Error('Warning: rand() expects exactly 2 parameters, 1 given'); } return Math.floor(Math.random() * (max - min + 1)) + min;
	}

	function microtime (get_as_float) {
		// version: 909.322
		// (C) Paulo Ricardo F. Santos
		var now = new Date().getTime() / 1000; var s = parseInt(now, 10); return (get_as_float) ? now : (Math.round((now - s) * 1000) / 1000) + ' ' + s;
	}



