var keyPair;

function loginWithMD5(formName, arrayIndex, usernameSrcName, pwdSrcName, pwdDstName, needToCryptFlagName, keyName) {
	var flag = document.forms[formName].elements[needToCryptFlagName].value;
 	if (flag.length >0) {
		var key = document.forms[formName].elements[keyName].value;
		var md5OfPwdUsername = calculateMD5Value(formName, pwdSrcName, usernameSrcName);
		if (key.length == 0) {
			setEncryptedValue(formName, pwdDstName, md5OfPwdUsername);
		} else {
			setEncryptedValue(formName, pwdDstName, hex_md5(md5OfPwdUsername + key));
		}
		document.forms[formName].elements[pwdSrcName].value = "";
		clearFlag(formName, arrayIndex, needToCryptFlagName);
	}
}

function loginWithRSA(formName, arrayIndex, pwdSrcName, pwdDstName, needToCryptFlagName, keyName, modulusName) {
	var flag = document.forms[formName].elements[needToCryptFlagName].value;
 	if (flag.length >0) {
 		setEncryptedValue(formName, pwdDstName, calculateRSAValue(formName, pwdSrcName, keyName, modulusName));
		document.forms[formName].elements[pwdSrcName].value = "";
		clearFlag(formName, arrayIndex, needToCryptFlagName);
	}
}
 
function calculateRSAValue(formName, pwdName, keyName, modulusName) {
	var pw = document.forms[formName].elements[pwdName].value
	var encExp = document.forms[formName].elements[keyName].value
	var modulus = document.forms[formName].elements[modulusName].value
	if (pw.length == 0 || encExp.length == 0 || modulus.length == 0) {
 		return pw;
	}
	if (!keyPair) {
		setMaxDigits(Math.ceil(modulus.length * 4 * 2 / 16 * 2));
		keyPair = new RSAKeyPair(encExp, "", modulus);
	}
//	keyPair = new RSAKeyPair(encExp, "",  modulus);
	return encryptedString(keyPair, pw);
}

function calculateMD5Value(formName, pwdName, keyName) {
	var pw = document.forms[formName].elements[pwdName].value
	var key = document.forms[formName].elements[keyName].value
	if (key.length == 0) {
		return pw;
	}
	return hex_md5(pw+key)
}

function setEncryptedValue(formName, pwdName, encryptedValue) {
	document.forms[formName].elements[pwdName].value = encryptedValue
}

function raiseFlag(formName, arrayIndex, flagName) {
	document.forms[formName].elements[flagName].value = "1"
}

function clearFlag(formName, arrayIndex, flagName) {
	document.forms[formName].elements[flagName].value = "";
}

function encryptField(formName, arrayIndex, clearTextFieldName, encryptedFieldName, publicExponentFieldName, modulusFieldName) {
	form = document.forms[formName];
	if (!keyPair) {
		modulus = form[modulusFieldName].value;
		setMaxDigits(Math.ceil(modulus.length * 4 * 2 / 16 * 2));
		keyPair = new RSAKeyPair(form[publicExponentFieldName].value, "", modulus);
	}
	clearTextField = form[clearTextFieldName];
	encryptedField = form[encryptedFieldName];
	encryptedField.value = encryptedString(keyPair, clearTextField.value);
	encryptedField.disabled = false;
	clearTextField.disabled = true;
}