var shortPass = 'weak'
var goodPass = 'good'
var strongPass = 'strong'
var THROTTLE_PERIOD = 300;
var IDLE_MAX = 5*1000;
var latestPassword = "";
var timeIdle = null;
var pwTimeout

function passwordStrength(password,username)
{
    score = 0 
    if (password.length < 6 ) { return shortPass }
    score += password.length * 4
    //password has 1 number
    if (password.match(/(.*[0-9])/))  score += 5 
    //password has 1 symbol
    if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~])/)) score += 5 
    //password has Upper and Lower chars
    if (password.match(/([a-z].*[A-Z])|([A-Z].*[a-z])/))  score += 10 
    //password has number and chars
    if (password.match(/([a-zA-Z])/) && password.match(/([0-9])/))  score += 15 
    //password has number and symbol
    if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([0-9])/))  score += 15 
    //password has char and symbol
    if (password.match(/([!,@,#,$,%,^,&,*,?,_,~])/) && password.match(/([a-zA-Z])/))  score += 15 
    //verifing 0 < score < 100
    if ( score < 0 )  score = 0 
    if ( score > 100 )  score = 100 
    if (score < 48 )  return goodPass
    return strongPass
}


function getInputPassword() {
    return JQ("#inputfield-password").val();
}

function passwordLoop() {
    var fade = JQ('#passwordStrength');  
    if (latestPassword!=getInputPassword()) {
       if (getInputPassword().length>0){ 
        timeIdle = new Date().getTime();
	JQ('#result').html(passwordLookup[passwordStrength(getInputPassword())]);
        JQ('#passwordContent').attr('class',(passwordStrength(getInputPassword())));
    if (fade.is(':animated')) {
      fade.stop().fadeTo(500, 1);
    } else {
      // fade in quickly
      fade.fadeIn(250);
    }
      latestPassword = getInputPassword();
      }   
    }
        if (timeIdle != null){
            var currTime = new Date().getTime()
            if ((currTime - timeIdle)  > IDLE_MAX  ){
                fade.fadeOut(500);
                clearTimeout(pwTimeout);
            }
        }
        pwTimeout = setTimeout("passwordLoop();", THROTTLE_PERIOD);
}
function getDimensions(ele){
    return { height : ele.height(),
        width: ele.width()
    }
    
}
function setupTooltip(ele, toolTip, offsetObj){
	offsetObj = offsetObj || {};
    var offsetY = offsetObj.offsetY || 5;
    var offsetX = offsetObj.offsetX || 0;
    //if (jQuery.browser.msie){
    //    offsetHeight = 15
    //}  
    var dimPassword = getDimensions(ele);
    var posXPassword = ele.offset({ border: true, padding: true }).left; 
    var posYPassword = ele.offset({ border: true, padding: true }).top;
    var dimTooltip = getDimensions(toolTip);
    var bubbleTop = posYPassword -(offsetY+dimTooltip.height);
    var bubbleLeft = Math.floor(dimPassword.width/2)+posXPassword - Math.floor(dimTooltip.width/2) + offsetX;
    //calculate 1/2 width + xposition
    // move tool tip to 1/2 over the posY - 20
    toolTip.css({top:bubbleTop+'px',left:bubbleLeft+'px',position:'absolute'})
    
}
function onPasswordBlur(){
   var fade = JQ('#passwordStrength');
   if (fade.is(':animated')) {
      fade.stop().fadeTo(1000, 0);
    } else {
      fade.fadeOut(1500);
    }
    clearTimeout(pwTimeout);
}
