function hashcash(id) {
//0:030829:foo123456789:rand

	var r = random_str();
	var d = new Date();
	var year = String(d.getFullYear());
	year = year.substr(2);
	var month = String(d.getMonth());
	if (month.length == 1)
		month = "0" + month;
	var day = String(d.getDate());
	if (day.length == 1)
		day = "0" + day;
		
	var date_str = year + month + day;

	//window.alert("starting");

	while (1) {

		var x = hex_sha1('0:' + date_str + ':' + id + ':' + r);
		//alert(x);
		//if ((x.charAt(39) == '0') && (x.charAt(38) == '0') && (x.charAt(37) == '0') && (x.charAt(36) == '0') && (x.charAt(35) == '0') && (x.charAt(34) == '0') && (x.charAt(33) == '0') && (x.charAt(32) == '0') && (x.charAt(31) == '0') && (x.charAt(30) == '0'))
		//	break;

		if (x.slice(38) == '00')
			break;
		r = inc_random_str(r);
	}
	//alert("done! " + '0:' + date_str + ':' + id + ':' + r);
//	window.alert(r);
//	window.alert(hex_sha1(r).length);
//	window.alert(r = inc_random_str(r));
//	window.alert(hex_sha1(r).length);
	return '0:' + date_str + ':' + id + ':' + r;
}

function random_str() {
	return String.fromCharCode(rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr(),rchr());
}

function rchr() {
	return Math.floor(Math.random() * 66) + 60;
}

function inc_random_str(s) {
	var i = 0;
	var out = '';
	for (i = 0; i < s.length; i++) {
		var tmp = s.charCodeAt(i) + 1;
		if (tmp > 126) {
			tmp = 60;
			out += String.fromCharCode(tmp);
			continue;
		} else {
			out += String.fromCharCode(tmp);
			out += s.slice(i + 1);
			return out;
		}
	}
}
