var formHandler = {
	age: function(){
		var form = $('contributie'), age = formHandler.calculateAge(), bday = new Date(form.year.value, form.month.value-1, form.day.value);
	//	var peil = ((new Date((new Date()).getFullYear()-10, 9, 1)).getTime() < bday.getTime());		
	//	var tennispeil = ((new Date((new Date()).getFullYear()-8,3,1)).getTime() < bday.getTime());
		var hide = function(el){
			if (!El.hasClassName(el, 'hiddenAge')) El.addClassName(el, 'hiddenAge'); 
	//		el.getElementsByTagName('input')[0].checked = false;
		};
		var unhide = function(el){El.removeClassName(el, 'hiddenAge')};
		
		/*
		 * Er zijn verschillende categorien van leden binnen iedere sport, afhankelijk van de leeftijd
		 * Leeftijden zijn vanaf-tot-en-MET, per regel de veranderende category in ALLCAPS
		 *
		 *	Leeftijd			Golf		Hockey			Tennis
		 *	4 t/M6 			junior	BENJAMIN			tenniskid
		 *	6 t/M 7			junior	HMINI (peil 1-10)	tenniskid
		 *	8 t/M 10 		junior	hmini			TMINI (peil 1-4)
		 *	11 t/M 17		junior	JUNIOR			JUNIOR
		 * 	> 17				SENIOR	SENIOR			SENIOR
		 */
		
		var thisYear = (new Date()).getFullYear();
		var peil = {hmini: null, hjunior: null, tenniskid: null, tennisjunior: null}; 
		peil.hmini = (new Date(thisYear - 7, 10, 1)).getTime() < bday.getTime();
		peil.hjunior = (new Date(thisYear - 10, 8, 1)).getTime() < bday.getTime();
		peil.tenniskid = (new Date(thisYear - 7, 3, 1)).getTime() < bday.getTime();
		peil.tennisjunior = (new Date(thisYear - 9, 3, 1)).getTime() < bday.getTime();
		
		var table = {golf: $('golf'), hockey: $('hockey'), tennis: $('tennis')};
		// senioren, altijd wanneer age >= 18
		El.getElementsByClassName('senior', 'tr').each(age >= 18? unhide:hide);
		// golf
		El.getElementsByClassName('junior', 'tr', table.golf).each(age < 18? unhide:hide);
		// hockey
		El.getElementsByClassName('benjamin', 'tr', table.hockey).each(peil.hmini? unhide:hide);
		El.getElementsByClassName('hmini', 'tr', table.hockey).each(!peil.hmini && peil.hjunior? unhide:hide);
		El.getElementsByClassName('junior', 'tr', table.hockey).each(!peil.hmini && !peil.hjunior && age < 18? unhide:hide);
		// tennis
		El.getElementsByClassName('tenniskid', 'tr', table.tennis).each(peil.tenniskid? unhide:hide);
		El.getElementsByClassName('tmini', 'tr', table.tennis).each(!peil.tenniskid && peil.tennisjunior? unhide:hide);
		El.getElementsByClassName('junior', 'tr', table.tennis).each(!peil.tenniskid && !peil.tennisjunior && age < 18? unhide:hide);
		
		sport = form.golf;
		for(i = 0; i < sport.length; i++) sport[i].checked = false;
		sport = form.hockey;
		for(i = 0; i < sport.length; i++) sport[i].checked = false;
		sport = form.tennis;
		for(i = 0; i < sport.length; i++) sport[i].checked = false;
	},
	calculateAge: function(){
		var form = $('contributie'), today = new Date(), bday = new Date(form.year.value > 0?form.year.value:1900, form.month.value-1, form.day.value), age = today.getFullYear() - bday.getFullYear();
		bday.setFullYear(today.getFullYear());
		if (bday.getTime() > today.getTime()) age--;
		return age;
	},
	changeSex: function(){
		var male = $('man').checked;
		var hide = function(el){El.addClassName(el, 'hiddenSex'); el.checked = false};
		var unhide = function(el){El.removeClassName(el, 'hiddenSex')};
		El.getElementsByClassName('man',   'tr').each(male? unhide:hide);
		El.getElementsByClassName('vrouw', 'tr').each(male? hide:unhide);
	},
	hide: function(el){El.addClassName(el, 'hidden')},
	unhide: function(el){El.removeClassName(el, 'hidden')},
	register: function(){
		var form = $('contributie');
		var golfCheck = $('golfCheck');
		if(golfCheck){
			$('golfCheck').onclick = function(){
				El.toggleClassName($('golf'), 'hidden');
				for(var i = 0; i < form.golf.length; i++) form.golf[i].checked = false;
			};
		}
		var hockeyCheck = $('hockeyCheck');
		if(hockeyCheck){
			hockeyCheck.onclick = function(){
				El.toggleClassName($('hockey'), 'hidden');
				for(var i = 0; i < form.hockey.length; i++) form.hockey[i].checked = false;
				//form.zaalhockey.checked = false;
			};
		}
		var tennisCheck = $('tennisCheck');
		if(tennisCheck){
			tennisCheck.onclick = function(){
				El.toggleClassName($('tennis'), 'hidden');
				for(var i = 0; i < form.tennis.length; i++) form.tennis[i].checked = false;
			};
		}
		['man','vrouw'].each(function(el){
//		return alert(el+' '+$(el).tagName);
//			Event.add($(el), 'change', formHandler.changeSex);
			var el = $(el);
			if(el){
				el.onchange = formHandler.changeSex;
			}
		});
		/*
		Event.add(form.year, 'change', formHandler.age);
		Event.add(form.month, 'change', formHandler.age);
		Event.add(form.day, 'blur', formHandler.age);
		Event.add($('berekenbutton'), 'click', formHandler.bereken);
		*/
		if(form){
			form.year.onchange = formHandler.age;
			form.month.onchange = formHandler.age;
			form.day.onblur = formHandler.age;
		}
		var berekenbutton = $('berekenbutton');
		if(berekenbutton){
			berekenbutton.onclick = formHandler.bereken;
		}
		//Event.add(form, 'submit', function(){formHandler.bereken();return false});
	},
	bereken: function(){
		if (!($('contributie').year.value > 0)){
			alert('LET OP: Geen geboortejaar aangegeven.\nZonder geboortedatum kan er geen contributie berekend worden.');
			return false;
		}		
		var form = $('contributie'), age = formHandler.calculateAge(), sport;
		var sum = 0, sumEntree = (age < 10 || $('al-lid').checked) ? 0:58, flag = false, set = false, i;
		var hockeyBenjamin = $('hbenjamins').checked, tennisBenjamin = ($('tjunioroud').checked && age < 8) || $('tenniskids').checked;
		
		//sum = (((hockeyBenjamin || tennisBenjamin) && age < 6) || (!hockeyBenjamin && tennisBenjamin && age<8))? 0:136.5;
		sport = form.golf;
		for(i = 0; i < sport.length; i++) {
			if(sport[i].checked) sum += parseFloat(sport[i].value);
		}
		flag = sum > 0; // if sum > 0: there was a check for golf and contrib is to be payed
		sport = form.hockey;
		for(i = 0; i < sport.length; i++) {
			if(sport[i].checked){
				set = true;
				sum += parseFloat(sport[i].value);
			}
		}
		/*if (form.zaalhockey.checked){
			if (set){
				sum += parseFloat(form.zaalhockey.value);
			}else{
				alert('Zaalhockey is alleen mogelijk in combinatie met een andere vorm van hockey.');
				return false;
			}
		}*/
		/* only add contrib iff:
		 * + already for some other part
		 * + not a benjamin and something has been set
		 */
		flag = flag || (!hockeyBenjamin && set);
		set = false;
		sport = form.tennis;
		for(var i = 0; i < sport.length; i++){
			if(sport[i].checked){
				set = true;
				sum += parseFloat(sport[i].value);
			}
		}
		/* only add contrib iff:
		 * + already for some other part
		 * + not a benjamin and something has been set
		 */
		flag = flag || (!tennisBenjamin && set);
		
		if (flag) sum += 148.5;
		//alert('Te betalen: ' + sum + 'euro, entree '+sumEntree );
		$('econtributie').innerHTML = 'Entreegeld &#8364; '+formHandler.formatNumber(sumEntree);
		$('tcontributie').innerHTML = 'Te betalen contributie &#8364; '+formHandler.formatNumber(sum);
		return false;
	},
	formatNumber: function(n){
		var s = ''+n, as = s.split('.'); // toString, split
		if (!as[1]) return n+',--';
		return as[0]+','+as[1]+(as[1].length == 1?'0':'');
	}
}
Event.add(window, 'load', formHandler.register);