/* SVN File $Id: app-register.js 80 2011-10-15 09:16:27Z SerialGraphics $ */
$(document).ready(function(){
	/* FLASH-MESSENGER */
	$("div.flash-messenger-close a").click(function() {
		$(this).closest("div.flash-messenger").slideUp();
	});
	
	/* Date picker */
	$("input.datepicker").datepicker();
	$("#date_received").datepicker("option", "maxDate", '+0');
	
	/* Print action */
	$(".action-print").live("click", function() {
		window.print();
		return false;
	});
	
	/* Resizable textarea */
	$("textarea").resizable();
	
	
	
	/* Registration app */
	showHideSkipperElements();
	
	// Bind the birth date change
	$('#form-register-skipper #birthdate').blur(function() {
		showHideSkipperElements();
	});
	// Bind the what change to the what form element
	$("input[name='what']").change(function() {
		loadGroups();
		$('#groups-label').fadeIn();
		$('#groups-element').fadeIn();
		$('#submit-element').fadeIn();
	});
	
	// Bind a form submit button check on the form
	$('#form-register-skipper').submit(function() {
		if($('#submit-element').css('display') == 'none') {
			return false;
		}
	});
	
	
	/**
	 * Check what we have to show
	 */
	function showHideSkipperElements() {
		if(!$('#form-register-skipper #birthdate').length) {
			return;
		}
		
		// check if the birth date is set
		var birthYear = getBirthYear();
		
		if(birthYear == false || birthYear.length < 1) {
			hideAllGroupWhat();
			return;
		}
		
		// get the age of the birth date
		var now = new Date();
		var skipperAge = now.getFullYear() - birthYear;
		
		// check min age
		if(skipperAge < 7) {
			// hide form elements
			hideAllGroupWhat();
			// create a new dialog
			var $dialog = $('<div></div>')
			.html('Om te kunnen beginnen met Rope Skipping moet de skipper geboren zijn in <strong>' + (now.getFullYear()-7) + ' of vroeger</strong>.')
			.dialog({
				autoOpen: false,
				title: 'Te jong',
				modal: true,
				resizable: false,
				buttons: { "Ok": function() { $(this).dialog("close"); } }
			});
			$dialog.dialog('open');
			return;
		}
		
		// if min age only registration as new skipper
		if(skipperAge == 7) {
			//$('#what-starter').attr('checked', 'checked');
			loadGroups();
			
			$("label[for='what-recreation']").hide();
			$("label[for='what-competition']").hide();
			$('#what-label').show();
			$('#what-element').show();
			$('#groups-label').show();
			$('#groups-element').show();
			$("label[for='what-recreation']").show();
      $("label[for='what-competition']").show();
			$('#group_what-element').fadeIn();
			$('#submit-element').fadeIn();
			return;
		}
		
		if(skipperAge > 99) {
			// hide form elements
			hideAllGroupWhat();
			// create a new dialog
			var $dialog = $('<div></div>')
			.html('Om op de gezegende leeftijd van <strong>' + skipperAge + ' jaar</strong> nog aan Rope Skipping te doen, hebt u een dokters attest nodig.')
			.dialog({
				autoOpen: false,
				title: 'Dokters attest vereist!',
				modal: true,
				resizable: false,
				buttons: { "Ok": function() { $(this).dialog("close"); } }
			});
			$dialog.dialog('open');
			return;
		}
		
		// show the complete form
		$("label[for='what-recreation']").show();
		$("label[for='what-competition']").show();
		$('#what-label').show();
		$('#what-element').show();
		
		// load the groups
		loadGroups();
				
		$('#group_what-element').fadeIn();
	}
	
	/**
	 * Function to get the birth year
	 */
	function getBirthYear() {
		// check if the birth date is set
		var birthdate = $('#birthdate').val();
		
		if(!birthdate) {
			return false;
		}
		
		// get the age of the birth date
		var dateParts = birthdate.split(/\W+/);
		if(dateParts.length != 3) {
			return false;
		}
		return parseInt(dateParts[2]);
	}
	
	/**
	 * Function to load the possible groups by what & age
	 */
	function loadGroups() {
		// get the current what
		var realm = $("input[name='what']:checked").val();
		// get the current age
		var birthYear = getBirthYear();
		// get the current selected groups
		var groups = [];
		$("input[name='groups[]']:checked").each(function(){
			groups.push($(this).val());
		});
		
		// check if is admin
		var urlGroups = ($('#form-register-skipper #isAdmin').length)
			? '/admin/skipper/register/js-group/?birthYear='
			: '/inschrijven/js-group/?birthYear=';
		
		// load the possible groups
		$('#groups-element').load(urlGroups + birthYear + '&realm='+realm+'&groups='+groups.join("-"), function(){
			if($('#groups-element').html().length > 0) {
				seperateGroupCheckboxes();
				$('#groups-label').fadeIn();
				$('#groups-element').fadeIn();
			} else {
				$('#groups-label').hide();
				$('#groups-element').hide();
			}
		});
	}
	
	// add extra margin between group and optional groups
	function seperateGroupCheckboxes() {
		var element = $('#groups-element input.input-checkbox:eq(0)');
		if(element && $(element).attr('type') == 'checkbox') {
			$(element).parent('label').addClass('checkbox-spacer');
		}
	}
	
	/**
	 * Hide all what group elements at once
	 */
	function hideAllGroupWhat() {
		$('#group_what-element').hide();
		$('#what-label').hide();
		$('#what-element').hide();
		$('#groups-label').hide();
		$('#groups-element').hide();
		$('#submit-element').hide();
	}
});
