function charToNum(inChar) {
	var validChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	if (validChars.indexOf(inChar) == -1)
		return 62;
	else
		return validChars.indexOf(inChar);
}

function NumToChar(inNum) {
	var validChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	if ((inNum >= 0) && (inNum < 62))
		return validChars.charAt(inNum);
	else
		return " ";
}

function HexToDec(inHex) {
	var hexChars = "0123456789abcdef";
	return hexChars.indexOf(inHex.charAt(0)) * 16 + hexChars.indexOf(inHex.charAt(1));
}

function DecToHex(inDec) {
	var hexChars = "0123456789abcdef";
	return hexChars.charAt(Math.floor(inDec / 16)) + hexChars.charAt(inDec % 16);
}

function strip(inStr) {
   	while (inStr.substring(0, 1) == ' ')
		inStr = inStr.substring(1);
   	while (inStr.substring(inStr.length-1, inStr.length) == ' ')
		inStr = inStr.substring(0, inStr.length-1);
   	return inStr;
}

function validate_fields(userForm) {
	var userID = userForm.userID.value;
	var password = userForm.password.value;
	var keyCode = userForm.keyCode.value;
	if (document.getElementById) {
		if (userID == "") {
			document.getElementById('errMsg').childNodes[0].nodeValue = "Error: User ID is blank";
			return false;
		}
		for (i = 0; i < userID.length; i++) {
			if (charToNum(userID.substr(i, 1)) == 62) {
				document.getElementById('errMsg').childNodes[0].nodeValue = "Error: User ID must be alphanumeric";
				return false;
			}
		}
		if (password == "") {
			document.getElementById('errMsg').childNodes[0].nodeValue = "Error: Password is blank";
			return false;
		}
		for (i = 0; i < password.length; i++) {
			if (charToNum(password.substr(i, 1)) == 62) {
				document.getElementById('errMsg').childNodes[0].nodeValue = "Error: Password must be alphanumeric";
				return false;
			}
		}
		if (keyCode == "") {
			document.getElementById('errMsg').childNodes[0].nodeValue = "Error: Key Code is blank";
			return false;
		}
		for (i = 0; i < keyCode.length; i++) {
			if (charToNum(keyCode.substr(i, 1)) == 62) {
				document.getElementById('errMsg').childNodes[0].nodeValue = "Error: Key Code must be alphanumeric";
				return false;
			}
		}
	}
	return true;
}

function encryptData(userForm) {
	var blanks = "                        ";
	var eCodeIdx = 0;
	var eCodeUID = 0;
	var eCodePwd = 0;
	var shiftUID = 0;
	var shiftPwd = 0;
	var uIDChar = 0;
	var pwdChar = 0;
	var keyCodeMD5 = hex_md5(userForm.keyCode.value);
	var RStr = userForm.RStr.value;
	var userID = userForm.userID.value;
	var password = userForm.password.value;
	var passwordMD5 = hex_md5(password);
	var mergeStr = "";
	var EncryptUID = "";
	var EncryptPwd = "";
	if (userID.length < 16)
		userID += blanks.substr(0, 16 - userID.length);
	if (password.length < 16)
		password += blanks.substr(0, 16 - password.length);
	for (i = 0; i < 32; i++) {
		mergeStr += RStr.charAt(i) + keyCodeMD5.charAt(i) + passwordMD5.charAt(i);
	}
	var eCode = hex_md5(mergeStr);
	for (i = 0; i < 16; i++) {
		eCodeUID = HexToDec(RStr.substr(eCodeIdx, 2));
		eCodePwd = HexToDec(eCode.substr(eCodeIdx, 2));
		uIDChar = userID.substr(i, 1);
		pwdChar = password.substr(i, 1);
		shiftUID = (eCodeUID + charToNum(uIDChar)) % 256;
		shiftPwd = (eCodePwd + charToNum(pwdChar)) % 256;
		EncryptUID += DecToHex(shiftUID);
		EncryptPwd += DecToHex(shiftPwd);
		eCodeIdx = (eCodeIdx + 2) % 32;
	}
	return EncryptUID + EncryptPwd;
}

function setFocus() {
	document.getElementById('userID').focus();
}

function processForm(returnForm) {
	userForm = document.loginForm;
	userForm.userID.value = strip(userForm.userID.value);
	userForm.password.value = strip(userForm.password.value);
	userForm.keyCode.value = strip(userForm.keyCode.value);
	if (validate_fields(userForm)) {
		returnForm.rStrRep.value = encryptData(userForm);
		return true;
	}
	else
		return false;
}