// ----------------------------------
// Loading profiles
// ----------------------------------
function loadUserProfile() {
  spinnerShow('profile_indeterminate');
  ajaxWrapper('api/accounts/show_account', {}, null, loadUserProfileSuccess, loadUserProfileFailure);
}


function loadUserProfileSuccess(json) {
  displayUserProfile(json);
}


function loadUserProfileFailure(transport, msg) {
  msgDivDisplay('profile_update_msg', msg || 'An error occurred while trying to load your profile.', false)
}


var EMAIL_ROW_TEMPLATE = new Template("<td><img src='images/delete.png' title='Delete email'></td><td><input type='textbox' value='#{email}' name='email'></td><td><input type='checkbox' class='email_correspondence'></td><td><input type='checkbox' class='email_message'></td>");
function displayUserProfile(json) {
	// personal details
	var user = json.user;
	$('profile_first_name').value = user.first_name;
	$('profile_last_name').value = user.last_name;
	$('profile_gender').value = user.gender;
	$('profile_address').value = user.address || '';
	$('profile_suburb').value = user.suburb || '';
	$('profile_state').value = user.state || '';
	$('profile_postcode').value = user.postcode || '';
	$('profile_phone').value = user.phone || '';
  
  // password
	$('profile_password').value = '';
	$('profile_password_again').value = '';

	// email addresses
  var tbody = $$('#profile_emails tbody').first();
  tbody.update();
  json.emails.each(function(email) {
    addNewEmail(email);
  });
  
  spinnerHide('profile_indeterminate');
}


// ----------------------------------
// Saving profiles
// ----------------------------------
function saveUserProfileSuccess(json) {
  $('profile_password').value = '';
  $('profile_password_again').value = '';
  var msg = 'Your profile was successfully updated. ';
  if (json.msg)
    msg += json.msg;
  msgDivDisplay('profile_update_msg', msg, true);
  displayUserProfile(json);
  spinnerHide('profile_indeterminate');
}


function saveUserProfileFailure(transport, msg) {
  $('profile_password').value = '';
  $('profile_password_again').value = '';
  msgDivDisplay('profile_update_msg', msg || 'An error occurred while trying to save your profile.', false);
  displayUserProfile(json);
  spinnerHide('profile_indeterminate');
}


function saveUserProfile() {
	// display the indeterminate animation
  spinnerShow('profile_indeterminate');
  msgDivClear('profile_update_msg');
	
	// create the profile hash to be sent as parameters to the request
	var profile = {};
	profile.first_name = $('profile_first_name').value;
	profile.last_name  = $('profile_last_name').value;
	profile.gender   = $('profile_gender').value;
	profile.address  = $('profile_address').value;
	profile.suburb   = $('profile_suburb').value;
	profile.state    = $('profile_state').value;
	profile.postcode = $('profile_postcode').value;
	profile.phone    = $('profile_phone').value;
	profile.password = $('profile_password').value;
	profile.confirm  = $('profile_password_again').value;
	
	var emails = [];
	var _emails   = $A($$('#profile_emails input[type=textbox]'));
	var _contacts = $A($$('#profile_emails .email_correspondence'));
	var _messages = $A($$('#profile_emails .email_message')); 
	for (var i = 0; i != _emails.size(); ++i)
    emails.push({address: _emails[i].value, contact: _contacts[i].checked, message: _messages[i].checked});
  profile.emails = emails.toJSON();

  ajaxWrapper('api/accounts/update_account', profile, null, saveUserProfileSuccess, saveUserProfileFailure);
}


function addNewEmail(email) {
  var row = new Element('tr');
  $$('#profile_emails tbody').first().insert(row);
  row.insert(EMAIL_ROW_TEMPLATE.evaluate(email));
  $$('#profile_emails tr .email_correspondence').last().checked = email.correspondence;
  $$('#profile_emails tr .email_message').last().checked = email.messages;
  $$('#profile_emails tr img').last().observe('click', deleteEmail.curry(row));
}


function deleteEmail(row, event) {
  row.remove();
}

