
function GenerateCertificateRequest(certAppletName, prefix)
{
	var errorText;
	var status = false;
	var statusCtrl = document.getElementById(prefix + "_txtAppletState");
	
	try
	{
		if (ValidateFormInputs())
		{
			var applet = document.applets[certAppletName];

			if (IsAppletLoaded(applet))
			{
				if (IsAppletVersionOK(applet, 3.2))
				{
					// inputs			
					var usernameCtrl = document.getElementById(prefix + "_txtUsername");
					var passphraseCtrl = document.getElementById(prefix + "_txtPassphrase");
					var passphraseConfirmationCtrl = document.getElementById(prefix + "_txtConfirmPassphrase");
					var referenceCtrl = document.getElementById(prefix + "_txtReferenceNumber");
					var authorisationCodeCtrl = document.getElementById(prefix + "_txtAuthorisationCode");

					// outputs
					var requestDetailsCtrl = document.getElementById(prefix + "_txtAppletRequestDetails");
					var logCtrl = document.getElementById(prefix + "_txtAppletJavaConsole");
					
					var certRequestDetails = applet.generateRequest(usernameCtrl.value, passphraseCtrl.value, referenceCtrl.value);
					var certStatus = applet.getStatus(); //TODO: Do we need to check this and throw an exception?

					// update form values for postback
					statusCtrl.value = certStatus;
					requestDetailsCtrl.value = certRequestDetails;
					logCtrl.value = applet.getConsoleLog();
					
					// ** the passphrase must not be submitted back to the server. **
					passphraseCtrl.value = "";
					var validationCtrl = document.getElementById(prefix + "_PassphraseRequiredFieldValidator");
					if (validationCtrl != null)
						ValidatorEnable(validationCtrl, false);
						
					passphraseConfirmationCtrl.value = "";
					validationCtrl = document.getElementById(prefix + "_ConfirmNewPasswordRequiredFieldValidator");
					if (validationCtrl != null)
						ValidatorEnable(validationCtrl, false);

					status = true;
				}
				else
				{
					statusCtrl.value = "APPLET_VERSION_FAILURE";
					errorText = GetText("Certify_ErrorTextAppletVersionInvalid", "Your local applet version is no longer supported for certification");
					alert(errorText);
				}
			}
			else
			{
				statusCtrl.value = "APPLET_LOAD_FAILURE";
				errorText = GetText("Certify_ErrorTextAppletFailedToLoad", "You have chosen not to download the digital certification component to your browser.\nIn order to certify you will need to close this browser and\n reconnect to this web site.");
				alert(errorText);
			} 
		}
	}
	catch(e)
	{ 
		//alert(e.message);
		statusCtrl.value = "APPLET_UNKNOWN_FAILURE";
		errorText = GetText("Certify_ErrorTextAppletFatalError", "A fatal error has occured within the certification applet.");
		alert(errorText);
	}

	return status;
}	

function ProcessCertificateResponse(certificateResponse, certAppletName, formId, prefix)
{
	var statusCtrl = document.getElementById(prefix + "_txtAppletState");

	try
	{
		var applet = document.applets[certAppletName];
		var form = document.getElementById(formId);

		if (IsAppletLoaded(applet))
		{
			if(IsAppletVersionOK(applet, 3.2))
			{
				// outputs
				var logCtrl = document.getElementById(prefix + "_txtAppletJavaConsole");

				var certSuccess = applet.processResponse(certificateResponse); //TODO: Check return value?

				statusCtrl.value = applet.getStatus();
				logCtrl.value = applet.getConsoleLog();
				
				// submit form to complete the certification
				form.submit();
			}
			else
			{
				statusCtrl.value = 'APPLET_VERSION_FAILURE';
			}
		}
		else
		{
			statusCtrl.value = 'APPLET_LOAD_FAILURE';
		} 
	}
	catch(e)
	{ 
		statusCtrl.value = 'APPLET_UNKNOWN_FAILURE';
	}
}

function ValidatePassphrase(source, arguments)
{         
    var patterns = new Array();
    patterns[0] = "^.{8,300}$";
    patterns[1] = ".*[0-9]+.*";
    patterns[2] = ".*[A-Z]+.*";
    patterns[3] = ".*[a-z]+.*";
    
    var messages = new Array();
	messages[0] = GetText("Certify_ValidationErrorText9", "The passphrase must be a least 8 and less than 300 characters");
    messages[1] = GetText("Certify_ValidationErrorText10", "The passphrase must contain at least one numeric digit");
    messages[2] = GetText("Certify_ValidationErrorText11", "The passphrase must contain at least one upper case (capital) letter");
    messages[3] = GetText("Certify_ValidationErrorText12", "The passphrase must contain at least one lower case letter");
    
    arguments.IsValid = true;
    for (var i = 0; i < patterns.length; i++) 
    {
        var regex = new RegExp(patterns[i]);
        if (!arguments.Value.match(regex))
        {
            arguments.IsValid = false;
            document.getElementById("certifyView_PassPhraseCustomValidator").innerHTML = "<p class='error-message'>"+ messages[i] + "</p>";
            break;
        }
    }
}
