(function($) {
	var $window   = $(window);
	var $form     = $('#form');
	var $submit   = $form.find(':submit');
	var $accept   = $form.find('#accept');
	var $receipt  = $('#receipt');
	var optionalFields= ['application_recipient_state'];
	var formElements  = [];
	var accepted      = true;
	
	function init () {
		// Handle clicking on 'accept' button
		if ($accept.length) {
			accepted = false;
			var check = $accept.find('.checkbox');
			check.click(function() {
				check.toggleClass('checked');
				accepted = check.hasClass('checked');
				validate();
			});
		}
		
		$form.bind('keyup', function(event) {
			validate();
		});
		
		// Store form elements
		$form.find('textarea, input:text').each(function(){
			var $elem = $(this);
                        
			if($.inArray($elem.attr('id'), optionalFields)){ // funker denne omvendt av vanlig?..
				var $label = $form.find('label[for=' + $elem.attr('id') + ']');
				var data = {
					elem: $elem, 
					label: $label, 
					focused: false
				};
				formElements.push(data);
				$elem.bind('focusin', function(event) {
					data.focused = true;
				});
			}
		});
		
		toggleSubmitButton('disable');
		
		$('html').removeClass('no-js').addClass('js');
		
		initReceiptDialogue();
		
	}
	
	function validate () {
		var valid = true;
		for (var i = 0, n = formElements.length; i < n; i++) {
			var item = formElements[i];
			if (item.elem.val() === '') {
				valid = false;
				if (item.focused) item.label.addClass('error');
			} else {
				item.label.removeClass('error');
			}
		}
		if (valid && accepted) {
			toggleSubmitButton('enable');
		} else {
			toggleSubmitButton('disable');
		}
	}
	
	function toggleSubmitButton(buttonState){
		if(buttonState === 'disable'){
			$submit
			.addClass('disabled')
			.attr('disabled', 'disabled')
			.css({
				cursor: 'default'
			});
		}
		else if(buttonState === 'enable'){
			$submit
			.removeClass('disabled')
			.removeAttr('disabled')
			.css({
				cursor: 'pointer'
			});
		}
	}
	
	function initReceiptDialogue(){
		var receipt = $('.application-receipt');
		if(receipt.length){
			toggleSubmitButton('disable');
			receipt.find('.close-dialogue').click(function(e){
				e.preventDefault();
				receipt.fadeOut(1000, function(){
					receipt.remove();
					toggleSubmitButton('enable');
				})
			});
		}
	}
	
	$(init);
})(jQuery);
