// Validate.js CONTAINS
// ********************************************************************
// VALIDATION
// SETTING VALUES INTO A FORM
// GETTING VALUES FROM A FORM
// ********************************************************************

// VALIDATION

// Check the validity of a date
function formatValidDate( sDate, sFormat )
{
	var res = "";
	var obj = new Object();
	
	if( getDMY( sDate, obj ) )
	{
		if( sFormat == 'YYYY/MM/DD' )
		{
			res = obj.jaar.toString() + "/" + (obj.maand < 10 ? "0" : "") + obj.maand.toString() + "/" + (obj.dag < 10 ? "0" : "") + obj.dag.toString();
		}
		else
		{
			res = (obj.dag < 10 ? "0" : "") + obj.dag.toString() + "/" + (obj.maand < 10 ? "0" : "") + obj.maand.toString() + "/" + obj.jaar.toString();
		}
	}

	return res;
}

// getDMY expects a string (sDate) in 'DD/MM/YYYY' format
// returns false if date was invalid, true otherwise
// o will be filled with dag,maand and jaar members
function getDMY( sDate, o )
{
	var arr = sDate.split( getFirstSeperator( sDate ) );

	if( arr.length == 3 )
	{
		o.dag   = parseInt( arr[0], 10 );
		o.maand = parseInt( arr[1], 10 );
		o.jaar  = parseInt( arr[2], 10 );

		if( isNaN( o.dag ) || isNaN( o.maand ) || isNaN( o.jaar ) )
		{
			return false;
		}

		if( o.jaar < 10 )
		{
			o.jaar += 2000;
		}
		else if( o.jaar < 100 )
		{
			o.jaar += 1900;
		}
        else if( o.jaar < 1000 )
        {
			o.jaar = '0' + o.jaar;
        }

		if( geldigeDatum( o.jaar, o.maand, o.dag ) )
		{
			return true;
		}
	}
}

// cmpDate compares two dates
// returns: 0  is two dates are equal
//	    -1 when sDate1 is before sDate2
//	    1  when sDate1 is after sDate2
//
// Comment: format of input should be 'DD/MM/YYYY'
//	    when sDate2 is null, sDate2 will be treated as the current date
function cmpDate( sDate1, sDate2 )
{
	var res = 0;
	var obj1 = new Object();
	var obj2 = new Object();
	
	if( sDate2 == null )
	{
		var d = new Date();	// get todays date (constructing without parameters)
		
		// month is zero-based (0..11), date is not zero-based (1..31)
		sDate2 = d.getDate() + '/' + (d.getMonth() + 1) + '/' + d.getFullYear();
	}
	
	if( getDMY( sDate1, obj1 ) && getDMY( sDate2, obj2 ) )
	{
		if( obj1.jaar < obj2.jaar )
		{
			res = -1;
		}
		else if( obj1.jaar > obj2.jaar )
		{
			res = 1;
		}
		else if( obj1.maand < obj2.maand )		
		{
			res = -1;
		}
		else if( obj1.maand > obj2.maand )
		{
			res = 1;
		}
		else if( obj1.dag < obj2.dag )
		{
			res = -1;
		}
		else if( obj1.dag > obj2.dag )
		{
			res = 1;
		}
	}

	return res;
}

function getFirstSeperator( sDate )
{
	var res = "-";
	var i;

	for( i=0; i < sDate.length; i++ )
	{
		if( sDate.charAt(i) < '0' || sDate.charAt(i) > '9' )
		{
			res = sDate.charAt( i );
			break;
		}
	}

	return res;
}

function geldigeDatum( jaar, maand, dag )
{
	if(( maand > 12 ) || ( maand < 1 ))
	{
		return false;
	}

	if(( dag > aantalDagenIn( maand - 1, jaar )) ||	( dag < 1 ))
	{
		return false
	}

	return true;
}

function geldigeTijd( uur, minuut )
{
	if(( uur > 23 ) || (uur < 0 ))
	{
		return false;
	}

	if(( minuut > 59 ) || ( minuut < 0 ))
	{	
		return false;
	}

	return true;
}

function aantalDagenIn(maand, jaar)
{
	switch( maand )
	{
		case 1 :
			if( schrikkeljaar( jaar ) )
			{
				return 29;
			}
			else
			{
				return 28;
			}
			break;

		case 3 :
		case 5 :
		case 8 :
		case 10 :
			return 30;
			break;

		default :
			return 31;
			break;
	}
}

function schrikkeljaar(jaar)
{
	if (((jaar % 4 == 0) && jaar % 100 != 0) || jaar % 400 == 0)
	{
		return true;
	}

	return false;
}

function ValidateDateRange( val, start, eind )
{
	if( val != null )
	{
		val = formatValidDate( val );
	}
	else
	{
		return false;
	}
	if( start == null )
	{
		start = "0-01-01";
	}
	if( eind == null )
	{
		eind = "999999-12-12"
	}

	// nu hebben we 3 'geldige' datums

	// door de gebruiker ingevoerde datum in dd/mm/yyyy formaat
	var arrval     = val.split( '/' );
	var dagval     = parseInt( arrval[0], 10 );
	var maandval   = parseInt( arrval[1], 10 );
	var jaarval    = parseInt( arrval[2], 10 );
	// min-max datums in yyyy-mm-dd (=mysql) formaat
	var arrstart   = start.split( '-' );
	var dagstart   = parseInt( arrstart[2], 10 );
	var maandstart = parseInt( arrstart[1], 10 );
	var jaarstart  = parseInt( arrstart[0], 10 );
	var arreind    = eind.split( '-' );
	var dageind    = parseInt( arreind[2], 10 );
	var maandeind  = parseInt( arreind[1], 10 );
	var jaareind   = parseInt( arreind[0], 10 );

	if( jaarval < jaarstart || jaarval > jaareind ) return false;
	if( jaarval > jaarstart || jaarval < jaareind ) return true;
	if( maandval < maandstart || maandval > maandeind ) return false;
	if( maandval > maandstart || maandval < maandeind ) return true;
	if( dagval < dagstart || dagval > dageind ) return false;
	if( dagval > dagstart || dagval < dageind ) return true;
	return true;
}

//Haal initiele datum tijd op
function getDateTime( bDate, bTime )
{
	var Now		= new Date();
	var years	= Now.getFullYear();
	var months	= Now.getMonth() + 1;
	var days	= Now.getDate();
	var	dtime	= '';

	if( bDate )
	{
		if( days.toString().length == 1 )
		{
			dtime = dtime + '0' + days;
		}
		else
		{
			dtime = dtime + days;
		}

		dtime = dtime + '/';

		if( months.toString().length == 1 )
		{
			dtime = dtime + '0' + months;
		}
		else
		{
			dtime = dtime + months;
		}

		dtime = dtime + '/';

		if( years.toString().length == 1 )
		{
			dtime = dtime + '0' + years;
		}
		else
		{
			dtime = dtime + years;
		}
	}

	if( bDate && bTime )
	{
		dtime = dtime + ' ';
	}

	if( bTime )
	{
		var hours	= Now.getHours();
		var minutes	= Now.getMinutes();
		var secs	= Now.getSeconds();

		if( hours.toString().length == 1 )
		{
			dtime = dtime + '0' + hours;
		}
		else
		{
			dtime = dtime + hours;
		}

		dtime = dtime + ':';
		
		if( minutes.toString().length == 1 )
		{
			dtime = dtime + '0' + minutes;
		}
		else
		{
			dtime = dtime + minutes;
		}
		
		dtime = dtime + ':';
		
		if( secs.toString().length == 1 )
		{
			dtime = dtime + '0' + secs;
		}
		else
		{
			dtime = dtime + secs;
		}
	}

	return dtime;
}

// Check the validity of an email address
function isEmailAddress( str )
{
	// are regular expressions supported?
	var supported = 0;

	if( window.RegExp )
	{
		var tempStr = "a";
		var tempReg = new RegExp(tempStr);
		if (tempReg.test(tempStr)) supported = 1;
	}

	if( !supported ) 
	{
		return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
	}

	var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
	return (!r1.test(str) && r2.test(str));
}

// Check the validity of alfa-numbers and numbers
function isAlfanumeriek( sValue )
{
	for( var i = 0; i < sValue.length; i++ )
	{
		if(!(
			 (( sValue.charAt( i ) >= 'a' ) && ( sValue.charAt( i ) <= 'z' )) ||
			 (( sValue.charAt( i ) >= 'A' ) && ( sValue.charAt( i ) <= 'Z' )) ||
			 (( sValue.charAt( i ) >= '0' ) && ( sValue.charAt( i ) <= '9' ))
		  ) )
		{
			return false;
		}

	}
	return true;

}

function isNumeriek( sValue )
{
	// onder numeriek wordt hier verstaan: zonder decimalen

	// eerste char mag '-' of een nummer zijn
	if( !( sValue.charAt( 0 ) == '-' || ( sValue.charAt( 0 ) >= '0' && sValue.charAt( 0 ) <= '9' ) ) )
	{
		return false;
	}
	
	for( var i = 1; i < sValue.length; i++ )
	{
		if( !( sValue.charAt( i ) >= '0' && sValue.charAt( i ) <= '9' ) )
		{
			return false;
		}
	}
	return true;
}

function isNumeriekDec( sValue )
{
	// onder numeriek wordt hier verstaan: met decimalen
	var hasDecChar = false;


	// eerste char mag '-' of een nummer zijn
	if( !( sValue.charAt( 0 ) == '-' || ( sValue.charAt( 0 ) >= '0' && sValue.charAt( 0 ) <= '9' ) ) )
	{
		return false;
	}

	for( var i = 1; i < sValue.length; i++ )
	{
		if( sValue.charAt( i ) == '.' )
		{
			if( hasDecChar )
			{
				return false;
			}
			else
			{
				hasDecChar = true;
			}
		}
		else if( !( sValue.charAt( i ) >= '0' && sValue.charAt( i ) <= '9' ) )
		{
			return false;
		}
	}
	return true;
}

function ValidateNumberRange( val, start, eind )
{
	if( val == null ) return false;
	if( start == null && val <= eind ) return true;
	if( eind == null && val >= start ) return true;
	if( val >= start && val <= eind ) return true;
	return false;
}

// ********************************************************************
// SETTING VALUES INTO A FORM
// ********************************************************************

function setVal( inputfield, sValue )
{
	var field = null;
	sValue = unescape( sValue );

	// validate what we got in inputfield
	if( inputfield == null || inputfield == "" || sValue == null )
	{
		return;
	}

	if( typeof( inputfield ) == "string" )
	{
		field = document.forms[0][ inputfield ];
	}
	else
	{
		field = inputfield;
	}

	// if field is an array of radiobuttons, make it the first button
	if( field && field.length > 0 && (field[0].type == "radio" || field[0].type == "checkbox") )
	{
		field = field[0];
	}

	switch( field.type )
	{
		case "radio" :
			setRadioOfCheckboxen( field, sValue );
			break;

		case "select-one" :
			setSelectOption( field, sValue );
			break;

		case "select-multiple" :
			alert( "select-multiple is in deze configuratie (nog) niet geimplementeerd" );
			for( var i = 0; i < field.length; i++ )
			{
				field.options[i].selected = ContainsValue( sValue,field.options[i].value );
			}
			break;

		case "checkbox" :
			setRadioOfCheckboxen( field, sValue );
			break;

		case "text" :
		case "textarea" :
		case "hidden" :
		case "password" :
			field.value = sValue;
			break;

		default :
			alert( "unknown field.type=" + field.type );
			break;
	}
}

function setValDatum( sVeld, sVal )
{
	if( sVal && sVal != '' )
	{
		var datdb = unescape( sVal ); // jjjj-mm-dd
		var datarr = datdb.split( '-' );
		document.forms[0][sVeld].value = datarr[2] + '/' + datarr[1] + '/' + datarr[0];
	}
}

// zet checked attribuut van checkbox form-element met naam inputfield en value 
// sValue op bChecked of flip de waarde als bChecked niet gegeven is.
function setValMultiCheck( fieldname, sId, bChecked, taal )
{
	var field;
	
	if( document.forms[0][ fieldname ].length )
	{
		field = document.forms[0][ fieldname ][0];
	}
	else
	{
		field = document.forms[0][ fieldname ];
	}

	if( field && field.type == "checkbox" )
	{
		var elms = field.form.elements;
		for( var i = 0; i < elms.length; i++ )
		{
			if( elms[i].name == fieldname && elms[i].id == sId )
			{
				if( bChecked == null ) // flip
				{
					elms[i].checked = !(elms[i].checked);
				}
				else
				{
					elms[i].checked = bChecked;
				}
				bChecked = elms[i].checked;
				break;
			}
		}
	}
	else
	{
	    if( taal == 'NL' )
	    {
		alert( "geen checkbox field.type=" + field.type );
	    }
	    else if( taal == 'EN' )
	    {
		alert( "no checkbox field.type=" + field.type );
	    }
	}

	return bChecked;
}

function setSelectOption( field, sValue )
{
	for( var i = 0; i < field.length; i++ )
	{
		if( field.options[i].value == sValue )
		{
            field.options[i].selected = true;
            return;
		}
	}
}

function setRadioOfCheckboxen( field, sValue )
{
	// checkboxen worden alleen aangezet, nooit uit!
	var elms = field.form.elements;
	for( var i = 0; i < elms.length; i++ )
	{
		// de laatste radio/check heeft in geval van "anders namelijk" value '', ik ga ervan uit dat hij als laatste komt
		if( elms[i].name == field.name && elms[i].value == sValue )
		{
            elms[i].checked = true;
            return;
		}
	}
}

// ********************************************************************
// GETTING VALUES FROM A FORM
// ********************************************************************

function GetInputValueCheck( inputfield )
{
	var field = null;

	if( typeof( inputfield ) == "string" )
	{
		field = geefElm( inputfield );
	}
	else
	{
		field = inputfield;

	}

	if( field && field.length && field[0].type == "checkbox" )
	{
		field = field[0];
	}

	var retValue = "";

	var elms = field.form.elements;
	for( var i = 0; i < elms.length; i++ )
	{
		if( elms[i].name == field.name && elms[i].checked )
		{
			retValue = retValue + elms[i].value;
		}
	}

	return retValue;
}

function GetInputValue( inputfield,taal )
{
	var field = null;

	// validate what we got in inputfield
	if( inputfield == "" )
	{
	    if( taal == 'NL' )
	    {
		alert( "Geen naam opgegeven voor invoerveld" );
	    }
	    else if( taal == 'EN' )
	    {
		alert( "No name given for input field" );
	    }
		return "";
	}

	if( typeof( inputfield ) == "string" )
	{
		field = geefElm( inputfield );
	}
	else
	{
		field = inputfield;
	}

	if( field == null )
	{
		// alert( "Invoerveld niet gevonden" );
		return "";
	}

	// if field is an array of radiobuttons, make it the first button
	if( field && field.length > 0 && field[0].type == "radio" )
	{
		field = field[0];
	}

	switch( field.type )
	{
		case "radio" :
		{
			var elms = field.form.elements;
			for( var i = 0; i < elms.length; i++ )
			{
				if( elms[i].name == field.name && elms[i].checked )
				{
					return elms[i].value;
				}
			}
		}
		break;
		case "select-one" :
		{
			if( field.length > 0 )
			{
				var sel = document.forms[0][inputfield];
				for( var i = 0; i < field.length; i++ )
				{
					if( field.options[i].selected )
					{
						return field.options[i].value;
					}
				}
			}
		}
		break;
		case "select-multiple" :
		{
			var sValue = "";

			for( var i = 0; i < field.length; i++ )
			{
				if( field.options[i].selected )
				{
					if( sValue != "" )
					{
						sValue += "#";
					}
					sValue += field.options[i].value;
				}
			}
			return sValue;
		}
		break;
		case "checkbox" :
		{
			if( field.checked == true )
			{
				return field.value;
			}
		}
		break;
		default:
		{
			return field.value;
		}
		break;
	}
	return "";
}

// ********************************************************************
// Helpers
// ********************************************************************

function geefElm( veldnaam )
{
	var elm;
	
	if( document.forms[0] )
	{
		elm = document.forms[0][ veldnaam ];
	}

	return elm;
}

function leeg()
{
}

