﻿var pwType = "sha512";

function rnaTestPasswordHashType() {
	if (typeof (loginConfig) !== 'undefined') {
		var username = $(loginConfig.usr).value;

		var url = "/Login.aspx?u=" + username;
		new Ajax.Request(url, {
			method: 'post',
			onSuccess: function (transport) {
				var json = transport.responseText.evalJSON(true);
				pwType = json.passwordType;
			}
		});

	}
	else {
		alert("Login configuration not found");
	}
}


function rnaToolsetLogin() {
	if (typeof (loginConfig) !== 'undefined') {

		var username = $(loginConfig.usr).value;
		var password = $(loginConfig.pw).value;
		var shaObj = new jsSHA(password, "ASCII");
		var singleHashedSha = shaObj.getHMAC(username.toLowerCase().reverse(), "ASCII", "SHA-512", "HEX").toUpperCase()
		var shaSecObj = new jsSHA(singleHashedSha, "ASCII");
		var doubleHashedSha = shaSecObj.getHMAC(loginConfig.xsess, "ASCII", "SHA-512", "HEX").toUpperCase();
		var hash = EncodePassword(password, loginConfig.xsess);

		var subsitute = "";
		for (var x = 0; x < password.length; x++) {
			subsitute += "x";
		}
		$(loginConfig.pw).value = subsitute;

		if (pwType == "md5") {
			$(loginConfig.hfs).value = singleHashedSha;
			$(loginConfig.hfm).value = hash;
		}
		else {
			$(loginConfig.hfs).value = doubleHashedSha;
		}

	}
	else {
		alert("Login configuration not found");
	}
}


function EncodePassword(plainPassword, challenge) {
	var spMd5 = hex_md5(plainPassword);
	var a, b, c;
	var hash;
	if (challenge == "") {
		alert("Unable to generate secure password check. Please contact the system administrator.");
		return;
	}
	for (var i = 0; challenge.length < 32; i++) {
		challenge = challenge + "q" + challenge;
	}
	challenge = challenge.slice(0, 32);
	hash = "";
	for (var i = 0; i < 32; i++) {
		a = parseInt(challenge.charCodeAt(i));
		b = parseInt(spMd5.charCodeAt(i));
		c = String(a ^ b);
		hash = hash + c;
	}
	spSecure = hex_md5(hash);
	return spSecure;
}

if (typeof String.prototype.reverse !== 'function') {
	String.prototype.reverse = function () { return this.split("").reverse().join(""); }
}
