var default_lang = 'BG';


function addOption(inputField, inputField2, selectList, lang)
{
	if(!lang)
		lang = default_lang;
	var errorMessage = "";
	var stringText, stringText2;
	var selectElement = document.getElementById(selectList);
	var nextOptionIndex = selectElement.length;
	var textIP = (lang == "BG") ? "IP адрес" : "IP Address";
	var textMask = (lang == "BG") ? "Маска" : "Mask";
	
	stringText = document.getElementById(inputField).value;
	errorMessage += verifyIP(stringText, textIP);
	stringText2 = document.getElementById(inputField2).value;
	errorMessage += verifyMask(stringText2, textMask);

	if(errorMessage == "")
	{
		selectElement.options[nextOptionIndex] = new Option(stringText + '/' + stringText2, nextOptionIndex);
		resetInput();
	}
	else
	{
		document.getElementById(inputField).value = stringText;
		document.getElementById(inputField2).value = stringText2;
		alert(errorMessage);
	}
}

function removeOption(selectList)
{
	var selectElement = document.getElementById(selectList);
	for(var i = 0; i < selectElement.length; i++)
	{
		if(selectElement[i].selected)
		{
			selectElement[i] = null;
		}
	}
	resetInput();
}

function editOption(selectList, hiddenField, hiddenFlag, lang)
{
	if(!lang)
		lang = default_lang;
	var textBtn = (lang == "BG") ? "Редактирай подмрежа" : "Update target";
	var re = "/";
	var selectElement = document.getElementById(selectList);
	for(var i = 0; i < selectElement.length; i++)
	{
		if(selectElement[i].selected)
		{
			var optionText = selectElement[i].text;
			document.getElementById(hiddenField).value = i; /* keeps value of editted option */
			if(optionText.match(re))
			{
				var optionTextArray = optionText.split("/");
				document.getElementById('ip').value = optionTextArray[0];
				document.getElementById('mask').value = optionTextArray[1];
				document.getElementById('btn_ip').value = textBtn;
				document.getElementById(hiddenFlag).value = 1;
			}
			else
			{
				removeOption(selectList);
			}
		}
	}
}

function updateOption(inputField, inputField2, selectList, hiddenField, lang)
{
	if(!lang)
		lang = default_lang;
	var textBtn = (lang == "BG") ? "Добави подмрежа" : "Add target";
	var textIP = (lang == "BG") ? "IP адрес" : "IP Address";
	var textMask = (lang == "BG") ? "Маска" : "Mask";
	var errorMessage = "";
	var stringText, stringText2;
	var selectElement = document.getElementById(selectList);
	var selectedOptionIndex = document.getElementById(hiddenField).value;
	
	stringText = document.getElementById(inputField).value;
	errorMessage += verifyIP(stringText, textIP);
	stringText2 = document.getElementById(inputField2).value;
	errorMessage += verifyMask(stringText2, textMask);
	
	if(errorMessage == "")
	{
		selectElement.options[selectedOptionIndex].text = stringText + '/' + stringText2;
		resetInput();
	}
	else
	{
		document.getElementById(inputField).value = stringText;
		document.getElementById(inputField2).value = stringText2;
		alert(errorMessage);
	}
}

function inputAction(hiddenFlag)
{
	var choice = document.getElementById(hiddenFlag).value;	
	if(choice == 1)
		updateOption('ip', 'mask', 'target_nets', 'op_value');
	else
		addOption('ip', 'mask', 'target_nets');
}

function resetInput(lang)
{
	if(!lang)
		lang = default_lang;
	var textBtn = (lang == "BG") ? " Добави подмрежа " : "Add target";

	document.getElementById('edit_flag').value = null;		
	document.getElementById('ip').value = "";
	document.getElementById('mask').value = "";
	document.getElementById('btn_ip').value = textBtn;
}

/* This script and many more are available free online at 
   The JavaScript Source!! http://javascript.internet.com 
   (modified by tristesse)
 */
function verifyIP (IPvalue, theName, lang)
{
	if(!lang)
		lang = default_lang;
	var text_ip_invalid = (lang == "BG") ? ' не е валиден IP адрес.' : ' is not a valid IP address.';
	var text_ip_special = (lang == "BG") ? ' е специален IP адрес и не може да се ползва тук.' : ' is a special IP address and cannot be used here.';
	var text_ip_private = (lang == "BG") ? ' е вътрешен IP адрес и не може да се ползва тук.' : ' is a private IP address and cannot be used here.';
	errorString = "";
	var ipPattern = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
	var ipArray = IPvalue.match(ipPattern);
	
	if (IPvalue == "0.0.0.0")
		errorString = errorString + theName + ': '+IPvalue+text_ip_special;
	else if (IPvalue == "255.255.255.255")
		errorString = errorString + theName + ': '+IPvalue+text_ip_special;
	else if((ip2Long(IPvalue) > 167772159 && ip2Long(IPvalue) < 184549376) || 
		(ip2Long(IPvalue) > 2886729727 && ip2Long(IPvalue) < 2887778304) || 
		(ip2Long(IPvalue) > 3232235519 && ip2Long(IPvalue) < 3232301056) ||
		(ip2Long(IPvalue) > 2130706431 && ip2Long(IPvalue) < 2130706434))
		errorString = errorString + theName + ': '+IPvalue+text_ip_private;
	
	if (ipArray == null)
		errorString = errorString + theName + ': '+IPvalue+text_ip_invalid;
	else {
		ipArray = ipArray[0].split(".");
		for (var i = 0; i < ipArray.length; i++) {
			thisSegment = ipArray[i];
			if (thisSegment > 255) {
				errorString = errorString + theName + ': '+IPvalue+text_ip_invalid;
				i = 4;
			}
			if ((i == 0) && (thisSegment > 255)) {
				errorString = errorString + theName + ': '+IPvalue+text_ip_special;
				i = 4;
			}
		}
	}
	
	if (errorString != "")
		errorString += "\n";
	
	return errorString;
}

function verifyMask(maskValue, theName, lang) 
{
	if(!lang)
		lang = default_lang;
	var text_mask_invalid = (lang == "BG") ? ' е невалидна маска.' : ' is not a valid mask value!';
	errorString = "";
	var maskPattern = /^(\d{1,2})$/;
	var maskMatch = maskValue.match(maskPattern);
	if(maskMatch == null || (maskValue < 0 || maskValue > 32))
		errorString += theName + ': ' + maskValue + text_mask_invalid + "\n";
	
	return errorString;
}
	
function ip2Long(ip){
    try{
      var sip = ip.split('.');
      var lRet = parseFloat(sip[0] * 256 * 256 * 256)
             + parseFloat(sip[1] * 256 * 256)
             + parseFloat(sip[2] * 256)
             + parseFloat(sip[3]);
      return lRet;
    }
    catch(err){
      return 0;
    }
}

function selectAllOptions(selectList, form, hiddenField)
{   
    if(document.getElementById('start_date'))
		selectAllOptionsDateTime('start_date');
	var selectElement = document.getElementById(selectList);
	selectElement.multiple = true;
	for(var i = 0; i < selectElement.options.length; i++)
	{
		selectElement.options[i].value = selectElement.options[i].text;
		selectElement.options[i].selected = true;
	}
	document.getElementById(hiddenField).value = 1;
	document.getElementById(form).submit();
}


/* password checker */
var commonPasswords = new Array('password', 'pass', '1234', '1246', '123456','admin','god','test'); 
 
var numbers = "0123456789"; 
var lowercase = "abcdefghijklmnopqrstuvwxyz"; 
var uppercase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
var punctuation = "!.@$Ã‚Â£#*()%~<>{}[]"; 
 
function checkPassword(password) { 
 
    var combinations = 0; 
 
    if (contains(password, numbers) > 0) { 
        combinations += 10; 
    } 
 
    if (contains(password, lowercase) > 0) { 
        combinations += 26; 
    } 
 
    if (contains(password, uppercase) > 0) { 
        combinations += 26; 
    } 
 
    if (contains(password, punctuation) > 0) { 
        combinations += punctuation.length; 
    } 
      
    var totalCombinations = Math.pow(combinations, password.length); 
    if (isCommonPassword(password)) { 
        totalCombinations = 75000 
    } 
    var timeInSeconds = (totalCombinations / 200) / 2; 
    var timeInDays = timeInSeconds / 86400 
    var lifetime = 365; 
    var percentage = timeInDays / lifetime; 
 
    var friendlyPercentage = cap(Math.round(percentage * 100), 100); 
    if (totalCombinations != 75000 && friendlyPercentage < (password.length * 5)) { 
        friendlyPercentage += password.length * 5; 
    } 
 
    var progressBar = document.getElementById("progressBar"); 
    progressBar.style.width = friendlyPercentage + "%"; 
 
    if (percentage > 1) { 
        // strong
        progressBar.style.backgroundColor = "#3bce08"; 
        return; 
    } 
	
    if (percentage > 0.5 && percentage < 1) { 
        // so so
        progressBar.style.backgroundColor = "#ffd801"; 
        return; 
    } 
	
    if (percentage > 0.10 && percentage < 0.5) { 
        // weak password 
        progressBar.style.backgroundColor = "ff6600"; 
        return; 
    } 
 
    if (percentage <= 0.10) { 
        // fery week
        progressBar.style.backgroundColor = "ff0000"; 
        return; 
    }
} 
 
function cap(number, max) { 
    if (number > max) { 
        return max; 
    } else { 
        return number; 
    } 
} 
 
function isCommonPassword(password) { 
 
    for (i = 0; i < commonPasswords.length; i++) { 
        var commonPassword = commonPasswords[i]; 
        if (password == commonPassword) { 
            return true; 
        } 
    } 
 
    return false; 
} 
 
function contains(password, validChars) { 
 
    count = 0; 
    for (i = 0; i < password.length; i++) { 
        var char = password.charAt(i); 
        if (validChars.indexOf(char) > -1) { 
            count++; 
        } 
    } 
    return count; 
} 

function showRow(row_id, show){
	var objRow = document.getElementById(row_id).style;
	if(show == 0)
		objRow.display="none";
	else
		objRow.display="block";
}

function onAddScan(hiddenField, formName)
{
	document.getElementById(hiddenField).value = 1;
	document.getElementById(formName).submit();
}

function onDeleteScan(scanId, hiddenField, formName, question, sessionMode)
{
	choice=confirm(question);
	if (choice==true)
	{
		if(sessionMode == true)
			document.getElementById('scan_id').value = scanId - 1;
		else
			document.getElementById('scan_id').value = scanId;
		document.getElementById(hiddenField).value=true;
		document.getElementById(formName).submit();
	}
}

function onEditScan(scanId, hiddenField, formName, sessionMode)
{
	if(sessionMode == true)
		document.getElementById('scan_id').value = scanId - 1;
	else
	{
		document.getElementById('scan_id').value = scanId;
		document.getElementById('scan_id2').value = '';
	}
	document.getElementById(hiddenField).value=true;
	document.getElementById(formName).submit();
}

function onViewScan(scanId, hiddenField, formName)
{
	document.getElementById('scan_id2').value = scanId;
	document.getElementById('scan_id').value = '';
	document.getElementById(hiddenField).value=true;
	document.getElementById(formName).submit();
}

function onViewNessScan(scanHistId, nessScanId, hiddenField, formName)
{
	document.getElementById('scan_id').value = scanHistId;
	document.getElementById('ness_scan_id').value = nessScanId;
	document.getElementById(hiddenField).value=true;
	document.getElementById(formName).submit();
}

function onMarkFalsePos(option, nessScanId, hiddenField, formName)
{
	document.getElementById('mark_false_pos').value = option;
	document.getElementById('ness_scan_id').value = nessScanId;
	document.getElementById(hiddenField).value=true;
	document.getElementById(formName).submit();
}

var openImg = new Image();
openImg.src = "images/plus.png";
var closedImg = new Image();
closedImg.src = "images/minus.png";

function showBranch(branch){
	var objBranch = document.getElementById(branch).style;
	if(objBranch.display=="block")
		objBranch.display="none";
	else
		objBranch.display="block";
	swapImage('I' + branch);
}

function swapImage(img){
	objImg = document.getElementById(img);
	if(objImg.src.indexOf('minus.png')>-1)
		objImg.src = openImg.src;
	else
		objImg.src = closedImg.src;
}

function onScheduleChange(hiddenField, formName, selectList, addOrEdit)
{
	document.getElementById(hiddenField).value=true;
	if(addOrEdit == 1)
		hiddenFieldAddOrEdit = "add_h";
	else
		hiddenFieldAddOrEdit = "edit_h";
	selectAllOptions(selectList, formName, hiddenFieldAddOrEdit);
}

function editOptionDatetime(selectList, hiddenField, hiddenFlag, lang)
{
	if(!lang)
		lang = default_lang;
	var textBtn = (lang == "BG") ? "Редактирай дата и час" : "Update date/time";
	var selectElement = document.getElementById(selectList);
	for(var i = 0; i < selectElement.length; i++)
	{
		if(selectElement[i].selected)
		{
			var optionText = selectElement[i].text;
			document.getElementById(hiddenField).value = i; /* keeps value of editted option */
			document.getElementById('dt').value = optionText;
			document.getElementById('btn_dt').value = textBtn;
			document.getElementById(hiddenFlag).value = 1;
		}
	}
}

function removeOptionDatetime(selectList)
{
	var selectElement = document.getElementById(selectList);
	for(var i = 0; i < selectElement.length; i++)
	{
		if(selectElement[i].selected)
		{
			selectElement[i] = null;
		}
	}
	resetInputDatetime();
}

function resetInputDatetime(lang)
{
	if(!lang)
		lang = default_lang;
	var textBtn = (lang == "BG") ? "Добави дата и час " : "Add date/time";
	document.getElementById('edit_flag_dt').value = null;		
	document.getElementById('dt').value = "";
	document.getElementById('btn_dt').value = textBtn;
}

function addOptionDatetime(inputField, selectList, lang)
{
	if(!lang)
		lang = default_lang;
	var textDateTime = (lang == "BG") ? "Дата и час " : "Date/time";
	var errorMessage = "";
	var stringText;
	var selectElement = document.getElementById(selectList);
	var nextOptionIndex = selectElement.length;
	
	stringText = document.getElementById(inputField).value;
	errorMessage += verifyDatetime(stringText, textDateTime);

	if(errorMessage == "")
	{
		selectElement.options[nextOptionIndex] = new Option(stringText, nextOptionIndex);
		resetInputDatetime();
	}
	else
	{
		document.getElementById(inputField).value = stringText;
		alert(errorMessage);
	}
}

function updateOptionDatetime(inputField, selectList, hiddenField, lang)
{
	if(!lang)
		lang = default_lang;
	var textDateTime = (lang == "BG") ? "Дата и час " : "Date/time";
	var errorMessage = "";
	var stringText;
	var selectElement = document.getElementById(selectList);
	var selectedOptionIndex = document.getElementById(hiddenField).value;
	
	stringText = document.getElementById(inputField).value;
	errorMessage += verifyDatetime(stringText, textDateTime);
	
	if(errorMessage == "")
	{
		selectElement.options[selectedOptionIndex].text = stringText;
		resetInputDatetime();
	}
	else
	{
		document.getElementById(inputField).value = stringText;
		alert(errorMessage);
	}
}

function inputActionDatetime(hiddenFlag)
{
	var choice = document.getElementById(hiddenFlag).value;	
	if(choice == 1)
		updateOptionDatetime('dt', 'start_date', 'op_value_dt');
	else
		addOptionDatetime('dt', 'start_date');
}

function verifyDatetime (dtValue, theName, lang)
{
	if(!lang)
		lang = default_lang;
	var textDateTimeInvalid = (lang == "BG") ? " не са валидни дата и час." : ' is not a valid datetime.'; 
	errorString = "";
	var dtPattern = /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2}):(\d{2})$/;
	var dtArray = dtValue.match(dtPattern);
	
	if (dtArray == null)
		errorString = errorString + theName + ': '+dtValue+textDateTimeInvalid;
	else {
		dtArray = dtArray[0].split(" ");
		dArray = dtArray[0].split("-");
		tArray = dtArray[1].split(":");
		if(dArray[1]>12 || dArray[2]>31 || tArray[0]>23 || tArray[1]>59 || tArray[2]>59 )
			errorString = errorString + theName + ': '+dtValue+textDateTimeInvalid;			
	}
	return errorString;
}

function selectAllOptionsDateTime(selectList)
{
	var selectElement = document.getElementById(selectList);
	//selectElement.multiple = true;
	if(selectElement.options != undefined)
		for(var i = 0; i < selectElement.options.length; i++)
		{
			selectElement.options[i].value = selectElement.options[i].text;
			selectElement.options[i].selected = true;
		}
}

