	// create a list of all available characters
	// uppercase 
	uc = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	// lowercase
	lc = "abcdefghijklmnopqrstuvwxyz";
	// numbers
	num = "0123456789";
	// symbols acceptable in most passwords
	sym = "!#%&'()*+,-./~:;<=>?@[\]^_`{|}";
	
	// generates a random character
	function get_random_char()
	{
		possible_characters = "";
		
		// check to see which boxes have been selected
		if (document.getElementById("ucletters").checked == true)
			possible_characters += uc;
		if (document.getElementById("lcletters").checked == true)
			possible_characters += lc;
		if (document.getElementById("numbers").checked == true)
			possible_characters += num;
		if (document.getElementById("symbols").checked == true)
			possible_characters += sym;
		
		// return new random character
		return possible_characters.charAt( Math.floor(Math.random()*possible_characters.length) );
	}
	// generates a password of certain length
	function generate_password()
	{
		pass = "";
		
		// get new characters for the length specified
		// *** make sure that symbols are not used as the initial character
		for (i=0;i<=document.getElementById("wordlength").selectedIndex;i++)
		{
			ch = get_random_char();
			if (i==0 && (sym.indexOf(ch)!=-1 || num.indexOf(ch)!=-1))
				i--;
			else
				pass += ch;
		}
		
		// display the newly created password
		document.getElementById("password").value=pass;
	}
	
	function practice_password()
	{
		pass = document.getElementById("password").value;
		for (i=0;i<=pass.length;i++)
		{
			user_entry = prompt("每敲对一次密码，我们都会减少一个字符(从头部开始)。 还有"+(pass.length-i+1)+" 次!\n密码是: "+((i==pass.length) ? "[enter entire password now]" : pass.substring(i)),"");
			if (user_entry != null && user_entry != pass)
			{
				alert("密码不对，请重新输入。");
				i--;
			}
			else if (user_entry == null)
				break;
			
		}
		alert("别灰心，别放弃。如果你想锻炼，随时光临。");
	}