//
// ************** //
// BONUS SZAMOLAS //
// ************** //

// JELSZO HOSSZ +(n*4)
function hossz(str)
{
	return str.length*4;
}

// NAGYBETUK SZAMA 	+((len-n)*2)
function nagybetuk(str)
{
	var r = new RegExp("[^A-Z]","g");
	var n = str.replace(r,"");
	var p = Number((n.length) ? (str.length-n.length)*2 : 0);
	return p;
}

// KISBETUK SZAMA 	+((len-n)*2)
function kisbetuk(str)
{
	var r = new RegExp("[^a-z]","g");
	var n = str.replace(r,"");
	var p = Number((n.length) ? (str.length-n.length)*2 : 0);
	return p;
}

// SZAMOK +(n*4)
function szamok(str)
{
	var r = new RegExp("[^0-9]","g");
	var n = str.replace(r,"");
	return n.length*4;
}

// TARTALMAZ SZAMOT +(n*2)
function tartszamot(str)
{
	var r = new RegExp("[^0-9]","g");
	var n = str.replace(r,"");
	return n.length*2;
}

// SZABALYOKNAK MEGFELEL +(n*2)
function szabalyos(str)
{
	var s = 0, r;
	// min 6 karakter
	s = (str.length>=6) ? s+=1 : s;
	// van benne nagybetu
	r = new RegExp("[A-Z]");
	s = (r.test(str)) ? s+=1 : s;
	// van benne kisbetu
	r = new RegExp("[a-z]");
	s = (r.test(str)) ? s+=1 : s;	
	// van benne szam
	r = new RegExp("[0-9]");
	s = (r.test(str)) ? s+=1 : s;
	p = (s==4) ? s*2 : 0;
	return p;
}


// ************** //
// MALUS SZAMOLAS //
// ************** //

// CSAK BETU -n
function csakbetu(str)
{
	var r = new RegExp("^[a-zA-Z]+$","g");
	return (r.test(str)) ? -str.length : 0;
}

// CSAK SZAM -n
function csakszam(str)
{
	var r = new RegExp("^[0-9]+$","g");
	return (r.test(str)) ? -str.length : 0;
}

function repeating(str)
{
	var tomb = new Array();
	var a,b,rc=0,rLC=0,rUC=0,rNUM=0,rA=0,r1=0,RLCTMP="",RUCTMP="",RNTMP="";
	var arrPwd = str.replace (/\s+/g,"").split(/\s*/);
	var rk = new RegExp("[a-z]");
	var rn = new RegExp("[A-Z]");
	var rs = new RegExp("[0-9]");
	var sAlphas = "abcdefghijklmnopqrstuvwxyz";
	var sNumerics = "01234567890";

	for(a=0;a<str.length;a++)
	{
		// ISMETLODO KARAKTEREK -(n(n-1))
		for(b=0;b<str.length;b++)
		{
			if (arrPwd[a].toLowerCase() == arrPwd[b].toLowerCase() && a != b) rc++;
		}
		
		// ISMETLODO KISBETUK -(n*2)
		if(rk.test(arrPwd[a]))
		{
			if(RLCTMP!=="") if((RLCTMP+1)==a) rLC++;
			RLCTMP = a;
		}
		
		// ISMETLODO NAGYBETUK -(n*2)
		if(rn.test(arrPwd[a]))	
		{
			if(RUCTMP!=="") if((RUCTMP+1)==a) rUC++;
			RUCTMP = a;
		}

		// ISMETLODO SZAMOK -(n*2)
		if(rs.test(arrPwd[a]))	
		{
			if(RNTMP!=="") if((RNTMP+1)==a) rNUM++;
			RNTMP = a;
		}
	}
	
	// ABC SOROZAT -(n*3)
	for (var a=0; a < 23; a++)
	{
			var sFwd = sAlphas.substring(a,parseInt(a+3));
			var sRev = sFwd.strReverse();
			if (str.toLowerCase().indexOf(sFwd) != -1 || str.toLowerCase().indexOf(sRev) != -1) rA++;
	}

		// 123 SOROZAT -(n*3)
	for (var a=0; a < 8; a++)
	{
		var sFwd = sNumerics.substring(a,parseInt(a+3));
		var sRev = sFwd.strReverse();
		if (str.toLowerCase().indexOf(sFwd) != -1 || str.toLowerCase().indexOf(sRev) != -1) r1++;
	}
		
	
	tomb['ismetchar'] = -rc;
	tomb['ismetkisbetu'] =  -(rLC*2);
	tomb['ismetnagybetu'] = -(rUC*2);
	tomb['ismetszam'] = -(rNUM*2);
	tomb['ismetabc'] = -(rA*3);
	tomb['ismet123'] = -(r1*3);
	return tomb;
}


/* -------------------------------------- */
function pwdmeter(x)
{
	var score = 0;
	var ismet = repeating(x.value);	
	//bonus
	score  = hossz(x.value);
	score += nagybetuk(x.value);
	score += kisbetuk(x.value);
	score += szamok(x.value);
	score += tartszamot(x.value);
	score += szabalyos(x.value);

	// malus
	score += csakbetu(x.value);
	score += csakszam(x.value);
	score += ismet['ismetchar'];
	score += ismet['ismetkisbetu'];
	score += ismet['ismetnagybetu'];
	score += ismet['ismetszam'];
	score += ismet['ismetabc'];
	score += ismet['ismet123'];

	if(!isempty(x.value))
	{
		get("pwdstrength").style.backgroundImage = 'url(/images/passwordmeterbg.gif)';
		score = (score>100) ? 100 : ((score<0) ? 0 : score);
		get("pwdstrength").style.backgroundPosition = parseInt((-(8-1.98))*score)+"px";
		if(score<20)
		{
			get("pwdstrength").innerHTML = "nagyon gyenge ("+score+"%)";
		}
		else if(score>=20 && score<41)
		{
			get("pwdstrength").innerHTML = "gyenge ("+score+"%)";
		}
		else if(score >=41 && score<60)
		{
			get("pwdstrength").innerHTML = "elfogadható ("+score+"%)";
		}
		else if(score >=60 && score < 80)
		{
			get("pwdstrength").innerHTML = "erős ("+score+"%)";
		}
		else if(score >= 80)
		{
			get("pwdstrength").innerHTML = "biztonságos ("+score+"%)";
		}
	}
	else
	{
		get("pwdstrength").innerHTML = "";
		get("pwdstrength").style.background = "none";
	}
}