﻿var nCrackrate = 1000;		// Anzahl möglicher Versuche das Passwort zu Knacken pro Sekunde
var nTreshholddays = 365 * 10;	// Schwellwert, ab wann das Passwort als Sicher gilt
var nSteps = 10;		// Anzahl der Schritte, die im CSS angehangen werden

function contains(strText, strPattern)
{
	for (i = 0; i < strText.length; i++)
	{
		if (strPattern.indexOf(strText.charAt(i)) > -1) return true;
	}
	return false;
}

function checkPass(strPass, strId, strClassname, strTextId, aTexts, mindlength, mindtext, verbot_pass, verbtext, hinwtext)
{
	nCombinationCount = 0;

	strToCheck = "0123456789";			// überprüfen ob Ziffern vorkommen
	zahlen     = 0;
	if (contains(strPass, strToCheck))
  {
    zahlen++;
    nCombinationCount += strToCheck.length;
  }
	strToCheck = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";	// überprüfen ob kleine Buchstaben vorkommen
	kl_buchst  = 0;
	if (contains(strPass, strToCheck))
  {
    kl_buchst++;
    nCombinationCount += strToCheck.length;
  }
	son_zeich  = 0;
	strToCheck = ",;:-_=+\|//?^&!.@$£#*()%~<>{}[]";// übersprüfen ob Sonderzeichen vorkommen
	if (contains(strPass, strToCheck))
  {
    son_zeich++;
    nCombinationCount += strToCheck.length;
  }

	var nDays = ((Math.pow(nCombinationCount, strPass.length) / nCrackrate) / 2) / 86400;	// Wieviele Tage benötigt man?
	var nStrongness = Math.round(nDays / nTreshholddays * 100);				// Stärke errechnen
	if (nStrongness < (strPass.length * 5)) nStrongness += strPass.length * 5;		// Zeichenlänge für Stärke berücksichtigen
	if (nStrongness > 100) nStrongness = 100;						// Max 100% zulassen
	nStrongness = Math.round(nStrongness / (100 / nSteps));					// Max Schritte

  oId = document.getElementById(strId);

	otId = document.getElementById(strTextId);

  a = 0;
  for(y = 0; y < verbot_pass.length; y++)
  {
    if(strPass == verbot_pass[y])
    {
      a++;
    }
  }
  
	if (aTexts)
	{
    if (strPass.length < mindlength)
    {
      oId.className = "strong_0";
      otId.innerHTML = mindtext;
    }
    else if(a >= 1)
    {
      oId.className = "strong_0";
      otId.innerHTML = verbtext;
    }
    else if (zahlen == 0 || kl_buchst == 0 || son_zeich == 0)
    {
      oId.className = "strong_0";
      otId.innerHTML = hinwtext;
    }
    else
    {
      oId.className = strClassname + "-" + nStrongness;
      nKey = Math.round((aTexts.length - 1) / nSteps * nStrongness);
      otId.innerHTML = aTexts[nKey];
    }
	}
}

function vergleich_pass(ok, falsch, feld1, feld2, feld3)
{
  if(document.getElementById(feld1).value == document.getElementById(feld2).value)
  {
    document.getElementById(feld3).innerHTML = "<b><font color='#00FF00'>" + ok + "</font></b>";
  }
  else
  {
    document.getElementById(feld3).innerHTML = "<b><font color='#FF0000'>" + falsch + "</font></b>";
  }
}

function check_username(falsch, value, verboten, fehler_username)
{
  nCombinationCount = 0;
  zeichen = "<>|,;.:-_#'+*~´`?\=})]([/{&%$§³²!^° \"üöä";
  if(contains(value,zeichen)) nCombinationCount += + zeichen.length;
  if(nCombinationCount >= 1)
  {
    document.getElementById("check_name").innerHTML = "<b><font color='#FF0000'>" + falsch + "</font><b>";
  }
  else
  {
    document.getElementById("check_name").innerHTML = "";
  }
  for(i = 0; i < verboten.length; i++)
  {
    if(value == verboten[i])
    {
      document.getElementById("check_name").innerHTML = "<b><font color='#FF0000'>" + fehler_username + "</font><b>";
    }
  }
}

function check_number(falsch,value)
{
  nCombinationCount = 0;
  zeichen = "<>|,;.:-_#'+*~´`?\=})]([/{&%$§³²!^° \"";
  if(contains(value,zeichen)) nCombinationCount += + zeichen.length;
  zeichen = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  if(contains(value,zeichen)) nCombinationCount += + zeichen.length;
  zeichen = "abcdefghijklmnopqrstuvwxyzß";
  if(contains(value,zeichen)) nCombinationCount += + zeichen.length;
  if(nCombinationCount >= 1)
  {
    document.getElementById("check_plz").innerHTML = "<b><font color='#FF0000'>" + falsch + "</font><b>";
  }
  else
  {
    document.getElementById("check_plz").innerHTML = "";
  }
}