/*
 * passwords.js
 * purpose: provide client-side validation of password.
 *          Password should be 8-character word having at least 1 alphabetic,
 *          1 numeric character.
 * dependencies: prototype.js
 */
Object.extend( String.prototype, 
{ 	
	containsForbiddenChar: function(){
	  var forbidden = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
	  var found = false;
	  for (var i = 0; i < this.length; i++){
		  if( forbidden.indexOf( this.charAt(i)) != -1 ){
			  found = true;
			  break;
		  }
	  }
	  return ( found );
	},
	
	containsChar: function( charSet ){
		if ( charSet.length ){
			for ( var n = 0; n < charSet.length; n++ ){
				var ch = charSet.charAt(n);
				if ( this.indexOf( ch ) > -1 ){
//					console.log( this + ".containsChar( " + charSet + " )? >> true" );
					return ( true );				
				}
			}
		}
//		console.log( this + ".containsChar( " + charSet + " )? >> false" );
		return ( false );
	},
	
	containsAlpha: function(){
		var ALPHA = "abcdefghijklmnopqrstuvwxyz";
		ALPHA += ALPHA.toUpperCase();
		return ( this.containsChar( ALPHA ) );		
	},

	containsDigit: function(){
		var DIGIT = "0123456789";
		return ( this.containsChar( DIGIT ) );		
	}
} );  


function isEmptyString( s ){
  return ( null == s || 0 == s.length);
}

function checkPasswordModifyPage( pwd1, pwd2 ){
	pwd1Empty = !pwd1 || 0==pwd1.length;
	pwd2Empty = !pwd2 || 0==pwd2.length;
	if ( pwd1Empty && pwd2Empty ){
		return ( true );	
	} else {
		return checkPassword( pwd1, pwd2 );
	}
}

function checkPassword( pwd1, pwd2 ){
	
	// check for minimum length and match
	var lengthOk = ( pwd1 && pwd1.length >= 8 && pwd1.length <= 14 );
	var matchOk  = ( pwd1 == pwd2 );
	var hasAlphaAndDigit = ( pwd1.containsAlpha() && pwd1.containsDigit() );
	var hasIllegalChar = pwd1.containsForbiddenChar();
	var ok = ( lengthOk && matchOk && hasAlphaAndDigit && !hasIllegalChar);
	
	// if not valid, show user the reason...
	if ( !ok ){
		var msg = "The password you submitted is not valid:\n";
		if ( !lengthOk ){
			msg += "* Passwords must be 8-14 characters.\n";
		}
		if ( !matchOk ){
			msg += "* The passwords given do not match each other.\n";
		}
		if ( !hasAlphaAndDigit ){
			msg += "* Your password must contain at least 1 number and 1 letter.\n";
		}	
		if ( hasIllegalChar ){
			msg += "* Passwords must not contain these characters: !@#$%^&*()+=-[]\\\';,./{}|\":<>?\n";
		}	

//		console.log( "Password validation message: " + msg );
		if ( msg.length > 0 )
			alert( msg );
	}
	return ( ok );
}