var codeCache = ['2','3','4','5','6','7','8','9','a','y','g','p','b','f','s','w','z','u'];
var code = '';
var codeEncr = '';

function generateCode(numChars) {
	if(code != '') return;
	if(numChars == undefined) numChars = 5;
	for(var i=0; i<numChars; i++) {
		var ind = Math.floor(Math.random() * codeCache.length);
		code = code + codeCache[ind];
	}
	encryptCode();
}

function encryptCode() {
	if(codeEncr != '') return;
	for(var i=0; i<code.length; i++) {
		var char = code.substring(i, i+1);
		codeEncr = char + codeEncr;
	}
}

function getCode(numChars) {
	generateCode(numChars);
	return code;
}

function getCodeEncr(numChars) {
	generateCode(numChars);
	return codeEncr;
}

function writeFlashCode(numChars) {
	if(code == '') generateCode(numChars);
	var flashMovie = 'codeGen.swf';
	var flashHeight = 25;
	var flashWidth = (code.length * 13) + 5;
	var flashBgcolor = '#ffffff';
	document.write('<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH='+flashWidth+' HEIGHT='+flashHeight+'">');
	document.write('<PARAM NAME=movie VALUE="'+flashMovie+'?code='+codeEncr+'"><PARAM NAME=quality VALUE=high><PARAM NAME=bgcolor VALUE='+flashBgcolor+'>');
	document.write('<param name="quality" value="high" />');
	document.write('<param name="salign" value="lt" />');
	document.write('<EMBED src="'+flashMovie+'?code='+codeEncr+'" quality=high salign="lt" bgcolor='+flashBgcolor+' WIDTH='+flashWidth+' HEIGHT='+flashHeight+' TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">');
	document.write('</EMBED></OBJECT>');
}

function writeHiddenField(numChars) {
	document.write('<input type="hidden" name="codeEncr" id="codeEncr" value="' + getCodeEncr(numChars) + '" />');
}

function testCode(theElem) {
	return (theElem.value != '' && theElem.value == codeEncr);
}