$(function()
{
	var statusBoxAnimationSpeed = 'normal';
	var statusBoxDuration = 5000;
	
	var statusBox = $('#status-box').hide();
	var statusMessageContainer = $('#status-message');
	$('#status-box-close').click(function()
	{
		statusBox.slideUp(statusBoxAnimationSpeed);
		return false;
	});
	
	var form = $('#contact-form');
	var fields = $('#contact-form :input:not(:submit):not(:button)');
	
	var nameField = $('#contact-name');
	var emailField = $('#contact-email');
	var companyNameField = $('#contact-company-name');
	var phoneNumberField = $('#contact-phone-number');
	var messageField = $('#contact-message');
	var submitButton = $('#contact-submit');
	var submitButtonText = submitButton.val();
	
	fields.filter('.required').blur(function()
	{
		var $this = $(this);
		setValidity($this, $this.val());
	});
	
	emailField.blur(function()
	{
		var $this = $(this);
		var value = $this.val();
		var regex = /^([a-zA-Z0-9_\.-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z]{2,3}){1,2})$/;
		setValidity($this, value && regex.test(value));
	});
	
	phoneNumberField.blur(function()
	{
		var $this = $(this);
		var value = $this.val();
		var regex = /^((\(?0(1|7)[0-9]{3}\)?)|(\+[0-9]{2}(\s|-)?(\(0\))?\(?[0-9]{4}\)?))(\s|-)?(([0-9]{3}(\s|-)?[0-9]{3})|([0-9]{2}(\s|-)?[0-9]{2}(\s|-)?[0-9]{2}))$/;
		setValidity($this, !value || regex.test(value));
	});
	
	submitButton.click(function()
	{
		fields.blur();
		if (fields.filter('.invalid').length > 0)
		{
			return false;
		}
		
		var data = { };
		fields.each(function()
		{
			var $this = $(this);
			var key = $this.attr('name');
			var value = $this.attr('value');
			data[key] = value;
		});
		
		submitButton.attr('disabled', 'disabled').addClass('disabled').val('Sending...');
		$.post(baseUrl + 'contact', data, function(data)
		{
			statusMessageContainer.html(data.message);
			statusBox.slideDown(statusBoxAnimationSpeed);
			
			if (data.success)
			{
				statusBox.removeClass('failure').addClass('success');
				form[0].reset();
				setTimeout(function()
				{
					statusBox.slideUp(statusBoxAnimationSpeed);
				}, statusBoxDuration);
			}
			else
			{
				statusBox.removeClass('success').addClass('failure');
			}
			
			submitButton.removeAttr('disabled').removeClass('disabled').val(submitButtonText);
		}, 'json');
		
		return false;
	});
	
	function setValidity(element, valid)
	{
		if (!valid)
		{
			element.removeClass('valid');
			element.addClass('invalid');
		}
		else
		{
			element.removeClass('invalid');
			element.addClass('valid');
		}
	}
});