/******************************************************************************
mkDispError - Display appropriate regerror span
******************************************************************************/

function mkDispError(fld)
{
	SetElementDisplayed ('err-' + fld, true, 'block');
	// EXCEPTION
	if (fld == 'inv-email') fld = 'email';
	//
	SetInputText (fld, '');
}

/******************************************************************************
chkEmailValid - Validate email
******************************************************************************/

function chkEmailValid ()
{
	var email = GetInputText('email');
	var bOk = validateEmail (email);
	if (!bOk)
		mkDispError ('inv-email');
	else
		SetElementDisplayed ('err-inv-email', 0);
}

/******************************************************************************
chkNameAndEmail - Check against duplicate accounts external to the system
******************************************************************************/

function chkNameAndEmail (elem)
{
	var field = elem.id;
	var fieldVal = elem.value;
	
	// validate email if applicable
	if (field == 'email') chkEmailValid();
	
	var	xml = 	'<req>' + 
					mkxmltext (field, 'field') + 
					mkxmltext (fieldVal, 'value') + 
				'</req>';
	SendToDB ('mkChkRegister.php', xml, mkChkdRegister, null, docroot + '_usermgmt/');
}

/******************************************************************************
chkEmail - Check against duplicate accounts internal to the system
******************************************************************************/

function chkEmail ()
{
	chkEmailValid();
	
	var	xml = 	'<req>' + 
					mkxmltext (GetInputText ('formtype'), 'formtype') + 
					mkxmltext (GetInputText ('email'), 'email') + 
				'</req>';
	SendToDB ('mkChkEmail.php', xml, mkChkdRegister, null, docroot + '_usermgmt/');
}

/******************************************************************************
mkChkdRegister - Response from chkNameAndEmail behavior
******************************************************************************/

function mkChkdRegister (responseText)
{
	var	newDom = client.xmlhttp.responseXML;
	var	msg = getxmltext (newDom, 'msg');
	if (msg == 'Nak')
	{
		var errorcode = getxmltext (newDom, 'errorcode');
		var farray = errorcode.split('-');
		var field = farray[1] // username or email
		mkDispError (field);
	}
	else
	{
		SetElementDisplayed ('err-username', 0);
		SetElementDisplayed ('err-email', 0);
	}
}

/******************************************************************************
validateEmail - 
******************************************************************************/

function validateEmail (addr)
{
	var	bOK = false;
	var	pat = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/;
	if (addr.search (pat) == 0) bOK = true;
	return bOK;
}

/******************************************************************************
chkPwdValid - Validate AR25-2 password compliance
******************************************************************************/

function chkPwdValid ()
{
	var pwd = GetInputText ('password');
	// var bOk = validatePassword (pwd);
	var bOk = 1;
	if (!bOk)
		mkDispError ('password');
	else
		SetElementDisplayed ('err-password', 0);
}

/******************************************************************************
chkPwdMatch - Validate passwords match
******************************************************************************/

function chkPwdMatch ()
{
	var	password1 = Trim (GetInputText ('password'));
	var	password2 = Trim (GetInputText ('confirm'));

	if (password1 != password2)
		mkDispError ('confirm');
	else
		SetElementDisplayed ('err-confirm', 0);
}

/******************************************************************************
validatePassword (pass)
	Passwords must adhere to the following guidelines: 
	minimum of 10 characters but cannot exceed 20 characters; 
	must contain at least 2 uppercase characters, 2 lowercase characters, 
		2 numbers, and 2 special characters in accordance with AR25-2; 
	and cannont contain single or double quotes.
******************************************************************************/

function validatePassword (pass)
{
	var	bOK = false;

	var	nCaps = 0;
	var	nLC = 0;
	var	nDigit = 0;
	var	nOth = 0;

	if (pass.length >= 10 && pass.length <= 20)
	{
		var	bAbort = false;
		for (var i = 0; !bAbort && i < pass.length; i++)
		{
			var	ch = pass.charAt (i);
			if (ch == "'" || ch == "\"")
				bAbort = true;
			else if (pwBetween (ch, 'A', 'Z'))
				nCaps++;
			else if (pwBetween (ch, 'a', 'z'))
				nLC++;
			else if (pwBetween (ch, '0', '9'))
				nDigit++;
			else
				nOth++;
		}
		bOK = (!bAbort && nCaps >= 2 && nLC >= 2 && nDigit >= 2 && nOth >= 2);
	}
	return bOK;
}

function pwBetween (a, x, y)
{
	return ((a >= x) && (a <= y));
}

function pwCheckBetween (p, s, e, c)
{
	var	n = 0;
	for (var i = 0; i < p.length; i++)
		if (pwBetween (p.substr (i, 1), s, e)) n++;
	return (n >= c);
}

function pwCheckSpecial (p, c)
{
	var	n = 0;
	for (var i = 0; i < p.length; i++) {
		var	t = p.substr (i, 1);
		if (!pwBetween (t, 'A', 'Z') && !pwBetween (t, 'a', 'z') && 
				!pwBetween (t, '0', '9'))
			n++;
	}
	return (n >= c);
}
