$(document).ready(function(){
	// submit form with AJAX
	$('#contact form').submit(function(){
		var input_name = document.getElementById('name');
		var input_email = document.getElementById('email');
		var input_address = document.getElementById('address');
		var input_cityState = document.getElementById('city-state');
		var input_zip = document.getElementById('zip');
		var input_phone = document.getElementById('phone');
		var input_page = document.getElementById('page');
		var name = $(input_name).val();
		var email = $(input_email).val();
		var address = $(input_address).val();
		var cityState = $(input_cityState).val();
		var zip = $(input_zip).val();
		var phone = $(input_phone).val();
		var page = $(input_page).val();
		
		$('input').each(updateErrorStatus);
		if ($('.error').length > 0) {
			$('#contact .error-box').remove();
			$(document.getElementById('send')).parent().after('<div class="error-box">Please fill in all required fields and try again.</div>');
			return false;
		}

		var width = parseFloat($(document.getElementById('form-fields')).width());
		var height = parseFloat($(document.getElementById('form-fields')).height());

		$(document.getElementById('send')).attr('disabled', 'disabled');
		$(document.getElementById('form-fields'))
			.append('<div><div id="spinner"><div><img src="images/spinner.gif" alt="" id="xspinner" /></div><div>Sending</div></div></div>')
		;

		var spinnerHeight = parseFloat($(document.getElementById('spinner')).height());
		$(document.getElementById('spinner'))
			.css('visibility', 'hidden')
			.css('display', 'block')
			.css('text-align', 'center')
			.css('margin-left', 'auto')
			.css('margin-right', 'auto')
			.css('padding-top', ((height-spinnerHeight) / 2)+'px')
			.parent()
				.parent()
					.css('position', 'relative')
					.css('min-height', height+'px')
				.end()
				.hide()
				.css('opacity', 0)
				.css('position', 'absolute')
				.css('top', '0px')
				.css('left', '0')
				.width(width+'px')
				.height(height+'px')
				.css('background', 'white')
				.fadeTo("fast", 0.75, null)
			.end()
			.css('visibility', 'visible')
		;

		$("#send").ajaxError(function(request, settings) {
			$("#spinner").parent().remove();
			$(".error-box").remove();
			$(this).parent().after('<div class="error-box">Please fill in all required fields or correct any errors and try again.</div>');
		});

		$.post($(this).attr('action'), { "name": name, "email": email, "address": address, "city-state": cityState, "zip": zip, "phone": phone, "page": page, "ajax": "true" },
			function(data){
				var page = $('#page').val();
				switch (page) {
					case 'hs': page = 'Homeschooling with the Accelerated Christian Education curriculum'; break;
					case 'lca': page = 'Lighhouse Christian Academy'; break;
					case 'cs': page = 'Church Schools using the Accelerated Christian Education curriculum'; break;
					default: page = 'Accelerated Christian Education'; break;
				}
// preview how it would look in real life with a delay between 1/4 second and 1 second
//				window.setTimeout("$('#form-fields', this).empty().append('"+data.replace(/[\r\n]+/g, ' ')+"')", (Math.random()*750)+250);
// see it immediately
				$('#form-fields', this).empty().append(data);
			}
		);

		return false;
	});
	
	$('#contact form :text')
		.focus(function(){
			$(this).addClass('focus');
		})
		.blur(function(){
			$(this).removeClass('focus');
			updateErrorStatus.apply(this);
		})
		.change(updateStatus)
		.keyup(updateStatus)
		.each(updateStatus)
	;
});

var emailRE = /\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;

function updateErrorStatus() {
	if (isEmpty($(this).val())) {
		$(this).filter('.required').addClass('error');
	}
	else {
		$(this).removeClass('error').removeClass('warning');
		if (this.id == "email") {
			if (!emailRE.test($(this).val())) {
				$(this).addClass('error');
			}
		}
	}
	$(this).parents('form')
		.find('fieldset.required')
			.addClass('error')
			.find('input').each(function() {
				if (!isEmpty($(this).val()))
					$(this).parents('fieldset.required').removeClass('error').removeClass('warning');
			})
	;
	/*$(this).parents('form').find('fieldset.required').addClass('error').each(function() {
		$('input', this).each(function(){
			if (!isEmpty($(this).val())) {
				$(this).parent.removeClass('error').removeClass('warning');
			}
		});
	});*/
	updateSubmitButton();
}

function updateStatus() {
	if (isEmpty($(this).val())) {
		$(this).filter('.required').addClass('warning');
	}
	else {
		$(this).removeClass('error').removeClass('warning');
		if (this.id == "email") {
			if (!emailRE.test($(this).val())) {
				$(this).addClass('warning');
			}
		}
	}

	/* Any field in the set is required
	$(this).parents('form')
		.find('fieldset.required')
			.addClass('error')
			.find('input').each(function() {
				if (!isEmpty($(this).val()))
					$(this).parents('fieldset.required').removeClass('error').removeClass('warning');
			})
	;*/

	updateSubmitButton();
}

function isEmpty(str) {
	if ($.trim(str) == '') return true;
	return false;
}

function updateSubmitButton() {
	var form = document.getElementById('contact');
	var button = document.getElementById('send');
	if ($('.warning, .error', form).length > 0) {
		$(button).attr('disabled', 'disabled');
	}
	else {
		$(button).removeAttr('disabled');
	}
}
