(function($) {

	$('#portfolio-nav ul').animate({bottom: "-14px"}, 1000);

	var contactForm = function() {
		var $container = $('#contact'),
			$tab = $container.find('#contact-tab'),
			$form = $container.find('#email-form'),
			$fields = $form.find('input:text, textarea'),
			$submitButton = $form.find(':submit'),
			emailPattern = /^([a-zA-Z0-9_\.\-\+])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
			errorClass = "error",
			validClass = "ok";

		function validate($el) {
			if ($el.val().length === 0) {
				$el.removeClass(validClass).addClass(errorClass);
				return;
			}
			if ($el.attr('name') === 'email' && !emailPattern.test($el.val())) {
				$el.removeClass(validClass).addClass(errorClass);
				return;
			}
			$el.removeClass(errorClass).addClass(validClass);
		}

		function tabHandler() {
			$tab.toggle(function() {
				$container
					.animate({right: "-3px"}, 500)
					.removeClass('docked');
			}, function() {
				$container
					.animate({right: "-230px"}, 500)
					.addClass('docked');
			});
		}

		function validationHandler() {
			$fields
				.blur(function() {
					validate($(this));
				});
		}

		function submitHandler() {
			$submitButton.click(function() {
				if ($fields.length == $fields.filter('.' + validClass).length) {
					var contactFormData = $form.serialize();
					$.ajax({
						type: "POST",
						url: window.location.href,
						data: contactFormData,
						success: function() {
							$container
								.addClass('docked');
							$("<strong>Thanks for the message!</strong>")
								.insertBefore($submitButton)
							$submitButton
								.remove();
							$fields.each(function() {
								$(this).attr("disabled", true)
							});
						}
					});
				} else {
					$fields.blur();
				}
				
				return false;
			});
		}

		return {
			init : function() {
				tabHandler();
				validationHandler();
				submitHandler();
				$form.submit(function() {
					return false;
				});
			}
		}
	}();

	contactForm.init();

})(jQuery);