/*** @author Theo van Oostrum theo@a2.nl* @version 1.0* @copyright A2 Automatisering B.V. 30-12-2008*/function validate(fields){	var msgs = {};	var valid = true;		for ( field in fields)	{		if(fields[field] != undefined)		{			if( field.indexOf('[') != -1 )			{				fieldName = field.substring(field.lastIndexOf('[')+1, field.lastIndexOf(']'));			}			else			{				fieldName = field;			}			if ( ( msg = validateField(fieldName, fields[field]) ) !== true )			{				valid = false;				msgs[field] = msg;			}		}		}		if ( ! valid )	{		return msgs;	}		return true;}function validateField( key, value ){	var validator = validation[key];		if ( value == "" || value == null )	{		if( validator['required'] == true )		{			return 'Dit is een verplicht veld';		}		else		{			return true;		}	}		var max_length = validator['max_length'];			if ( max_length != undefined && value.length > max_length )	{		return 'Veld mag niet langer dan ' + max_length + ' karakters zijn.';	}		if( validator['type'] == 'date' )	{		if  (value.length != 10)		{			return validator['msg'];		} 				var day = value.substring(0,2);		var month = value.substring(3,5);		var year = value.substring(6,10);				var date = new Date(parseInt(year), parseInt(month)-1, parseInt(day));				if( ! ( date.getDate() > 0 ) )		{			return validator['msg'];		}		}	else if (validator['type'] == 'int' )	{		var length = validator['length'];				if ( length != undefined )		{			var pattern = '^[0-9]{'+length+'}$';		}		else		{			var pattern = '^[0-9]*$';		}		var result = value.match(pattern);				if ( result == null || result[0] != value )		{			return validator['msg'];		}	}	else if ( validator['type'] == 'string' )	{		//Een string mag bevatten: alle letters en cijfers, whitespaces en de karakters: ',' , '.' , '`', '-' en '&'.		var pattern = "^[\\w\,\.\`\\'&\\-\\s]*?$";					var result = value.match(pattern);			if ( result == null || result[0] != value )		{			if ( validator['msg'] == undefined )			{				return 'Dit veld mag geen speciale karakters bevatten.'			}			return validator['msg'];		}	}	else if (validator['type'] == 'email')	{		if( value.indexOf('@') == -1 || value.lastIndexOf('.') <= value.lastIndexOf('@') )		{			return validator['msg'];		}	}	else if (validator['type'] == 'password')	{		//var pattern = '^[^;~><\/\\]*$';		var pattern = '^[^;~\/\\\\]*$';				var result = value.match(pattern);				if ( result == null || result[0] != value )		{			return validator['msg'];		}	}			return true;}var validation = {	'start' : 	{ 					'type' : 'date',					'required' : true,					'msg' : 'Dit veld moet de vorm \'dd-mm-jjjj\' hebben.'				},	'eind' : 	{ 					'type' : 'date',					'required' : false,					'msg' : 'Dit veld moet de vorm \'dd-mm-jjjj\' hebben.'				},	'soort_training' :	{ 					'type' : 'string',					'max_length' : 50,					'required' : true				},	'naam_training' :	{ 					'type' : 'string',					'max_length' : 30,					'required' : false				},	'merk' :	{ 					'type' : 'string',					'max_length' : 30,					'required' : true				},	'andermerk' :	{ 					'type' : 'string',					'max_length' : 30,					'required' : false				},	'distributeur' :	{ 					'type' : 'string',					'max_length' : 50,					'required' : true				},	'trainer' :	{ 					'type' : 'string',					'max_length' : 50,					'required' : true				},	'paspoort_nr' :	{ 					'type' : 'int',					'required' : true,					'max_length' : 6,					'msg' : 'Dit veld mag alleen uit cijfers bestaan.'				},	'cursist' :	{ 					'type' : 'string',					'max_length' : 50,					'required' : true				},		'naam_dep' :	{ 					'type' : 'string',					'max_length' : 30,					'required' : true				},	'adres_dep' :	{ 					'type' : 'string',					'max_length' : 50,					'required' : false				},	'plaats_dep' :	{ 					'type' : 'string',					'max_length' : 30,					'required' : true				},	'name'		:	{ 					'type' : 'email',					'max_length' : 50,					'required' : true,					'msg' : 'Dit veld moet een geldig email adres zijn.'				},	'password'	:	{ 					'type' : 'password',					'max_length' : 30,					'required' : true				}			}/*	Show error messages in the messageBox.		@input msgs as Object: show list of error messages and highlight the input fields	@input msgs as String: show only the error message ( not related to a specific input field )*/function showMsg(msg){	var msgBox = document.getElementById('msgbox');	msgBox.className = "";			var msgSpan = msgBox.getElementsByTagName('span').item(0);		var msgList = document.getElementById('msglist');		//Remove all previous messages and input highlighting			var links = msgList.getElementsByTagName('a');	//links = Array.prototype.slice.call(links);	links = toArray(links);		//links = Array().slice.call(links);			for ( link in links )	{		var linkTo = links[link].getAttribute('href');		linkTo = linkTo.substring(1);		document.getElementById(linkTo).className = "";	}	msgList.innerHTML = "";		if ( typeof (msg) == 'string' )	{		msgSpan.innerHTML = msg;		msgList.className = "hidden";		return false;	}	else if ( typeof (msg) == 'object' )	{			msgList.className = "";		msgCount = 0;				//Create a list item for each error message, with a link to the highlighted (invalid) field.		for ( msgField in msg )		{			msgCount++;						var id = 'id_' + msgField;			var element = document.getElementById(id);			element.className = 'invalid';							var label = document.getElementById('label_' + msgField).innerHTML;						if (label.indexOf('*') != -1 )			{				label = label.substring(0, label.length - 2);			}			if (label.indexOf('(') != -1 )			{				label = label.substring(0, label.indexOf('(') - 1);			}						msgItem = document.createElement('li');			msgLink = document.createElement('a');			msgLink.href = "#"+id;			msgLink.innerHTML = label;						msgText = document.createTextNode(" : " + msg[msgField]);						msgItem.appendChild(msgLink);			msgItem.appendChild(msgText);			msgList.appendChild(msgItem);		}				if (msgCount == 1)		{			msgSpan.innerHTML = "Het volgende veld bevat fouten:";		}		else		{			msgSpan.innerHTML = "De volgende velden bevatten fouten:";		}	}		//Go to top of screen	window.scrollTo(0,0);		return false;}function toArray(object){	var ret = Array();	for ( var i = 0, length = object.length; i < length; i++ )	{			ret.push( object[ i ] );	}	return ret;}	function hideMsg(){	var msgBox = document.getElementById('msgbox');	msgBox.className = "hidden";}
