/* ************************************************************
USAGE: 

You can play with the pwdTest div style to make it go where you want.
 
In this case it sits to the right side of the input

<!-- Code To Add To HTML Form Page -->

<!-- the include -->
<script type="text/javascript" src="scripts/pwdStrength.js"></script>

<!-- the input -->
<input type="text" name="password" id="password" onkeyup="testPassword(document.forms.YourFormName.password.value);">

<!-- the "meter" -->
<div id="pwdTest" style="padding:3px;float:right;font-size:.8em;width:180px;min-width:220;border:1px dashed;margin-top:-40px;">
	Password Strength:<br>
	<span id="meterEmpty" style="padding:0;margin:0;width:100%;background-color:##DC143C;display:block;height:5px;">
	<span id="meterFull" style="padding:0;margin:0;z-index:100;width:0;background-color:##006400;display:block;height:5px;"></span></span>
	<span id="Words" style="font-size:.8em; margin-top;-25px;">Minimum Strength Not Met</span>
</div>		
<!-- the submit button -->
<input disabled type="submit" id =""btnSubmit"">	
<!-- End of HTML -->

===================================
Password Strength Factors and Weightings

password length:
level 0 (3 point): less than 4 characters
level 1 (6 points): between 5 and 7 characters
level 2 (12 points): between 8 and 15 characters
level 3 (18 points): 16 or more characters

letters:
level 0 (0 points): no letters
level 1 (5 points): all letters are lower case
level 2 (7 points): letters are mixed case

numbers:
level 0 (0 points): no numbers exist
level 1 (5 points): one number exists
level 1 (7 points): 3 or more numbers exists

special characters:
level 0 (0 points): no special characters
level 1 (5 points): one special character exists
level 2 (10 points): more than one special character exists

combinatons:
level 0 (1 points): letters and numbers exist
level 1 (1 points): mixed case letters
level 1 (2 points): letters, numbers and special characters 
					exist
level 1 (2 points): mixed case letters, numbers and special 
					characters exist


************************************************************ */
function testPassword(passwd)
{

/*  var description    = new Array();
      description[0] = "Minimum Strength Not Met";
      description[1] = "Weak";
      description[2] = "Improving";
      description[3] = "Strong";
      description[4] = "Strongest";
      description[5] = "Begin Typing";*/
  var description = new Array();
description[0] = "<table><tr><td><table cellpadding=0 cellspacing=2><tr><td height=4 width=30 bgcolor=#ff0000></td><td height=4 width=120 bgcolor=tan></td></tr></table></td><td> &nbsp;&nbsp;<b>Weakest</b></td></tr></table>";
description[1] = "<table><tr><td><table cellpadding=0 cellspacing=2><tr><td height=4 width=60 bgcolor=#990000></td><td height=4 width=90 bgcolor=tan></td></tr></table></td><td> &nbsp;&nbsp;<b>Weak</b></td></tr></table>";
description[2] = "<table><tr><td><table cellpadding=0 cellspacing=2><tr><td height=4 width=90 bgcolor=#990099></td><td height=4 width=60 bgcolor=tan></td></tr></table></td><td> &nbsp;&nbsp;<b>Improving</b></td></tr></table>";
description[3] = "<table><tr><td><table cellpadding=0 cellspacing=2><tr><td height=4 width=120 bgcolor=#000099></td><td height=4 width=30 bgcolor=tan></td></tr></table></td><td> &nbsp;&nbsp;<b>Strong</b></td></tr></table>";
description[4] = "<table><tr><td><table><tr><td height=4 width=150 bgcolor=#0000ff></td></tr></table></td><td> &nbsp;&nbsp;<b>Strongest</b></td></tr></table>";
description[5] = "<table><tr><td><table><tr><td height=4 width=150 bgcolor=tan></td></tr></table></td><td> &nbsp;&nbsp;<b>Begin Typing</b></td></tr></table>";


  var intScore   = 0
  var strVerdict = 0
		
  // PASSWORD LENGTH
  if (passwd.length==0 || !passwd.length)        // length 0
  {
    intScore = -1
  }
  else if (passwd.length>0 && passwd.length<5)   // length between 1 and 4
  {
    intScore = (intScore+4)
  }
  else if (passwd.length>4 && passwd.length<8)   // length between 5 and 7
  {
    intScore = (intScore+6)
  }
  else if (passwd.length>7 && passwd.length<12)  // length between 8 and 15
  {
    intScore = (intScore+8)
  }
  else if (passwd.length>11)                     // length 16 or more
  {
    intScore = (intScore+10)
  }
		
		
  // LETTERS (Not exactly implemented as dictacted above because of my limited understanding of Regex)
  if (passwd.match(/[a-z]/))                     // [verified] at least one lower case letter
  {
    intScore = (intScore+1)
  }

  if (passwd.match(/[A-Z]/))                     // [verified] at least one upper case letter
  {
    intScore = (intScore+5)
  }
		
  // NUMBERS
  if (passwd.match(/\d+/))                                 // [verified] at least one number
  {
    intScore = (intScore+5)
  }
	
  if (passwd.match(/(.*[0-9].*[0-9].*[0-9])/))             // [verified] at least three numbers
  {
    intScore = (intScore+5)
  }
		
  // SPECIAL CHAR
  if (passwd.match(/.[!,@,#,$,%,^,&,*,?,_,~]/))            // [verified] at least one special character
  {
    intScore = (intScore+5)
  }
		

  if (passwd.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/))
  {
    intScore = (intScore+5)
  }
	
  // COMBOS
  if (passwd.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))        // [verified] both upper and lower case
  {
    intScore = (intScore+2)
  }

  if (passwd.match(/([a-zA-Z])/) && passwd.match(/([0-9])/)) // [verified] both letters and numbers
  {
    intScore = (intScore+2)
  }

  // [verified] letters, numbers, and special characters
  if (passwd.match(/([a-zA-Z0-9].*[!,@,#,$,%,^,&,*,?,_,~])|([!,@,#,$,%,^,&,*,?,_,~].*[a-zA-Z0-9])/))
  {
    intScore = (intScore+2)
  }

  if(intScore == -1)
  {
    strVerdict = description[5];
    document.getElementById("meterEmpty").style.width   = "100%";
    document.getElementById("meterFull").style.width    = "0";
  }
  else if(intScore > -1 && intScore < 16)
  {
    strVerdict = description[0];
    document.getElementById("meterEmpty").style.width   = "100%";
    document.getElementById("meterFull").style.width    = "0%";
  }
  else if (intScore > 15 && intScore < 25)
  {
    strVerdict = description[1];
    document.getElementById("meterEmpty").style.width   = "100%";
    document.getElementById("meterFull").style.width    = "25%";
  }
  else if (intScore > 24 && intScore < 35)
  {
    strVerdict = description[2];
    document.getElementById("meterEmpty").style.width   = "100%";
    document.getElementById("meterFull").style.width    = "50%";
  }
  else if (intScore > 34 && intScore < 45)
  {
    strVerdict = description[3];
    document.getElementById("meterEmpty").style.width   = "100%";
    document.getElementById("meterFull").style.width    = "75%";
  }
  else
  {
    strVerdict = description[4];
    document.getElementById("meterEmpty").style.width   = "100%";
    document.getElementById("meterFull").style.width    = "100%";
  }
  document.getElementById("Words").innerHTML= (strVerdict);
}


function new_freecap()
{
  if(document.getElementById)
  {
    thesrc = document.getElementById("freecap").src;
    thesrc = thesrc.substring(0,thesrc.lastIndexOf(".")+4);
    document.getElementById("freecap").src = thesrc+"?"+Math.round(Math.random()*100000);
  } 
  else
  {
    alert("Sorry, cannot autoreload freeCap image\nSubmit the form and a new combination will be loaded");
  }
}
