generate password

by Shin Okada

HTML

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<button type="button" class="btn btn-default" aria-label="Left Align">
        <a href="javascript:void(0);" id="generate_password">
          <span class="glyphicon glyphicon-lock" aria-hidden="true"></span>
          Generate Password        </a>
      </button>

CSS

#generatePasswordWindow {
	position: absolute;
	display: none;
	height: 155px;
	width: 300px;
	background-color: #E0E2F3;
	border: 1px solid #CCCCCC;
	top: 300px;
	left: 200px;
	z-index: 100;
	padding: 10px;
}

#generatePasswordWindow table {
	width: 100%;
}

#generatePasswordWindow table td {
	border-bottom: 0px;
}

#generatePasswordWindow table .right {
	text-align: right;
}

JavaScript

$(document).ready(function(){  

	// Create objects
	var winObj = $('#generatePasswordWindow');
	var newPassObj = $('#gpPassword');	// Object to show newly generated password	
	
	// Password generation option objects
	var uppercaseFlag = $(':checkbox[name=uppercase]');
	var numericFlag = $(':checkbox[name=numeric]');
	var symbolFlag = $(':checkbox[name=symbols]');
	var inputLengthObj  = $(':input[name=length]');	// Object which stores password length

	// Possible Characters
	var lowercaseChars = "abcdefghijklmnopqrtsuvwxyz";
	var symbolChars    = "!£$%&_+-=@~#<>?";

    // When the user clicks on the 'Generate Password' toggle window
    $('#generate_password').click(function(){
		winObj.show();
		generate();
	});
	
	// Close window when user clicks close
	$('#gpCloseWindow').click(function(){winObj.hide();});
	
	// Copy passwords to main form and close window
	$('#gpApply').click(function(){
		$('input[name=password]').val(newPassObj.text());
		$('input[name=confirm_password]').val(newPassObj.text());
		winObj.hide();
	});
	
	// Generate new password
	$('#gpGenerateNew').click(function(){generate();});
	
	// When the user edits the length make sure it is a number and between 1 and 12
	inputLengthObj.keyup(function(){
		if((this.value <=0 || this.value > 16) && this.value != ''){
			alert("Invalid password length");
			this.value = '12';
		}
	});
	
	// Generate a new password
	function generate()
	{
		var string = '';
		// Loop over length of requested password
		for(i=0;i<inputLengthObj.val();i++)
		{
			// Randomly select either alpha/numeric/symbol
			switch(randNum(3))
			{
				case 1:
					// Numeric
					if(numericFlag.is(':checked'))
						string += randNum(9);
					else
						i--;
					break;
				case 2:
					// Alpha
					switch(randNum(2))
					{
						case 1:
							// Uppercase
							if(uppercaseFlag.is(':checked'))
								string +=...