/*
 * JS for requestContact module
 *
 * Requires jQuery Validate plugin and custom validation method: zipcode
 */
function resetRequestContactFields() {
	setRequestContactStatus('');
}

function onRequestContactCancelClick() {
	hideRequestContact();
}

/*
 * Submit the form and report status
 */
function postRequestContact() {
	var successMsg = 'Thank you for requesting contact.';
	var pendingMsg = 'Sending contact information&hellip;';
	var failureMsg = 'There were problems sending your contact information. Please try again later.';
	
	$.ajax( {
			url: g_requestURLs['xfa.submitRequestContact'],
			type: 'POST',
			data: $('#request_contact_form').serialize(),
			dataType: 'json',
			success: function() { setRequestContactStatus( successMsg ); }, 
			error: function() { setRequestContactStatus( failureMsg ); }, 
			complete: function() { hideRequestContact( true, true ) }
		});
		
	hideRequestContact( true, false );
	setRequestContactStatus( pendingMsg );
}

function setRequestContactStatus( message ) {
	$('#request_contact_status').html( message );
}

/*
 * Hides all or most of the request contact form; 
 * retainMessage: if true, does *not* immediately hide status message
 * hideMessageAfterDelay: if true, hide status message after a short delay
 *
 * Note: hideMessageAfterDelay only apples when retiainMessage is true
 */
function hideRequestContact( retainMessage, hideMessageAfterDelay ) {
	if( retainMessage )
		$('#request_contact_form').slideUp( null, function() {
				if( hideMessageAfterDelay )
					$('#request_contact').delay( 3000 ).slideUp();
			});
	else
		$('#request_contact').slideUp();
}

function showRequestContact() {
	resetRequestContactFields();
	$('#request_contact_form:hidden').show();
	$('#request_contact:hidden').slideDown();
}

function scrollToRequestContact() {
	$.scrollTo( $('#request_contact_form'), 800 );
}

function validateRequestContact() {
	$('#request_contact_form').validate( {
		rules: {
			contact_first_name: 'required',
			contact_last_name: 'required',
			contact_company: 'required',
			contact_title: 'required',
			contact_phone: { 
				required: true,
				phoneUS: true
			},
			contact_email: {
				required: true,
				email: true
			},
			contact_zip: {
				required: true,
				zipcode: true
			}
		},
		messages: {
			contact_phone: 'Must be valid phone number with area code (digits and dashes only)'
		},
		submitHandler: onValidRequestContactSubmit
	});
}

/* 
 * Called by Validator when all fields are valid and 
 * form should be submitted. Contains logic to validate
 * ed_options because of the customized positioning
 * required for the validation error message for this 
 * set of checkboxes
 */
function onValidRequestContactSubmit() {
	if( $('input[name=ed_options]:checked').size() > 0 )
		postRequestContact();
	else {
		$('#ed_options_error').show();
		$('input[name=ed_options]').unbind( 'click' ); // remove all click handlers
		$('input[name=ed_options]').bind( 'click', function() {
			if( $('input[name=ed_options]:checked').size() > 0 )
				$('#ed_options_error').hide();
			else
				$('#ed_options_error').show();
		});
	}
}

$(document).bind( 'ready', function() {
	validateRequestContact();
	$('#request_contact_cancel').bind( 'click', onRequestContactCancelClick );
});