/**
 * DHTML date validation script for dd/mm/yyyy. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh = "-";
var minYear = 1900;
var maxYear = 2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31;
		if (i == 4 || i == 6 || i == 9 || i == 11) {this[i] = 30}
		if (i == 2) {this[i] = 29}
   }
   return this
}

function isDate(dtStr, strWho){
	var daysInMonth = DaysArray(12);
	var pos1 = dtStr.indexOf(dtCh);
	var pos2 = dtStr.indexOf(dtCh, pos1 + 1);
	var strDay = dtStr.substring(0, pos1);
	var strMonth = dtStr.substring(pos1 + 1, pos2);
	var strYear = dtStr.substring(pos2 + 1);
	strYr = strYear;
	if (strDay.charAt(0) == "0" && strDay.length > 1) strDay = strDay.substring(1);
	if (strMonth.charAt(0) == "0" && strMonth.length > 1) strMonth = strMonth.substring(1);
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0) == "0" && strYr.length > 1) strYr = strYr.substring(1);
	}
	month = parseInt(strMonth);
	day = parseInt(strDay);
	year = parseInt(strYr);

	if(strWho == '') strWho = 'Uw';

	if (pos1 == -1 || pos2 == -1) {
		return "\n - " + strWho + " geboortedatum is onjuist ingevoerd. De juiste notatie is: dd-mm-yyyy";
	}
	if (strMonth.length < 1 || month < 1 || month > 12) {
		return "\n - " + strWho + " geboortedatum is onjuist ingevoerd. Voer een geldige datum in";
	}
	if (strDay.length < 1 || day < 1 || day > 31 || (month == 2 && day > daysInFebruary(year)) || day > daysInMonth[month]) {
		return "\n - " + strWho + " geboortedatum is onjuist ingevoerd. Voer een geldige datum in";
	}
	if (strYear.length != 4 || year == 0 || year < minYear || year > maxYear) {
		return "\n - " + strWho + " geboortedatum is onjuist ingevoerd. Voer het volledige 4-cijferige jaartal in";
	}
	if (dtStr.indexOf(dtCh, pos2 + 1) != -1 || isInteger(stripCharsInBag(dtStr, dtCh)) == false) {
		return "\n - " + strWho + " geboortedatum is onjuist ingevoerd. De juiste notatie is: dd-mm-yyyy";
	}
	return '';
}


function is_18plus(strGeboorteDatum) {
	var dtNow = new Date();
	var dtGeboorteDatum = strGeboorteDatum.split('-');
	var y = parseInt(parseFloat(dtGeboorteDatum[2]));
	var m = parseInt(parseFloat(dtGeboorteDatum[1]));
	var d = parseInt(parseFloat(dtGeboorteDatum[0]));

	if(dtNow.getFullYear() - y > 18) {
		return true;
	}

	if(dtNow.getFullYear() - y == 18) {
		if((dtNow.getMonth() + 1) * 100 + dtNow.getDate() >= m * 100 + d) {
			return true;
		}
	}

	return false;
}


function elf_proef(bankrekeningnummer) {
	// verwijder alle tekens die geen cijfers zijn
	bankrekeningnummer = bankrekeningnummer.replace(/\D/, "");
	aantal_tekens = bankrekeningnummer.length;
	var som = 0;
	// loop door de 9 cijfers met de 11 proef formule
	for (i = 1; i < 10; i++) {
		getal = bankrekeningnummer.charAt(i - 1);
		som += getal * (10 - i);
	}
	// geef resultaat van check terug
	if (som % 11 == 0 && som > 0 && aantal_tekens == 9) {
		return true
	} else {
		return false
	}
}


function valid_rekeningnummer(rekeningnummer) {
	rekeningnummer = rekeningnummer.replace(/\D/g, '');
	if(rekeningnummer.length >= 2 && rekeningnummer.length <= 7) {
		return true;	// postbanknummer
	} else {
		return elf_proef(rekeningnummer);
	}
}


function valid_email(mailaddress) {
	var regex = /^[a-zA-Z0-9._-]+@([a-zA-Z0-9.-]+\.)+[a-zA-Z0-9.-]{2,4}$/;
	return regex.test(mailaddress);
}


function show_lgp_form() {
	$('#lesgeldplichtige').animate({height: 'show', opacity: 'show'}, 200);

	// sifr doen
	if(!$('span.form-section-head').hasClass('sIFR-replaced')) {
		sIFR.replaceElement(named({sSelector:"span.form-section-head", sFlashSrc:"/swf/glypha-lt-std.swf", sColor:"#ffffff", sLinkColor:"#000000" , sHoverColor:"#59af23", sWmode:"transparent", nPaddingTop:0, nPaddingBottom:0, sFlashVars:"textalign=left&offsetTop=0"}));
	}

	$('input[name=lgp_required]').val('1');
}


function hide_lgp_form() {
	$('#lesgeldplichtige').animate({height: 'hide', opacity: 'hide'}, 200);

	$('input[name=lgp_required]').val('0');
}


$(document).ready(function() {
	if($('form[name=inschrijving]').length){

		$().maxlength();

		// Velden masken
		$('input[name=lgp_postcode]').mask("9999 aa");
		$('input[name=postcode]').mask("9999 aa");
		$('input[name=gebdatum], input[name=lgp_gebdatum]').mask("99-99-9999");
		$('input[name=telefoon]').mask("9999999999");


		$('input[name=gebdatum]').change(function(){
			if(!is_18plus($(this).val())) {
				show_lgp_form();
			} else {
				hide_lgp_form();
			}
		});

		$('textarea[name=opmerking]').change(function() {
			$(this).val($(this).val().substr(0,200));
		});

		$('input[name=bank]').change(function(){
			$(this).val($(this).val().replace(/\D/g, ''));
		});


		$('form[name=inschrijving]').submit(function() {

			// validatie

			// ll checks
			var errors = new String();
			if($('input[name=naam]').val() == '') 			errors += '\n - Geen naam ingevuld';
			if($('input[name=voornaam]').val() == '')		errors += '\n - Geen voornaam ingevuld';

			if($('input[name=gebdatum]').val() == '') {
				errors += '\n - Geen geboortedatum ingevuld';
			} else {
				errors += isDate($('input[name=gebdatum]').val());
			}

			if(!$('input[name=geslacht]:checked').length)	errors += '\n - Geen geslacht gekozen';
			if($('input[name=straatnaam]').val() == '') 	errors += '\n - Geen straatnaam ingevuld';
			if($('input[name=huisnr]').val() == '') 		errors += '\n - Geen huisnummer ingevuld';
			if($('input[name=postcode]').val() == '') 		errors += '\n - Geen postcode ingevuld';
			if($('input[name=plaats]').val() == '') 		errors += '\n - Geen plaats ingevuld';
			if($('input[name=telefoon]').val() == '') 		errors += '\n - Geen telefoonnummer ingevuld';
			if($('input[name=email]').val() == '') {
				errors += '\n - Geen e-mailadres ingevuld';
			} else {
				if(!valid_email($('input[name=email]').val())) errors += '\n- Geen geldig e-mailadres ingevuld';
			}

			// lgp checks
			if($('input[name=lgp_required]').val() == '1') {

				if($('input[name=lgp_naam]').val() == '') 			errors += '\n - Lesgeldplichtige: Geen naam ingevuld';
				if($('input[name=lgp_voornaam]').val() == '')		errors += '\n - Lesgeldplichtige: Geen voornaam ingevuld';

				if($('input[name=lgp_gebdatum]').val() == '') {
					errors += '\n - Lesgeldplichtige: Geen geboortedatum ingevuld';
				} else {
					lgp_gebdatum_error = isDate($('input[name=lgp_gebdatum]').val(), 'Lesgeldplichtige');
					errors += lgp_gebdatum_error;
					if(lgp_gebdatum_error == '') {
						if(!is_18plus($('input[name=lgp_gebdatum]').val())) {
							errors += '\n - De lesgeldplichtige moet 18 of ouder zijn';
						}
					}
				}

				if(!$('input[name=lgp_geslacht]:checked').length)	errors += '\n - Lesgeldplichtige: Geen geslacht gekozen';
				if($('input[name=lgp_straatnaam]').val() == '') 	errors += '\n - Lesgeldplichtige: Geen straatnaam ingevuld';
				if($('input[name=lgp_huisnr]').val() == '') 		errors += '\n - Lesgeldplichtige: Geen huisnummer ingevuld';
				if($('input[name=lgp_postcode]').val() == '') 		errors += '\n - Lesgeldplichtige: Geen postcode ingevuld';
				if($('input[name=lgp_plaats]').val() == '') 		errors += '\n - Lesgeldplichtige: Geen plaats ingevuld';

			}

			if(!$('input[name=betaling]:checked').length)	errors += '\n - Geen betaalkeuze gemaakt';

			if(($('input[name=betaling]:checked').val() == 'incasso' ||
			    $('input[name=betaling]:checked').val() == 'termijn') &&
			   !$('input[name=machtiging]:checked').length)	errors += '\n - Voor een incasso dient u Scholen in de Kunst te machtigen';


			if($('input[name=betaling]:checked').val() != 'nota') {
				if($('input[name=bank]').val() == ''){
					errors += '\n - Geen rekeningnummer ingevuld';
				} else {
					if(!valid_rekeningnummer($('input[name=bank]').val())) errors += '\n- Geen geldig rekeningnummer ingevuld';
				}
			}

			if(!$('#chk_alv:checked').length)				errors += '\n - U dient akkoord te gaan met de Algemene Voorwaarden';


			if(errors.length) {
				alert('De volgende fout(en) werd(en) geconstateerd:\n' + errors);
				return false;
			}
		});

	}
	if($('form[name=nieuwsbrief]').length){
		$().maxlength();
		
		// Velden masken
		$('input[name=lgp_postcode]').mask("9999 aa");
		$('input[name=postcode]').mask("9999 aa");
		$('input[name=gebdatum], input[name=lgp_gebdatum]').mask("99-99-9999");
		$('input[name=telefoon]').mask("9999999999");


		$('input[name=gebdatum]').change(function(){
			if(!is_18plus($(this).val())) {
				show_lgp_form();
			} else {
				hide_lgp_form();
			}
		});

		$('form[name=nieuwsbrief]').submit(function() {
			// validatie

			// ll checks
			var errors = new String();
			if($('input[name=naam]').val() == '') 			errors += '\n - Geen naam ingevuld';
			if($('input[name=voornaam]').val() == '')		errors += '\n - Geen voornaam ingevuld';

			if($('input[name=gebdatum]').val() == '') {
				errors += '\n - Geen geboortedatum ingevuld';
			} else {
				errors += isDate($('input[name=gebdatum]').val());
			}

			if(!$('input[name=geslacht]:checked').length)	errors += '\n - Geen geslacht gekozen';
			if($('input[name=email]').val() == '') {
				errors += '\n - Geen e-mailadres ingevuld';
			} else {
				if(!valid_email($('input[name=email]').val())) errors += '\n - Geen geldig e-mailadres ingevuld';
			}

			if(errors.length) {
				alert('De volgende fout(en) werd(en) geconstateerd:\n' + errors);
				return false;
			}
		});
	}
});