var forbidden_pwd_list = "1234,admin";
arrforbidden = forbidden_pwd_list.split(",");

function getlevel(password, username, msisdn) {

	var pw = password;
	
	// array with msisdns
	var arrMsisdn = msisdn.split(",");
	
	// array with usernames
	var arrUser = "";
	arrUser = username.split(",");
	
	var user="";
	if (username.length > 6) {
        user = username.substring(username.length - 6, username.length);
    }
    
    arrforbidden = forbidden_pwd_list.split(",");

    var level = 1;
    
    var i = 0;
    if (pw.length == 0) {
        return 0;
    }
    
    if (RegExp('[^\\\\a-zA-Z0-9\.\"\'~#%(){}^|`\,/:;=&?@_\$!<>?\*\+\[\\]\-]', 'g').test(pw)) //[0-9a-zA-Z\+\-\!\"\$#%\'()*,\./:;=\?_@\&amp;\&lt;\&gt;]
	{
	   return 0;
	}
	
    //completely consecutive password               
    var code = '';
    for (i = 0; i < pw.length; i++) {
        if (i == 0) {
            code = pw.charCodeAt(i);
            continue;
        }
        var code_new = pw.charCodeAt(i);
        if (code_new != code + 1) {
        	
        	break;
        }
        else {  
        	code = code_new;
        	
       }
       if (i == pw.length -1) {
        	
        	return 1;
       } 
    }

    // completely reverse consecutive password
    code = '';
    for (i = pw.length - 1; i >= 0; i--) {
        if (i == pw.length - 1) {
            code = pw.charCodeAt(i);
            continue;
        }
        var code_new = pw.charCodeAt(i);
        if (code_new != code + 1) {
            break;
        }
        else {  
        code = code_new;
        }
        if (i == 0) { 
        
        	return 1;
        }
    }

    //all characters are the same
    for (i = 0; i < pw.length; i++) {
        if (i == 0) {
            code = pw.charCodeAt(i);
            continue;
        }
        var code_new = pw.charCodeAt(i);
        if (code_new != code){  
        	break;
        }
        if (i == pw.length - 1) {
        
        	return 1;
        }
    }

    // invalid string username
    var ind3 = pw.toLowerCase().indexOf(username.toLowerCase());
    if (ind3!=-1) {
     		return 1;
    }
    	
    // invalid strings from arrforbidden
    for (i = 0; i < arrforbidden.length; i++) {
        if (pw.toLowerCase() == arrforbidden[i].toLowerCase()) {
            return 1;
        }
    }
    
    // invalid string from user
   	if (pw.toLowerCase() == user.toLowerCase()) {
   		return 1;
   	}
    
    // invalid string msisdn
    var msisdnNormalized="";
    var arrNormalizedMsisdnParam ="";   
       	msisdnNormalized = normalizeMSISDN(pw);
       
       	
	   for (var l = 0; l < arrMsisdn.length; l++) {
	 			var nArrMsisdn = arrMsisdn[l];
	 			var temp = normalizeMSISDN(nArrMsisdn);
	 			if (temp == "49NaN") {
	 				break;
	 			}
	 			if (temp == msisdnNormalized) {
	 			
	 				return 1;
	 			}   	
	    }
	
    // filter invalid string - username - from password 
    var ind = pw.toLowerCase().indexOf(username.toLowerCase());
    if (ind != -1) {
        pw = pw.substring(0, ind) + pw.substring(ind + username.length, pw.length);
    }
	// filter invalid string - from arrforbidden - from password
    
    for (i = 0; i < arrforbidden.length; i++) {
        var index = pw.toLowerCase().indexOf(arrforbidden[i].toLowerCase());
        if (index != -1) {
            pw = pw.substring(0, index) + pw.substring(index + arrforbidden[i].length, pw.length);
         
        }
    }
    // filter invalid string - msisdn - from password
    for (i = 0; i < arrMsisdn.length; i++) {
    	var msisdnNorm = normalizeMSISDN(arrMsisdn[i]);
    	var index = pw.toLowerCase().indexOf(msisdnNorm);
    	if (index != -1) {
            pw = pw.substring(0, index) + pw.substring(index + arrMsisdn[i].length, pw.length);
        }
    }
    
    // filter invalid string - user - from password
   	var index = pw.toLowerCase().indexOf(user.toLowerCase());
   	if (index != -1) {
           pw = pw.substring(0, index) + pw.substring(index + user.length, pw.length);
    }
    
    
    if (pw.length < 8) {
    
        return 1;
    }
    if (pw.length >= 8) {
          level++;
    }
    if (pw.length >= 10) {
         level++;
    }
	
    // identify the sets
    var setCount = 0;
    
    if (RegExp('[a-z]', 'g').test(pw)) {
     
    	setCount++;
    }
    
    if (RegExp('[A-Z]', 'g').test(pw)) {
  
    	setCount++;
    }
    
    if (RegExp('[0-9]', 'g').test(pw)){
  
    	setCount++;
    }
    
    if (RegExp('[\\\\\.\"\'#~{}^|`%(),/:;=&?@_\$!<>\*\+\[\\]\-]', 'g').test(pw)){
		
    	setCount++;
    }
    
    if (setCount < 2) {
        level--;
       
    }
    
    if (setCount > 2) {
        level++;
    }

    //number of different characters
    var sym = new Array(pw.length);
   
    sym[0] = pw.charAt(i);
    var j = 1;
    var k = 0;
    for (i = 0; i < pw.length; i++) {
        for (k = 0; k < j; k++) {
            if (sym[k] == pw.charAt(i)) {
            	break;
            }
        }
        if (k == j) {
            sym[j] = pw.charAt(i);
            j++;
        }
    }
    if (j <= 4) {
    	level--;
    }
    
    if (j >= 6) {
    	level++;
    }
  
    //sequence of 3 or more same characters
   
     for (i = 0; i < pw.length; i++) {
   
        var chr = pw.charAt(i);
        if (RegExp('[\\\\\[\*\+?$()^{}|]', 'g').test(chr)) {
            chr = '\\' + chr;
        }
     
        var result1 = RegExp(chr + '{3}', 'g').test(pw);
        if (result1) {
            level--;
            break;
        }
       
    }

    //consecutive of 3 or more same characters

    for (i = 0; i < pw.length; i++) {
        var cd = pw.charCodeAt(i);
        var chr = pw.charAt(i);
        var cd1 = String.fromCharCode(cd + 1.0);
        var cd2 = String.fromCharCode(cd + 2.0);
        
        if (RegExp('[\\\\\[\*\+?$()^{}|]', 'g').test(chr)) {
            chr = '\\' + chr;
        }
        if (RegExp('[\\\\\[\*\+?$()^{}|]', 'g').test(cd1)) {
            cd1 = '\\' + cd1;
        }
        if (RegExp('[\\\\\[\*\+?$()^{}|]', 'g').test(cd2)) {
            cd2 = '\\' + cd2;
        }

        var result2 = RegExp(chr + cd1 + cd2, 'g').test(pw);
        if (result2) {
     	    level--;
            break;
        }
        // reverse
        result2 = RegExp(cd2 + cd1 + chr, 'g').test(pw);
        if (result2) {
            level--;
            break;
        }

    }
    
    if (level < 2) {
    	level = 2;
    }
    if (level > 4) {
    	level = 4;
    }
	
    return level;
}

function setlevel(password,username,msisdn_nr) {
    
    var pass = password;
    var user = username;
    var msisdn = msisdn_nr;
    var level = getlevel(pass,user,msisdn_nr);
  
    document.images["level"].src = "../images/register/status" + level + ".gif";
}

function isDigit(num) {
	
	if (RegExp('[0-9]', 'g').test(num)){
		return true;
    }
    return false;
}

function normalizeMSISDN(msisdnToNormalize) {

	var msisdn = ""; 
	
	// removing non numeric char from input       
	var len = msisdnToNormalize.length;
	for (var j = 0; j < len; j++) {
			temp = msisdnToNormalize.charAt(j);
			
			if (isDigit(temp)) {
				msisdn = msisdn.concat(temp);
				
			}
	}
	
	// removing leading zeros
	msisdnWithoutZero = removeLeadingZero(msisdn);
	// converting from integer to string
	msisdnWithoutZero = msisdnWithoutZero + "";
	var cc = "49";
	
	if (msisdnWithoutZero[0] == "4" && msisdnWithoutZero[1] == "9") {
		msisdnWithoutZero = msisdnWithoutZero.substring(cc.length);
	}
	
	// again removing leading zeros
	msisdnWithoutZero = removeLeadingZero(msisdnWithoutZero);
	
	msisdnWithoutZero = cc + msisdnWithoutZero;
	
	return msisdnWithoutZero;
}

function removeLeadingZero(msisdn) {
	
	var result ="";
	result = parseInt(msisdn,10);
	
	return result;
}

function hello(parameter) {
	alert("Hello");
	alert("uebergabeparam: " + parameter);
}

function radioVal(names) {
    for (var i=0; i<names.length; i++) {
    		if (names[i].checked) { 
    				return names[i].value;
    		}
    }
 
    return false;
}

function radioValAbsolute(names){
  
  var val = radioVal(names);
  document.regaccount.username.value = val;
}

