// $Id: FormCtlSite.js,v 1.2 2009/08/15 13:17:59 cmanley Exp $
// Copyright (c) 2009, Craig Manley (craigmanley.com)


// Site specific FormCtl stuff
FormCtl.prototype.Site = {
	charsDateISO: '0123456789-',
	charsDateNL: '0123456789-',
	charsDigits: '0123456789',
	charsFloat: '0123456789.',
	charsFloatNL: '0123456789,',
	charsInitials: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.',
	charsPostalcodeNL: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
	charsTelephone: '0123456789-+ ()',
	charsUnsignedFloat: '0123456789.',
	errorMsgRequired: 'Dit veld is verplicht!',
	errorMsgSyntax: 'Invoer is onjuist!',
	formOnSubmit: function(f) {
		if (!f.controller.validateForm()) {
			alert('Één of meerdere velden zijn niet (correct) ingevuld. Controleer uw invoer aub.');
			return false;
		}
		return true;
	},
	reDateISO		: /^(\d{4})-([0-1]\d)-([0-3]\d)$/,
	reDateISOStrict : /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/,
	reDateNL		: /^([0-9]{1,2})-([0-9]{1,2})-([0-9]{4})$/,
	reInitials		: /^[A-Za-z\. ]{1,10}$/,
	reLatitudeNL	: /^5[0-3](?:\.[0-9]+)?$/,	// 50.750359 - 53.554332
	reLongitudeNL	: /^[3-7](?:\.[0-9]+)?$/,	// 3.358276 - 7.228403
	rePassword		: /^.{5,32}$/,
	rePostalcodeNL	: /^[1-9][0-9]{3} ?[A-Za-z]{2}$/,
	rePosINT		: /^[1-9][0-9]{0,9}$/,
	reUINT			: /^[0-9]{1,10}$/,
	rePosByte		: /^[1-9][0-9]{0,2}$/,
	reUByte			: /^[0-9]{1,3}$/,
	reTelephone		: /^[0-9\(\) \-\.]{10,20}$/,
	reEmail			: /^.{6,100}$/,
	validateBirthDateISO: function(s) {
		if (!(s.length && s.match(FormCtl.prototype.Site.reDateISO))) {
			return false;
		}
		var y = parseInt(RegExp.$1,10);
		var m = parseInt(RegExp.$2,10);
		var d = parseInt(RegExp.$3,10);
		var date = new Date(y, m - 1, d);
		if (!((d == date.getDate()) && (m == date.getMonth()+1) && (y == date.getFullYear()))) {
			throw 'Datum bestaat niet.';
		}
		var now = new Date();
		if (date.getTime() > now.getTime()) {
			throw 'Bent u soms een tijdreiziger?';
		}
		if (now.getFullYear() - y > 110) {
			throw 'Wees eerlijk aub.';
		}
		if (now.getFullYear() - y < 10) {
			throw 'U bent te jong.';
		}
		return true;
	},
	validateBirthDateNL: function(s) {
		if (!(s.length && s.match(FormCtl.prototype.Site.reDateNL))) {
			return false;
		}
		var d = parseInt(RegExp.$1,10);
		var m = parseInt(RegExp.$2,10);
		var y = parseInt(RegExp.$3,10);
		var date = new Date(y, m - 1, d);
		if (!((d == date.getDate()) && (m == date.getMonth()+1) && (y == date.getFullYear()))) {
			throw 'Datum bestaat niet.';
		}
		var now = new Date();
		if (date.getTime() > now.getTime()) {
			throw 'Bent u soms een tijdreiziger?';
		}
		if (now.getFullYear() - y > 110) {
			throw 'Wees eerlijk aub.';
		}
		if (now.getFullYear() - y < 8) {
			throw 'U bent te jong.';
		}
		return true;
	},
	validateDateISO: function(s) {
		if (!(s.length && s.match(FormCtl.prototype.Site.reDateISO))) {
			return false;
		}
		var y = parseInt(RegExp.$1,10);
		var m = parseInt(RegExp.$2,10);
		var d = parseInt(RegExp.$3,10);
		var date = new Date(y, m - 1, d);
		return (d == date.getDate()) && (m == date.getMonth()+1) && (y == date.getFullYear());
	},
	validateDateNL: function(s) {
		if (!(s.length && s.match(FormCtl.prototype.Site.reDateNL))) {
			return false;
		}
		var d = parseInt(RegExp.$1,10);
		var m = parseInt(RegExp.$2,10);
		var y = parseInt(RegExp.$3,10);
		var date = new Date(y, m - 1, d);
		return (d == date.getDate()) && (m == date.getMonth()+1) && (y == date.getFullYear());
	},
	validatePastDateISO: function(s) {
		if (!(s.length && s.match(FormCtl.prototype.Site.reDateISO))) {
			return false;
		}
		var y = parseInt(RegExp.$1,10);
		var m = parseInt(RegExp.$2,10);
		var d = parseInt(RegExp.$3,10);
		var date = new Date(y, m - 1, d);
		if (!((d == date.getDate()) && (m == date.getMonth()+1) && (y == date.getFullYear()))) {
			return false;
		}
		var now = new Date();
		if (date.getTime() > now.getTime()) {
			throw 'Bent u soms een tijdreiziger?';
		}
		return true;
	},
	validatePastDateNL: function(s) {
		if (!(s.length && s.match(FormCtl.prototype.Site.reDateNL))) {
			return false;
		}
		var d = parseInt(RegExp.$1,10);
		var m = parseInt(RegExp.$2,10);
		var y = parseInt(RegExp.$3,10);
		var date = new Date(y, m - 1, d);
		if (!((d == date.getDate()) && (m == date.getMonth()+1) && (y == date.getFullYear()))) {
			return false;
		}
		var now = new Date();
		if (date.getTime() > now.getTime()) {
			throw 'Bent u soms een tijdreiziger?';
		}
		return true;
	},
	validateEmail: function(s) {
		var atpos = s.lastIndexOf("@");
		if (s.indexOf('@') != atpos) {
			throw 'Een e-mail adres moet exact één "@" teken bevatten.';
		}
		if (atpos < 1) { return false; }
		if (atpos == s.length - 1) { return false; }
		if (atpos > 64) { return false; }
		if (s.length - atpos > 255) { return false; }
		var lastDot = s.lastIndexOf(".");
		if (lastDot > atpos + 1 && lastDot < s.length - 1) { return true; }
		if (s.charAt(atpos + 1) == '[' &&  s.charAt(s.length - 1) == ']') { return true; }
		return false;
	},
	validatePassword: function(s) {
		if (s.length < 5) {
			throw 'Een wachtwoord dient minimaal 5 tekens lang zijn.';
		}
		/*
		if (!s.match(/[^A-Za-z]/)) {
			throw 'Een wachtwoord dient minimaal 1 cijfer of leesteken te bevatten.';
		}
		*/
		if (s.match(/(^\s+|\s+$)/)) {
			throw 'Een wachtwoord mag niet beginnen of eindigen met een spatie.';
		}
		return true;
	},
	validateUByte: function(s) {
		return /^\d+$/.test(s) && (s <= 255);
	}
};

