function alertsubscribetool_submit_email_form() {
	$('alertsubscribetool_email_submit').hide();
	$('alertsubscribetool_email_status_indicator').show();
	var submitted_email_address = $F('alertsubscribetool_email');
	if( submitted_email_address == $F('alertsubscribetool_email_default_value') ) {
		submitted_email_address = ""; // if the default value is found, they didn't enter anything: empty string submitted to enforce this.
	}
	try {
		new Ajax.Request( '/site_tools/subscribe_process_ajax.aspx', 
				{
					method: 'post',
					parameters: { 'alertsubscribetool_email': submitted_email_address },
					evalJS: false,
					onSuccess: function( transport ) {
						try {
							// DEBUGGING
							//alert( '"' + transport.responseText + '"' );
							// /DEBUGGING
							if( transport.responseText.length != 0 ) {
								eval(transport.responseText);
							} else {
								alertsubscribetool_ajax_email_submission_failure();
							}
						} catch ( e ) {
							alertsubscribetool_ajax_email_submission_failure();
						}
					},
					onFailure: alertsubscribetool_ajax_email_submission_failure
				}	);
	} catch( e ) {
		alertsubscribetool_ajax_email_submission_failure();
	}
}
/* Takes 1 argument:
	@options[in] hash, default: { 'was_already_subscribed': false }

Example call if already subscribed: 
alertsubscribetool_ajax_email_submission_successful( { 'was_already_subscribed': true } )

Example call if new alerts added to address:
alertsubscribetool_ajax_email_submission_successful( { 'was_already_subscribed': false } )

If no hash is given, the default is to assume the address was_already_subscribed: false, however, I ask that you please be explicit when calling this function.
 */
function alertsubscribetool_ajax_email_submission_successful( options ) {
	if( options == null ) {
		options = new Hash();
	}
	options = $H(options);
	/* Default options */
	if( options.get('was_already_subscribed') == null ) { options.set('was_already_subscribed',false); }

	/* form reset */
	alertsubscribetool_reset_submit();
	alertsubscribetool_clear_errors_on_form();
	$('alertsubscribetool_form').hide();
	new Effect.Opacity('alertsubscribetool_thanks', { 'from': 0.0, 'to': 1.0, 'duration': 0.5 } );
	$('alertsubscribetool_thanks').show();
}
function alertsubscribetool_ajax_email_submission_invalid( errors ) {
	alertsubscribetool_reset_submit();
	alertsubscribetool_clear_errors_on_form();
	errors = $H(errors);
	if( errors.size() != 0 ) {
		ajax_error_formatting_set_errors( errors );
	} else {
		alertsubscribetool_ajax_email_submission_failure();
	}
}
function alertsubscribetool_ajax_email_submission_failure() {
	$('alertsubscribetool_form').hide();
	$('alertsubscribetool_email_status_indicator').hide();
	new Effect.Opacity( 'alertsubscribetool_server_errors', {'from': 0, 'to': 1, 'duration': 0.4} );
	$('alertsubscribetool_server_errors').show();
}
function alertsubscribetool_clear_errors_on_form() {
	$('alertsubscribetool_email').removeClassName('ajax_error_field');
	$('alertsubscribetool_email_error_list').hide();
	$('alertsubscribetool_email_error_list').childElements().each( function(e,i) {
			e.remove();
			});
}
function alertsubscribetool_reset_submit() {

	$('alertsubscribetool_email_submit').show();
	$('alertsubscribetool_email_status_indicator').hide();
	$('alertsubscribetool_server_errors').hide();
	$('alertsubscribetool_thanks').hide();
	$('alertsubscribetool_form').show();
}
function alertsubscribetool_on_alertsubscribetool_email_focus() {
	var elem = $('alertsubscribetool_email');
	if( $F('alertsubscribetool_email') == $F('alertsubscribetool_email_default_value') ) {
		elem.removeClassName( 'empty' );
		elem.value = '';
	}
}
function alertsubscribetool_on_alertsubscribetool_email_blur() {
	var elem = $('alertsubscribetool_email');
	if( $F('alertsubscribetool_email') == '' || $F('alertsubscribetool_email') == $F('alertsubscribetool_email_default_value') ) {
		elem.addClassName( 'empty' );
		elem.value = $F('alertsubscribetool_email_default_value');
	}
}
