var shortPass 	= 'Zu kurz!';
var longPass 	= 'maximal 20 Zeichen';
var badPass 	= 'Schwach';
var goodPass 	= 'Stark'; 
var strongPass 	= 'Sehr stark';
var noNumber 	= 'min. eine Zahl';
var noLetter 	= 'min. ein Buchstabe';
function passwordStrength(password) {
	
	var div = new Array();
	div[0] = '<div class="graph';
	div[1] = '"><span class="textur minifont">';
	div[2] = '</span><span class="gesamtbar"><span id="gesamt" class="bar minifont minifont" style="width: 100%; solid #000000; background:none;"></span></span></div>';
	
	// check length
    if (password.length < 6 )  { return div[0]+div[1] + shortPass + div[2]; }
	if (password.length > 20 ) { return div[0]+div[1] + longPass + div[2]; }
	// check num
	if (!password.match(/(.*[0-9])/)) { return div[0]+div[1] + noNumber + div[2]; }
	// check char
	if (!password.match(/.*[a-zA-Z]/)) {return div[0]+div[1] + noLetter + div[2]; }

	score = 0;
	score += password.length * 5;
    score += ( checkRepetition(1,password).length - password.length ) * 1;
    score += ( checkRepetition(2,password).length - password.length ) * 1;
    score += ( checkRepetition(3,password).length - password.length ) * 1;
    score += ( checkRepetition(4,password).length - password.length ) * 1;
    score += ( checkRepetition(5,password).length - password.length ) * 1;
    score += ( checkRepetition(6,password).length - password.length ) * 1;
    if (password.match(/(.*[0-9].*[0-9].*[0-9])/)) {  score += 20; }
    else if (password.match(/(.*[0-9].*[0-9])/)) {  score += 15; } 
    else if (password.match(/(.*[0-9])/)) {  score += 10; }
    if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) { score += 20; }
    else if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~].*[!,@,#,$,%,^,&,*,?,_,~])/)) { score += 15; }
    else if (password.match(/(.*[!,@,#,$,%,^,&,*,?,_,~])/)) { score += 10; }
    if (password.match(/^\w+$/) || password.match(/^\d+$/) ) { score -= 10; }
    
    if ( score < 0 ) { score = 0; } 
    if ( score > 100 ) { score = 100; } 
    if (score < 45 ) { return div[0] + ' pbad' + div[1] + badPass + div[2]; }
    if (score < 80 ) { return div[0] + ' pgood' + div[1] + goodPass + div[2]; }
    return div[0] + ' pstrong' + div[1] + strongPass + div[2];
}
function checkRepetition(pLen,str) {
    res = "";
    for ( i=0; i<str.length ; i++ ) {
        repeated=true;
        for (j=0;j < pLen && (j+i+pLen) < str.length;j++)
            repeated=repeated && (str.charAt(j+i)==str.charAt(j+i+pLen));
        if (j<pLen) { repeated=false; }
        if (repeated) {
            i+=pLen-1;
            repeated=false;
        }else {
            res+=str.charAt(i);
        }
    }
    return res;
}
