// Add onfocus and onblur effects to text inputs
// Also set background color to light gray if the input is readonly
window.onload = addInputFocusHandlers;
function addInputFocusHandlers()
{
	var textInputs = document.getElementsByClassName('text', 'signin');
	var focusStylers	= "this.style.border = '2px solid #000'; this.style.margin = '0';";
	var blurStylers		= "this.style.border = '1px solid #000'; this.style.margin = '1px';";

	for(cntr = 0; cntr < textInputs.length; cntr++)
	{
		if(textInputs[cntr].readOnly)
		{
			textInputs[cntr].style.backgroundColor = '#dfdfdf';
			textInputs[cntr].style.border = '1px solid #999';
			textInputs[cntr].style.margin = '1px';
		}
		else
		{
			if(!textInputs[cntr].onfocus)
			{
				textInputs[cntr].onfocus = new Function('', focusStylers);
			}
			else
			{
				var existingEvent = ''+textInputs[cntr].onfocus;
				var eventTextStartIndex = existingEvent.indexOf('{')+1;
				var eventTextEndIndex = existingEvent.lastIndexOf('}');
				existingEvent = existingEvent.substr(eventTextStartIndex, eventTextEndIndex-eventTextStartIndex);
				textInputs[cntr].onfocus = new Function('', existingEvent + focusStylers);
			}
			
			if(!textInputs[cntr].onblur)
			{
				textInputs[cntr].onblur = new Function('', blurStylers);
			}
			else
			{
				var existingEvent = ''+textInputs[cntr].onblur;
				var eventTextStartIndex = existingEvent.indexOf('{')+1;
				var eventTextEndIndex = existingEvent.lastIndexOf('}');
				existingEvent = existingEvent.substr(eventTextStartIndex, eventTextEndIndex-eventTextStartIndex);
				textInputs[cntr].onblur = new Function('', existingEvent + blurStylers);
			}
		}
	}
}

function checkRegForm()
{
	var formInputs = Form.getElements($('registration'));
	bmissing = false;
	for(cntr = 0; cntr < formInputs.length; cntr++)
	{
		if(formInputs[cntr].type == 'text' || formInputs[cntr].type == 'password')
		{
			if(formInputs[cntr].value == '')
			{
				formInputs[cntr].className += ' input_error';
				bmissing = true;
			}
			else
			{
				formInputs[cntr].className = formInputs[cntr].className.replace(/ input_error/g, "");
			}
		}
	}
	
	if(bmissing)
	{
		$('submit_result').innerHTML = 'Please complete all fields<br>in the registration form';
		$('submit_result').className = 'input-status error';		
		return false;
	}
	else if(checkPasswords() && checkRegAccount() !== false)
	{
		$('submit_result').innerHTML = '';
		$('submit_result').className = 'input-status';
		return true;
	}
}

function checkProfUpdateForm()
{
	var formInputs = Form.getElements($('profileUpdate'));
	bmissing = false;
	for(cntr = 0; cntr < formInputs.length; cntr++)
	{
		// Do not check for password and CJID in "required field" check
		if(	formInputs[cntr].id != 'password' && formInputs[cntr].id != 'password_confirm' && formInputs[cntr].id != 'cjid' && formInputs[cntr].type == 'text' )
		{
			if(formInputs[cntr].value == '')
			{
				formInputs[cntr].className += ' input_error';
				bmissing = true;
			}
			else
			{
				formInputs[cntr].className = formInputs[cntr].className.replace(/ input_error/g, "");
			}
		}
	}
	
	if(bmissing)
	{
		$('submit_result').innerHTML = 'Please complete all fields<br>in the registration form';
		$('submit_result').className = 'input-status error';		
		return false;
	}
	else if(checkPasswords(false) && checkProfUpdateAccount() !== false)
	{
		$('submit_result').innerHTML = '';
		$('submit_result').className = 'input-status';
		return true;
	}
}

function checkPasswords(bFilterEmpty)
{
	if(typeof bFilterEmpty == 'undefined')
	{
		bFilterEmpty = true;
	}
	
	if($F('password') != $F('password_confirm'))
	{
		$('password_result').innerHTML = 'The passwords you <br>entered do not match';
		$('password_result').className = 'input-status error';
		$('password').className += ' input_error';
		$('password_confirm').className += ' input_error';
		return false;
	}
	else if(bFilterEmpty && ($F('password') == '' || $F('password_confirm') == ''))
	{
		$('password_result').innerHTML = 'Please supply<br>passwords';
		$('password_result').className = 'input-status error';
		$('password').className += ' input_error';
		$('password_confirm').className += ' input_error';
		return false;
	}
	else
	{
		$('password').className = $('password').className.replace(/ input_error/g, "");
		$('password_confirm').className = $('password_confirm').className.replace(/ input_error/g, "");
//		else if($('password_result').className.indexOf('error') != -1) // If password used to have an error, change it to correct
		if($F('password') != '')
		{
			$('password_result').className = 'input-status correct';
		}
		else //if($F('password') == '')
		{
			$('password_result').className = 'input-status';
		}

		$('password_result').innerHTML = '';
		return true;
	}
}

/*
 * AJAX Functions
 */
myAjax = '';
function checkRegAccount()
{

	// Turn to lower case
	$('email').value = $('email').value.toLowerCase();
	
	// Check if email is valid
	if($F('email') == '')
	{
		$('email_result').innerHTML = 'Please provide an<br>email address';
		$('email_result').className = 'input-status error';
		$('email').className += ' input_error';		
		return false;
	}
	else if($F('email').search(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/) == -1)
	{
		$('email_result').innerHTML = 'The email address you<br>entered is invalid';
		$('email_result').className = 'input-status error';
		$('email').className += ' input_error';		
		return false;
	}
	else
	{
		// All client-side validation done. Call server
		var url = 'ws/ajax.register.check_account.php';
		var params = 'email=' + $F('email');
		myAjax_currentLoans = new Ajax.Request( url, { method: 'get', parameters: params, onComplete: processCheckRegAccount });
	}
}

function processCheckRegAccount(originalRequest)
{
	var ajaxResponse = Try.these(
		function() { return new DOMParser().parseFromString(originalRequest.responseText, 'text/xml'); },
		function() { var xmldom = new ActiveXObject('Microsoft.XMLDOM'); xmldom.loadXML(originalRequest.responseText); return xmldom; }
	);

	current_child = ajaxResponse.getElementsByTagName('status').item(0);
	result_status = current_child.childNodes.item(0).data;
	if(result_status == "OK")
	{
		$('email').className = $('email').className.replace(/ input_error/g, "");		
		$('email_result').className = 'input-status correct';
	}
	else
	{
		$('email').className += ' input_error';
		$('email_result').className = 'input-status error';
	}
	
	current_child = ajaxResponse.getElementsByTagName('content').item(0);
	$('email_result').innerHTML = current_child.childNodes.item(0).data;
}

function checkProfUpdateAccount()
{

	// Turn to lower case
	$('email').value = $('email').value.toLowerCase();
	
	// Proceed with checking only if the user modified the email
	if($F('email') != $F('email_stored'))
	{
		// Check if email is valid
		if($F('email') == '')
		{
			$('email_result').innerHTML = 'Please provide an<br>email address';
			$('email_result').className = 'input-status error';
			$('email').className += ' input_error';		
			return false;
		}
		else if($F('email').search(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/) == -1)
		{
			$('email_result').innerHTML = 'The email address you<br>entered is invalid';
			$('email_result').className = 'input-status error';
			$('email').className += ' input_error';		
			return false;
		}
		else
		{
			// All client-side validation done. Call server
			var url = 'ws/ajax.register.check_account.php';
			var params = 'email=' + $F('email');
			myAjax_currentLoans = new Ajax.Request( url, { method: 'get', parameters: params, onComplete: processCheckProfUpdateAccount });
		}
	}
	else if($('email_result').className == 'input-status error') // If password used to have an error, change it to correct
	{
		$('email').className = $('email').className.replace(/ input_error/g, "");
		$('email_result').className = 'input-status correct';
		$('email_result').innerHTML = '';
	}
}

function processCheckProfUpdateAccount(originalRequest)
{
	var ajaxResponse = Try.these(
		function() { return new DOMParser().parseFromString(originalRequest.responseText, 'text/xml'); },
		function() { var xmldom = new ActiveXObject('Microsoft.XMLDOM'); xmldom.loadXML(originalRequest.responseText); return xmldom; }
	);

	current_child = ajaxResponse.getElementsByTagName('status').item(0);
	result_status = current_child.childNodes.item(0).data;

	if(result_status == "OK")
	{
		$('email').className = $('email').className.replace(/ input_error/g, "");		
		$('email_result').className = 'input-status correct';
	}
	else
	{
		$('email').className += ' input_error';
		$('email_result').className = 'input-status error';

	}
	
	current_child = ajaxResponse.getElementsByTagName('content').item(0);
	$('email_result').innerHTML = current_child.childNodes.item(0).data;
}
