

function processSubmit(e)
{
	e.stop();
	
	var errorMessage = validate();
	
	if (errorMessage)
	{
		showError('.statusOutput', errorMessage);
	}
	else
	{    
		var mode = $('mode').get('value') == 'edit' ? 'edit' : 'new';
		var req = mode == 'new' ? 'userModifyCreate' : 'userModifyUpdate';
		new Request.JSON
		({
			url: '../include/ajaxController.php?req='+req,
			method: 'post',
			data: $('userModifyForm'),
			onRequest: function()
			{
			  showMessage('.statusOutput', 'Sending request');
				$('userModifySubmitButton').set('disabled', true);
				$('userErrors').empty();
				$('userErrors').setStyle('display', 'none');
			},
			onFailure: function()
			{
			  showError('.statusOutput', 'Error encountered');
				$('userErrors').set('text', 'Failure sending your information. Please try again.');
				$('userErrors').setStyle('display', 'block');
				$('userModifySubmitButton').set('disabled', false);
			},
			onComplete: function(jsonObject)
			{
			  clearOutput('.statusOutput');
				
				if(!jsonObject)
				{
				  showError('.statusOutput', 'Error encountered');
					$('userErrors').set('text', 'Failure updating your information. Please try again.');
					$('userErrors').setStyle('display', 'block');
					$('userModifySubmitButton').set('disabled', false);
					return false;
				}
				
				if (!jsonObject.success)
				{
				  showError('.statusOutput', 'Error encountered');
					$('userErrors').setStyle('display', 'block');
					
					new Element('ul',
					{
						'id': 'userErrorsUL'
					}).inject('userErrors');
					
					jsonObject.errors.each(function(error)
					{
						new Element('li',
						{
							'text': error
						}).inject('userErrorsUL');
					});
					
					$('userModifySubmitButton').set('disabled', false);
					return false;
				}
				
				if (mode == 'new')
				{
					window.location = '../login.php';
				}
				else
				{
				  showMessage('.statusOutput', 'You have successfully updated your information');
					$('userModifySubmitButton').set('disabled', false);
					
					$('userModifyCheckPasswordButton').setStyle('display', 'block');
					$('enterPasswordDiv').setStyle('display', 'none');
					
					$('userPassword').set('value', '');
					$('confirmPassword').set('value', '');
					
					window.location = '#pageContent';
				}
			}
		}).send();
	}
}

	
function validate()
{
	if ($('userModifyCheckPasswordButton'))
	{
		var passwordValid = false;
		new Request.JSON
		({
		 'url': AJAX_PATH,
		 'async': false,
		 'onRequest': function()
		 {
			 showMessage('.statusOutput', 'Checking password');
		 },
		 'onFailure': function()
		 {
			 showError('.statusOutput', 'An error occured during the password check');
		 },
		 'onComplete': function(jsonRtn)
		 {
			 if (!jsonRtn || !jsonRtn.validPassword)
			 {
				 showError('.statusOutput', 'Incorrect password');
			 }
			 else
			 {
				 showMessage('.statusOutput', 'Password Valid');
				 passwordValid = true;
			 }
		 }
		}).get({'req': 'userCheckPassword', 'currentPassword': $('currentPassword').get('value')});
		// This section just time-saving niceness, check password again during update process
		
		if (!passwordValid)
		{
			return false;
		}
	}
	
	$('locationID').getParent('td').removeClass('error');

	var hadError = false;
	var errorMessage = false;
	var mode = $('mode').get('value') == 'edit' ? 'edit' : 'new';
	
	var passwordInput = $('userFirstName').getParent('form').getElement('input[name="userPassword"]');
	var confirmPasswordInput = $('userFirstName').getParent('form').getElement('input[name="confirmPassword"]');
	
	var checks = mode != 'edit' 
		? ['userFirstName', 'userLastName', $('userFirstName').getParent('form').getElement('input[name="userEmail"]'), 
				passwordInput, confirmPasswordInput, 'locationID']
		: ['userFirstName', 'userLastName', 'userEmail', 'locationID'];
		
	hadError = checkBlanks(checks);
	if (hadError)
	{
		errorMessage = !errorMessage ? 'Please fill in the red highlighted fields' : errorMessage;
		
		if ($('locationID').get('value') == '')
		{
			$('locationID').getParent('td').addClass('error');
		}
	}
	
	if (!hadError && mode == 'edit')
	{
		if ((passwordInput.get('value') != '' || confirmPasswordInput.get('value') != '') &&
				 passwordInput.get('value') != confirmPasswordInput.get('value'))
		{
			passwordInput.addClass('error');
			confirmPasswordInput.addClass('error');
			errorMessage = 'Your new passwords did not match';
			hadError = true;        
		}
		else if (!hadError)
		{
			passwordInput.removeClass('error');
			confirmPasswordInput.removeClass('error');
		}
	}
	
	if (!hadError)
	{ 
		// Validate email does error output
		hadError = !validateEmail();
	}
	
	if (!hadError && (mode == 'new' && passwordInput.get('value') != confirmPasswordInput.get('value')))
	{
		passwordInput.addClass('error');
		confirmPasswordInput.addClass('error');
		errorMessage = 'Your passwords did not match';
		hadError = true;
	}
	else if (!hadError)
	{
		passwordInput.removeClass('error');
		confirmPasswordInput.removeClass('error');
	}
	
	if (!hadError && $('termsAndConditions'))
	{
		if (!$('termsAndConditions').get('checked'))
		{
			hadError = true;
			$('termsAndConditionsLabel').addClass('error');
			errorMessage = 'You must agree to the terms and conditions';
		}
		else
		{
			$('termsAndConditionsLabel').removeClass('error');
		}
	}
	
	return errorMessage ? errorMessage : hadError;
}



function validateEmail()
{ 
  var error = false;
  var userEmail = $('userFirstName').getParent('form').getElement('input[name="userEmail"]');
  var output = $$('.statusOutput'); 
  userEmail.removeClass('error');
  output.set('text', '');
	
	if ($('currentEmail') && $('currentEmail').get('value') == userEmail.get('value'))
	{
		return true;
	}

  // Regex From: http://www.douglaskarr.com/2007/10/28/javascript-regex-emailaddress/
  var validEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
  if (!userEmail.get('value').match(validEmail))
  {
    userEmail.addClass('error');
    showError(output, 'The email entered is not valid');
		return false;
  }
	
	/*
	var regex = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$";
	regex = new RegExp(regex, 'i');
	
	if (!regex.test(userEmail.get('value')))
	{
    userEmail.addClass('error');
    showError(output, 'The email entered is not valid');
		return false;
	}
	*/
  
	var rtn = true;
	var myAjax = new Request.JSON
	({
		url: '../include/ajaxController.php',
		method: 'get',
		async: false,
		onFailure: function()
		{
			showError(output, 'Failure to send email validation');
			return false;
		},
		onComplete: function(jsonObject) 
		{
			if (!jsonObject)
			{
				showError(output, 'Failure to complete email validation');
				rtn = false;
				return false;
			}
			
			if (!jsonObject.success)
			{
				showError(output, jsonObject.errorMessage);
				rtn = false;
				return false;
			} 
		} 
	}).get({'req': 'userModifyValidateEmail', 'email': userEmail.get('value')});
  
  return rtn;
}



window.addEvent('domready', function()
{
  var locationSelect = new LocationSelect
  ({
    stateSelect: 'selectState', 
    citySelect: 'locationID',
    loadingPlaceholder: 'locationSelectLoading',
    ajaxPath: AJAX_PATH
  });
	
	$('userFirstName').focus();
	
	$('userFirstName').getParent('form').getElement('input[name="userEmail"]').addEvent('blur', validateEmail);

	if ($('userModifyCheckPasswordButton'))
	{
		$('userModifyCheckPasswordButton').addEvent('click', function(e)
		{
			e.stop();
			$('userModifyCheckPasswordButton').setStyle('display', 'none');
			$('enterPasswordDiv').setStyle('display', 'block');
			$('currentPassword').set('value', '');
			$('currentPassword').focus();
		});
	}
	
	$('userModifySubmitButton').addEvent('click', processSubmit);
});
