jQuery( function ($) {

	var clearForm = function (form) {
		var inputs = form.find('input[type="text"], textarea');
		
		inputs.each( function () {
			this.value = '';
		});
	},
	
	validEmail = function (email) { // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
		return (/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i).test(email);
	},
	
	validateForm = function (form) {
		var inputs = form.find('input[type="text"], textarea').removeClass('error'), i = 0, error;
		
		for (; input = inputs[i++];) {
			var thisError = false;
			
			switch (input.type) {
				case 'text':
					if (!validEmail( input.value )) {
						error = thisError = true;
					}
					break;
				case 'textarea':
					if (!input.value.length > 0) {
						error = thisError = true;
					}
					break;
			}
			
			if (thisError) {
				$(input).addClass('error');
			}
		}
				
		return !error;
	},
	loaderEl, formFieldset,
	startLoading = (function () {
		var loadingTimer, loadingFrame = 0;
		
		function loader () {
			if (!loaderEl.is(':visible')) {
				clearInterval(loadingTimer);
				formFieldset.css('opacity', 1);
				$.fancybox.resize();
				
				return;
			}
			
			loaderEl.css('background-position', '0 ' + (loadingFrame * -40) + 'px');
			loadingFrame = (loadingFrame + 1) % 12;
		}
		
		return function () {
			formFieldset.css('opacity', .7);
			loaderEl.show();
			loadingTimer = setInterval(loader, 66);
		}
	})();
	
	$('a.openFancybox').fancybox({
		width: 800,
		height: 600,
		scrolling: 'no',
		hideOnContentClick: false,
		onComplete: function () {
			formFieldset = $('#contactInfo').find('fieldset:last');
			loaderEl = $('#send-loader');
		}
	});
	
	
	$('#fancybox-wrap').delegate('#contactInfo', 'submit', function (e) {
		e.preventDefault();
	
		var self = $(this),
			messageElem = self.find('p.callback-status').show();
		
		if (!validateForm( self )) {
			messageElem.removeClass('success').addClass('error').text( 'Dobbelsjekk markerte felter' );
			$.fancybox.resize();
			
			return false;
		}
		
		startLoading();
		
		$.post(self.attr('action'), self.serialize(), function (res) {
			switch (res.status) {
				case 'success':
					messageElem.removeClass('error').addClass('success').text( res.content );
					clearForm( self );
					break;
				case 'error':
				default:
					messageElem.removeClass('success').addClass('error').text( res.description );
					break;
			}
			
			loaderEl.hide();
		}, 'json');
		
		$.fancybox.resize();
	});
	
});
