


var login_errorMessages;


// **** Event handlers ****

function login_onload(){
	document.getElementById("header_with_login").style.display = "block";
	login_errorMessages = new Array();	
	var request = createRequest();
	var params = "method=onload&url=" + location.pathname;
	request.open("POST", "/MicrositeLogin.bsci", true);
	request.onreadystatechange = function(){login_onload_callback(request);};
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.send(params);
}

function login_login(){
	var email = document.getElementById("login_email_input").value;
	var password = document.getElementById("login_password_input").value;
	
	// RAE
	// Confirm Username and Password are entered before continuing
	if(email == "" || password== "")
	{
		// Both values are not present
		var msg = document.getElementById("login_invalid").innerHTML;
		alert(msg);
		return;
	}

	var url = location.pathname;
	var params = "email=" + email + "&password=" + password + "&method=login&url=" + url;

	var request = createRequest();
	request.open("POST", "/MicrositeLogin.bsci", true);
	request.onreadystatechange = function(){login_login_callback_function(request);};
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.send(params);

}

//RAE
function login_clear()
{
	document.getElementById("login_email_input").value = "";
	document.getElementById("login_password_input").value = "";
	document.getElementById("cb_accepted").checked == 0;
}

function login_clear_registration()
{
	var login_registration_inputs_parent = document.getElementById("login_registration_box_right");
	var inputs = getElementsByClassName(login_registration_inputs_parent, "login_registration_field_input");
	for (var i = 1; i < inputs.length; i++){
		inputs[i].value = '';
	}
}


function login_logout(){
	var url = location.pathname;
	var params = "method=logout&url=" + url;

	var request = createRequest();
	request.open("POST", "/MicrositeLogin.bsci", true);
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.send(params);

	var cancelUrl = document.getElementById("login_cancel_url").innerHTML;
	if (cancelUrl == ""){
		login_loginPopupState();
		login_resize_overlay();
		dhtmlHistory.add("loginPopupState");
	} else {
		window.location = cancelUrl;
	}
}

function login_submit_reset_pass(){
	var url = location.pathname;
	var password = document.getElementById("login_password_input").value;
	var reenterPass = document.getElementById("login_password_reenter_input").value;
	var email = document.getElementById("login_email_input").value;
	var params = "method=submitResetPass&password=" + password + "&reenterPass=" + reenterPass + "&email=" + email + "&url=" + url;
	
	var request = createRequest();
	request.open("POST", "/MicrositeLogin.bsci", true);
	request.onreadystatechange = function(){login_submit_reset_pass_callback(request);};
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.send(params);
}

function login_open_edit_registration(){

	var url = location.pathname;
	var params = "method=openEditRegistration&url=" + url;

	var request = createRequest();
	request.open("POST", "/MicrositeLogin.bsci", true);
	request.onreadystatechange = function(){login_open_edit_registration_callback(request);};
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.send(params);	
}

function login_submit_edit_registration(){

	if(login_validate_page()){
		var url = location.pathname;
		var params = "method=submitEditRegistration&url=" + url + login_getRegistrationData();

		var request = createRequest();
		request.open("POST", "/MicrositeLogin.bsci", true);
		request.onreadystatechange = function(){login_submit_edit_registration_callback(request);};
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		request.setRequestHeader("Content-length", params.length);
		request.setRequestHeader("Connection", "close");
		request.send(params);
	} else {
		login_displayErrors();
	}
}

function login_confirm_edit_registration(){
	login_showPageState();
	dhtmlHistory.add("showPageState");
}

function login_open_create_registration(){
	// Check if the user must accept the registration disclaimer
	// IF the checkbox is not present (null), it is not required
	if(document.getElementById("accepted")== null || document.getElementById("accepted").value == "true")
	{
		dhtmlHistory.add("createRegistrationState");
		login_createRegistrationState();
	}
	else
	{
		// Did not accept.  Alert them
		var msg = document.getElementById("register_accept_disc").innerHTML;
		alert(msg);
	}
}

function login_submit_create_registration(){

	if (login_validate_page()){
		var url = location.pathname;
		var registrationType = document.getElementById("login_registration_type").innerHTML;
		var params = "method=submitCreateRegistration&url=" + url + "&registrationType=" + registrationType + login_getRegistrationData();

		var request = createRequest();
		request.open("POST", "/MicrositeLogin.bsci", true);
		request.onreadystatechange = function(){login_submit_create_registration_callback(request);};
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		request.setRequestHeader("Content-length", params.length);
		request.setRequestHeader("Connection", "close");
		request.send(params);
	} else {
		login_displayErrors();
	}

}

function login_confirm_create_registration(){
	
	login_clearMessages();
	login_clearRegistrationFields();
	var registrationType = document.getElementById("login_registration_type").innerHTML;
	if (registrationType == "automatic"){
		dhtmlHistory.add("showPageState");
		login_showPageState();			
	} else if (registrationType == "manual") {
		dhtmlHistory.add("loginPopupState");
		login_loginPopupState();	
	}
}

function login_open_forgot_password(){
	login_forgotPasswordState();
	dhtmlHistory.add("forgotPasswordState");
}

function login_submit_forgot_password(){

	document.getElementById("login_forgot_password_failure_message").style.display = "none";
	document.getElementById("login_forgot_password_success_message").style.display = "none";
	
	var emailBox = document.getElementById("login_forgot_password_box_right");
	var email = getElementsByClassName(emailBox, "login_box_field_input")[0].value;
	
	// Confirm email entered
	if(email == '' || email == null)
	{
		document.getElementById("login_forgot_password_success_message").style.display = "none";
		var msg = document.getElementById("login_forgot_password_failure_message").innerHTML;
		alert(msg);		
		return;
	}
	
	// Get the email information for from address, subject, and body
	var from_addr 	= document.getElementById("login_forgot_password_email_from_addr").innerHTML;
	var subj 	= document.getElementById("login_forgot_password_email_subject").innerHTML;
	var bdy  	= document.getElementById("login_forgot_password_email_body").innerHTML;
	
	var url = location.pathname;

	var params = "method=submitForgotPassword&email=" + email + "&url=" + url + "&from_email=" + from_addr + "&subject=" + subj + "&body=" + bdy;

	var request = createRequest();
	request.open("POST", "/MicrositeLogin.bsci", true);
	request.onreadystatechange = function(){login_submit_forgot_password_callback(request);};
	request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	request.setRequestHeader("Content-length", params.length);
	request.setRequestHeader("Connection", "close");
	request.send(params);	

}

function login_confirm_forgot_password(){
	login_loginPopupState();
	dhtmlHistory.add("loginPopupState");
}

function login_toggle_edit_pass(){
	var passwordEditChange = document.getElementById("login_registration_field_edit_pass").value;
	if (passwordEditChange == "yes"){
		document.getElementById("login_registration_field_edit_pass").value = "no";
		passwordEditChange = "no";
		document.getElementById("login_registration_field_password").disabled = true;
		document.getElementById("login_registration_field_password").value = "********";
	} else {
		document.getElementById("login_registration_field_edit_pass").value = "yes";
		passwordEditChange = "yes";
		document.getElementById("login_registration_field_password").disabled = false;
		document.getElementById("login_registration_field_password").value = "";
	}
}

// **** Load state functions ****

function login_showPageState(){
	login_clearRegistrationFields();
	login_clearMessages();
	login_hideDivs();
}

function login_loginPopupState(){
	login_clearMessages();
	login_hideDivs();
	document.getElementById("login_box").style.display = "block";
	document.getElementById("login_overlay").style.display = "block";
	
	document.getElementById("login_submit_button").onclick = login_login;
	document.getElementById("login_forgotten_password_link").style.display = "block";
	document.getElementById("login_create_registration_link").style.display = "block";
	document.getElementById("login_temp_pass_message").style.display = "none";
	document.getElementById("login_signin_intro").style.display = "block";
	
	document.getElementById("login_email").style.display = "block";
	document.getElementById("login_email_input").style.display = "block";
	document.getElementById("login_iframe").style.display = "none";
	
	//RAE
	if(document.getElementById("cb_accepted") != null)
	{
		document.getElementById("cb_accepted").onclick = login_accept_disc;
	}
}

// RAE
function login_accept_disc()
{
	// Get the value of the accepted checkbox
	document.getElementById("accepted").value = (document.getElementById("cb_accepted").checked == 1);
}

function login_resetTempPass(){
	login_clearMessages();
	login_hideDivs();
	document.getElementById("login_box").style.display = "block";
	document.getElementById("login_overlay").style.display = "block";

	//document.getElementById("login_submit_button").value = "Submit";
	document.getElementById("login_submit_button").onclick = login_submit_reset_pass;
	
	document.getElementById("login_signin_intro").style.display = "none";
	document.getElementById("login_temp_pass_message").style.display = "block";

	//document.getElementById("login_password").innerHTML = "Enter Password: ";
	document.getElementById("login_password_reenter").style.display = "block";
	document.getElementById("login_password_reenter_input").style.display = "block";
	document.getElementById("login_password_input").value = '';
	document.getElementById("login_password_reenter_input").value = '';
}

function login_editRegistrationState(){
	login_clearMessages();
	login_hideDivs();
	document.getElementById("login_registration_box").style.display = "block";
	document.getElementById("login_overlay").style.display = "block";
	document.getElementById("login_registration_field_edit_pass").value = "no";
	document.getElementById("login_registration_field_password").disabled = true;
	document.getElementById("login_registration_field_password").value = "********";
	document.getElementById("login_registration_button_edit_pass").style.display = "block";
	document.getElementById("login_registration_button").onclick = function(){login_submit_edit_registration();};
}

function login_editRegistrationConfirmState(){
	login_hideDivs();
	document.getElementById("login_registration_box").style.display = "block";
	document.getElementById("login_overlay").style.display = "block";
	document.getElementById("login_registration_button").onclick = function(){login_confirm_edit_registration();};
}

function login_createRegistrationState(){
	login_clearRegistrationFields();
	login_clearMessages();
	login_hideDivs();
	document.getElementById("login_registration_field_edit_pass").value = "yes";
	document.getElementById("login_registration_field_password").disabled = false;
	document.getElementById("login_registration_field_password").value = "";
	document.getElementById("login_registration_button_edit_pass").style.display = "none";
	document.getElementById("login_registration_box").style.display = "block";
	document.getElementById("login_overlay").style.display = "block";
	document.getElementById("login_registration_button").onclick = function(){login_submit_create_registration();};
}

function login_createRegistrationConfirmState(){
	login_hideDivs();
	document.getElementById("login_registration_box").style.display = "block";
	document.getElementById("login_overlay").style.display = "block";
	//document.getElementById("login_registration_button").value = "Confirm";
	document.getElementById("login_registration_button").onclick = function(){login_confirm_create_registration();};
}

function login_forgotPasswordState(){
	login_hideDivs();
	document.getElementById("login_forgot_password_box").style.display = "block";
	document.getElementById("login_forgot_password_message").style.display = "block";
	document.getElementById("login_overlay").style.display = "block";
	//document.getElementById("login_forgot_password_button").value = "Submit";
	document.getElementById("login_forgot_password_button").onclick = function(){login_submit_forgot_password();};
}

function login_forgotPasswordConfirmState(){
	login_hideDivs();
	document.getElementById("login_forgot_password_box").style.display = "block";
	document.getElementById("login_overlay").style.display = "block";
	//document.getElementById("login_forgot_password_button").value = "Confirm";
	document.getElementById("login_forgot_password_button").onclick = function(){login_confirm_forgot_password();};
}


// **** Assorted helper functions *****

function login_resize_overlay(){
   var overlayNode = document.getElementById('login_overlay');
   overlayNode.style.height = document.body.scrollHeight;
   overlayNode.style.width = document.body.scrollWidth;

   // For IE, we must use iframes to conceal windowed controls behind the overlays
   if (navigator.appName == 'Microsoft Internet Explorer'){
       var iframeNode = document.getElementById('login_iframe');
       iframeNode.style.height = document.body.scrollHeight;
       iframeNode.style.width = document.body.scrollWidth;
   }
}


function login_getRegistrationData(){
	var fieldDivs = getElementsByClassName(document.getElementById("login_registration_box_right"), "login_registration_field_input");
	var fieldCount = fieldDivs.length;
	var registrationString = "";
	
	for (var i = 0; i < fieldCount; i++){
		if (fieldDivs[i].value != ''){
			registrationString = registrationString + "&";
			registrationString = registrationString + fieldDivs[i].name + "=" + fieldDivs[i].value;
		}
	}
	return registrationString;
}

function login_clearMessages(){
	document.getElementById("login_registration_automatic_create_confirm_message").style.display = "none";
	//document.getElementById("login_registration_manual_create_confirm_message").style.display = "none";
	document.getElementById("login_registration_fail_create_confirm_message").style.display = "none";
	document.getElementById("login_registration_edit_confirm_success_message").style.display = "none";
	document.getElementById("login_registration_edit_confirm_fail_message").style.display = "none";
	document.getElementById("login_forgot_password_message").style.display = "none";
	document.getElementById("login_forgot_password_success_message").style.display = "none";
	document.getElementById("login_forgot_password_failure_message").style.display = "none";
	document.getElementById("login_temp_pass_message").style.display = "none";
	document.getElementById("login_forgotten_password_link").style.display = "none";
	document.getElementById("login_create_registration_link").style.display = "none";
	document.getElementById("login_cookies_warning").style.display = "none";

}

function login_clearRegistrationFields(){
	var fields = getElementsByClassName(document.getElementById("login_registration_box_right"), "login_registration_field_input");
	for (var i = 0; i < fields.length; i++){
		fields[i].value = "";
	}
}

function login_hideDivs(){
	window.scroll(0,0);
	document.getElementById("login_forgot_password_box").style.display = "none";
	document.getElementById("login_registration_box").style.display = "none";
	document.getElementById("login_box").style.display = "none";
	document.getElementById("login_overlay").style.display = "none";
	document.getElementById("login_email").style.display = "none";
	document.getElementById("login_email_input").style.display = "none";
	document.getElementById("login_temp_pass_message").style.display = "none";
	document.getElementById("login_password_reenter").style.display = "none";
	document.getElementById("login_password_reenter_input").style.display = "none";
	document.getElementById("login_iframe").style.display = "none";
}

function login_validate_page(){
	// if required fields are missing, load them into loginMissingFields and return false.  
	// if password is less than 8 chars, add an error message and return false.  Else return true.
	while (login_errorMessages.length > 0)
		login_errorMessages.pop();

	var login_registration_fields_parent = document.getElementById("login_registration_box_left");
	var login_registration_inputs_parent = document.getElementById("login_registration_box_right");
	var fields = getElementsByClassName(login_registration_fields_parent, "login_registration_field");
	var inputs = getElementsByClassName(login_registration_inputs_parent, "login_registration_field_input");
	var err_msg="";
	
	// First check for required fields
	for (var i = 1; i < inputs.length; i++){
		if (inputs[i].className.indexOf("superform_required") > -1 && inputs[i].className.indexOf("login_registration_field_input") > -1 && inputs[i].value == ""){
				// A required field is missing.  If not already started, put the required fields
				// base text in the err_msg variable
				if(err_msg == "")
					err_msg = document.getElementById("login_required_fields_missing_message").innerHTML + "\n";

				if (inputs[i].type == 'text' || (inputs[i].type == 'password' && !inputs[i].disabled) )
					err_msg += "\t" + get_field_name(fields[i]) + "\n";
		}
	}
	
	// if the err_msg variable is empty, no required fields were missing.  If it is populated, then
	// add the message to the login_errorMessages array
	if(err_msg != "")
		login_errorMessages.push(err_msg);
		
	err_msg = "";
	
	// Perform additional checking of the form based on specific requirements
	// Check password field length
	var passwordField = document.getElementById("login_registration_field_password");
	if (!passwordField.disabled && passwordField.value.length > 0 && passwordField.value.length < 8)
	{
		err_msg = document.getElementById("login_password_too_short_message").innerHTML;
		login_errorMessages.push(err_msg);
	}
	
	if (login_errorMessages.length > 0){
		return false;
	} else {
		return true;
	}
}

function get_field_name(field) {
	
	var children = field.childNodes;
	for(var j=1; j< children.length; j++) {
		if(children[j].className == "label_text") {
			return children[j].innerHTML;
		}
	}
}

function login_displayErrors(){
	var message = "";
	
	// loop through the login_errorMessages array and build out the alert
	if(login_errorMessages.length > 0)
	{
		for (var i = 0; i < login_errorMessages.length; i++)
			message += "\t" + login_errorMessages[i] + "\n";

		alert(message);
	}
}

// **** Callback functions ****

function login_onload_callback(request){
	if (request.readyState == 4){
		if (request.status == 200){
			document.getElementsByTagName("body")[0].style.display = "block";
			if (request.responseText == "session"){
				login_showPageState();	
				dhtmlHistory.add("showPageState");
			} else {
				login_loginPopupState();
				login_resize_overlay();
				if (!cookiesEnabled())
					document.getElementById("login_cookies_warning").style.display = "block";
				dhtmlHistory.add("loginPopupState");			
			}
		} else {
			alert("Server error.  Please try your request again later.");
		}
	}
}

function login_login_callback_function(request){
	// If the person failed to log in, put the appropriate message on the screen.
	// If the person succeeded in logging in, make the overlay and interstitial disappear
	if (request.readyState == 4){
		if (request.status == 200){
			var status = request.responseText;
			if(status == 'accepted'){
				login_showPageState();	
				dhtmlHistory.add("showPageState");
			} else if (status == 'temp'){
				login_resetTempPass();
				dhtmlHistory.add("resetTempPass");
			} else if (status == 'rejected'){
				alert('The email and password entered did not match any registered user.');
			} else if (status == 'pending'){
				alert('Your status is pending');
			}
		} else {
			alert("Server error.  Please try your request again later.");
		}
	}
}

function login_submit_reset_pass_callback(request){
	if (request.readyState == 4){
		if (request.status == 200){
			if (request.responseText == "success"){
				login_showPageState();
				dhtmlHistory.add("showPageState");
			} else {
				alert('password reset failed');
			}
		} else {
			alert("Server error.  Please try your request again later.");
		}
	}
}

function login_open_edit_registration_callback(request){
	if (request.readyState == 4){
		if (request.status == 200){
			// Extract information from XML.  If there is information here, then go
			// to edit page and display info.  If not, you weren't logged in and probably
			// are using the back button so just put an alert on which says no one is logged
			// in.  To determine what to log in, first get all the fields currently on the page

			login_editRegistrationState();
						
			var fieldsOnPage = getElementsByClassName(document.getElementById("login_registration_box_right"), "login_registration_field_input");
			var fieldsInXML = request.responseXML.documentElement.getElementsByTagName("field");
			
			// For each field currently on the page, check if there's anything from the xml with which to populate it.
			for (var i = 0; i < fieldsOnPage.length; i++){
				var name = fieldsOnPage[i].name;
				for (var j = 0; j < fieldsInXML.length; j++){
					if (fieldsInXML[j].getAttribute("name") == name && fieldsInXML[j].firstChild.nodeValue.length > 0)
						fieldsOnPage[i].value = fieldsInXML[j].firstChild.nodeValue;
				}
			}
			
			dhtmlHistory.add("editRegistrationState");
		} else {
			alert("Server error.  Please try your request again later.");
		}
	}
}

function login_submit_edit_registration_callback(request){

	if (request.readyState == 4){
		if (request.status == 200){
			login_editRegistrationConfirmState();
			dhtmlHistory.add("editRegistrationConfirmState");
			// depending on success or failure update this message below
			if (request.responseText == "success"){
				// Get the success message
				var msg = document.getElementById("login_registration_edit_confirm_success_message").innerHTML;
				alert(msg);
				// Hide the login/registration divs
				login_showPageState();				
			} else {
				document.getElementById("login_registration_edit_confirm_fail_message").style.display = "block";
			}
		
		} else {
			alert("Server error.  Please try your request again later.");
		}
	}	
}

function login_submit_create_registration_callback(request){
	if (request.readyState == 4){
		if (request.status == 200){
				login_createRegistrationConfirmState();
				dhtmlHistory.add("createRegistrationConfirmState");
				if (request.responseText == "success"){
					
					// Alert the successful creation
					var msg = document.getElementById("login_registration_automatic_create_confirm_message").innerHTML;
					alert(msg);
					
					var registrationType = document.getElementById("login_registration_type").innerHTML;
					if(registrationType == 'automatic'){
						// Display the page that the user is trying to see
						login_showPageState();						
					} else if (registrationType == 'manual'){
						// Redirect the user to the "safe page" until their account is approved
						var url = document.getElementById("login_cancel_url").innerHTML;
						location.replace(url);
					}
					
				} else if (request.responseText == "failure") {
					
					document.getElementById("login_registration_fail_create_confirm_message").style.display = "block";
					
				}

		} else {
			alert("Server error.  Please try your request again later.");
		}
	}	
}


function login_submit_forgot_password_callback(request){
	if (request.readyState == 4){
		if (request.status == 200){
			login_forgotPasswordConfirmState();
			dhtmlHistory.add("forgotPasswordConfirmState");
			// success or failure.  if success, go to confirm page.  if fail, show error message and stay here
			if (request.responseText == "success"){
			  var msg = document.getElementById("login_forgot_password_success_message").innerHTML;
			  alert(msg);
			  // Show the login screen
			  login_loginPopupState();
			  login_resize_overlay();			  
			} else {
			  var msg = document.getElementById("login_forgot_password_failure_message").innerHTML;
			  alert(msg);
			}
		} else {
			alert("Server error.  Please try your request again later.");
		}
	}
}

function login_cancel_registration()
{
	// Clear out any data in the form
	login_clear_registration();

	// Check if the user is currently logged in.  If the user is editing an existing regisration,
	// the edit password button will be visible on the screen. On new registrations, that button is not present
	if(document.getElementById("login_registration_button_edit_pass").style.display == 'none')
	{
		// Redisplay the login screen if the user is not logged in
		login_loginPopupState();
		login_resize_overlay();	
	}
	else
	{
		// If the user is logged in, hide the registration form and display the page they were viewing
		login_showPageState();
	}
}
