

	function reminderValidator()
	{
		this._carfreesunday  	= null ;
		this._carmaintenance 	= null ;
		this._holiday 			= null ;
		this._jubilee 			= null ;
		this._birthday 			= null ;
		this._changeuserdata	= null ;
		this._subscribe			= null ;
		this._login				= null ;
		this._forgotpassword	= null ;
	}
	
	reminderValidator.birthday = function()
	{
		var sNmeBirthday1 = document.getElementById( "birthday1_name"  ).value.replace( ' ', '' )   ;
		var nDayBirthday1 = document.getElementById( "birthday1_day"   ).value.replace( ' ', '' )   ;
		var nMntBirthday1 = document.getElementById( "birthday1_month" ).value.replace( ' ', '' )   ;
		var nYerBirthday1 = document.getElementById( "birthday1_year"  ).value.replace( ' ', '' )   ;
		
		var sNmeBirthday2 = document.getElementById( "birthday2_name"  ).value.replace( ' ', '' )   ;
		var nDayBirthday2 = document.getElementById( "birthday2_day"   ).value.replace( ' ', '' )   ;
		var nMntBirthday2 = document.getElementById( "birthday2_month" ).value.replace( ' ', '' )   ;
		var nYerBirthday2 = document.getElementById( "birthday2_year"  ).value.replace( ' ', '' )   ;
		
		var sNmeBirthday3 = document.getElementById( "birthday3_name"  ).value.replace( ' ', '' )   ;
		var nDayBirthday3 = document.getElementById( "birthday3_day"   ).value.replace( ' ', '' )   ;
		var nMntBirthday3 = document.getElementById( "birthday3_month" ).value.replace( ' ', '' )   ;
		var nYerBirthday3 = document.getElementById( "birthday3_year"  ).value.replace( ' ', '' )   ;
		
		var sNmeBirthday4 = document.getElementById( "birthday4_name"  ).value.replace( ' ', '' )   ;
		var nDayBirthday4 = document.getElementById( "birthday4_day"   ).value.replace( ' ', '' )   ;
		var nMntBirthday4 = document.getElementById( "birthday4_month" ).value.replace( ' ', '' )   ;
		var nYerBirthday4 = document.getElementById( "birthday4_year"  ).value.replace( ' ', '' )   ;
		
		var sNmeBirthday5 = document.getElementById( "birthday5_name"  ).value.replace( ' ', '' )   ;
		var nDayBirthday5 = document.getElementById( "birthday5_day"   ).value.replace( ' ', '' )   ;
		var nMntBirthday5 = document.getElementById( "birthday5_month" ).value.replace( ' ', '' )   ;
		var nYerBirthday5 = document.getElementById( "birthday5_year"  ).value.replace( ' ', '' )   ;
		
		var sEvaluate =  	sNmeBirthday1 + nDayBirthday1 + nMntBirthday1 + nYerBirthday1 + 
							sNmeBirthday2 + nDayBirthday2 + nMntBirthday2 + nYerBirthday2 + 
							sNmeBirthday3 + nDayBirthday3 + nMntBirthday3 + nYerBirthday3 + 
							sNmeBirthday4 + nDayBirthday4 + nMntBirthday4 + nYerBirthday4 + 
							sNmeBirthday5 + nDayBirthday5 + nMntBirthday5 + nYerBirthday5  ;
		
		/*Logic to detect changes*/
		
		/* First time */
		if( this._birthday == null )	
		{
			this._birthday = sEvaluate ;
			return -1 ;
		}
		
		/* No change */
		if( this._birthday == sEvaluate  && sEvaluate  )
			return -1 ;
		else
			this._birthday = sEvaluate ;		
		
		
		
		/* OMGWTFBBQ whatta shitload of data */
		
		/* three status numbers
		 * one for empties
		 * one for errors
		 * one for ok
		 */
		
		var nEmpties = 0 ;
		var nErrors  = 0 ;
		var nDates   = 0 ;		
		
		/* first set */
		if( this.isDate( nDayBirthday1, nMntBirthday1, nYerBirthday1, true ) &&  sNmeBirthday1  )
			nDates++ ;
		else if( !nDayBirthday1 && !nMntBirthday1 && !nYerBirthday1 && !sNmeBirthday1 )
			nEmpties++ ;
		else
			nErrors++ ;		
		
		/* second set */
		if( this.isDate( nDayBirthday2, nMntBirthday2, nYerBirthday2, true ) &&  sNmeBirthday2  )
			nDates++ ;
		else if( !nDayBirthday2 && !nMntBirthday2 && !nYerBirthday2 && !sNmeBirthday2 )
			nEmpties++ ;
		else
			nErrors++ ;			
		
		
		/* third set */
		if( this.isDate( nDayBirthday3, nMntBirthday3, nYerBirthday3, true ) &&  sNmeBirthday3  )
			nDates++ ;
		else if( !nDayBirthday3 && !nMntBirthday3 && !nYerBirthday3 && !sNmeBirthday3 )
			nEmpties++ ;
		else
			nErrors++ ;	
		
		
		/* fourth set */
		if( this.isDate( nDayBirthday4, nMntBirthday4, nYerBirthday4, true ) &&  sNmeBirthday4  )
			nDates++ ;
		else if( !nDayBirthday4 && !nMntBirthday4 && !nYerBirthday4 && !sNmeBirthday4 )
			nEmpties++ ;
		else
			nErrors++ ;	
		
		/* fifth set */
		if( this.isDate( nDayBirthday5, nMntBirthday5, nYerBirthday5, true ) &&  sNmeBirthday5  )
			nDates++ ;
		else if( !nDayBirthday5 && !nMntBirthday5 && !nYerBirthday5 && !sNmeBirthday5 )
			nEmpties++ ;
		else
			nErrors++ ;			
		
		/* any errors ? Bye ! */
		if( nErrors > 0 )
			return 0 ;
		
		/* Do we have any validated dates ? */
		if( nDates > 0 )
			return 1 ;
		
		return  0    ;
	}
	
	reminderValidator.jubilee = function()
	{
		/* validation in two parts */
		var nDayBigOne =  document.getElementById( "verkering_day"   ).value.replace( ' ', '' )   ;
		var nMntBigOne =  document.getElementById( "verkering_month" ).value.replace( ' ', '' )   ;
		var nYerBigOne =  document.getElementById( "verkering_year"  ).value.replace( ' ', '' )   ;
		
		var nDaySmallOne =  document.getElementById( "marriage_day"   ).value.replace( ' ', '' )   ;
		var nMntSmallOne =  document.getElementById( "marriage_month" ).value.replace( ' ', '' )   ;
		var nYerSmallOne =  document.getElementById( "marriage_year"  ).value.replace( ' ', '' )   ;
		
		var sEvaluate = nDayBigOne + nMntBigOne + nYerBigOne  + nDaySmallOne +  nMntSmallOne + nYerSmallOne ;
		
		/*Logic to detect changes*/
		
		/* First time */
		if( this._jubilee  == null )
		{
			this._jubilee = sEvaluate ;
			return -1 ;
		}
		
		/* No change */
		if( this._jubilee == sEvaluate && sEvaluate  )
			return -1 ;
		else
			this._jubilee = sEvaluate ;		
		
		
		/* 
		 * three status numbers
		 * one for empties
		 * one for errors
		 * one for ok
		 */
		
		var nEmpties = 0 ;
		var nErrors  = 0 ;
		var nDates   = 0 ;
		var oThisDate   = new Date() ;
		var oDatefirst  = new Date() ;
		oDatefirst.setFullYear( nYerBigOne, nMntBigOne - 1, nDayBigOne ) ;
		var oDatesecond = new Date() ;
		oDatesecond.setFullYear( nYerSmallOne, nMntSmallOne - 1 , nDaySmallOne ) ;
		
		
		/* first date */
		if( this.isDate( nDayBigOne, nMntBigOne, nYerBigOne ) && oDatefirst < oThisDate  )
			nDates++ ;
		else if( !nDayBigOne && !nMntBigOne && !nYerBigOne )
			nEmpties++ ;
		else
			nErrors++ ;
		
		/*second date*/
		if( this.isDate( nDaySmallOne, nMntSmallOne, nYerSmallOne )  && oDatesecond < oThisDate  )
			nDates++ ;
		else if( !nDaySmallOne && !nMntSmallOne && !nYerSmallOne )
			nEmpties++ ;
		else
			nErrors++ ;	
		
		/* any errors ? Bye ! */
		if( nErrors > 0 )
			return 0 ;
		
		/* Do we have any validated dates ? */
		if( nDates > 0 )
			return 1 ;
		
		return  0    ;
	}
	
	reminderValidator.holiday = function()
	{
		/* validation in two parts */
		var nDayBigOne =  document.getElementById( "summerholiday_day"   ).value.replace( ' ', '' )   ;
		var nMntBigOne =  document.getElementById( "summerholiday_month" ).value.replace( ' ', '' )   ;
		var nYerBigOne =  document.getElementById( "summerholiday_year"  ).value.replace( ' ', '' )   ;
		
		var nDaySmallOne =  document.getElementById( "winterholiday_day"   ).value.replace( ' ', '' )   ;
		var nMntSmallOne =  document.getElementById( "winterholiday_month" ).value.replace( ' ', '' )   ;
		var nYerSmallOne =  document.getElementById( "winterholiday_year"  ).value.replace( ' ', '' )   ;
		
		var sEvaluate = nDayBigOne + nMntBigOne + nYerBigOne  + nDaySmallOne +  nMntSmallOne + nYerSmallOne ;
		
		/*Logic to detect changes*/
		
		/* First time */
		if( this._holiday  == null )
		{
			this._holiday = sEvaluate ;
			return -1 ;
		}
		
		/* No change */
		if( this._holiday == sEvaluate  && sEvaluate  )
			return -1 ;
		else
			this._holiday = sEvaluate ;		
		
		
		/* three status numbers
		 * one for empties
		 * one for errors
		 * one for ok
		 */
		
		var nEmpties = 0 ;
		var nErrors  = 0 ;
		var nDates   = 0 ;
		
		/* first date */
		if( this.isDate( nDayBigOne, nMntBigOne, nYerBigOne )  )
			nDates++ ;
		else if( !nDayBigOne && !nMntBigOne && !nYerBigOne )
			nEmpties++ ;
		else
			nErrors++ ;
		
		/*second date*/
		if( this.isDate( nDaySmallOne, nMntSmallOne, nYerSmallOne )  )
			nDates++ ;
		else if( !nDaySmallOne && !nMntSmallOne && !nYerSmallOne )
			nEmpties++ ;
		else
			nErrors++ ;	
		
		/* any errors ? Bye ! */
		if( nErrors > 0 )
			return 0 ;
		
		/* Do we have any validated dates ? */
		if( nDates > 0 )
			return 1 ;
		
		return  0    ;
	}
	
	reminderValidator.carmaintenance = function()
	{
		/* validation in two parts */
		var nDayBigOne =  document.getElementById( "bigcheckup_day"   ).value.replace( ' ', '' )   ;
		var nMntBigOne =  document.getElementById( "bigcheckup_month" ).value.replace( ' ', '' )   ;
		var nYerBigOne =  document.getElementById( "bigcheckup_year"  ).value.replace( ' ', '' )   ;
		
		var nDaySmallOne =  document.getElementById( "smallcheckup_day"   ).value.replace( ' ', '' )   ;
		var nMntSmallOne =  document.getElementById( "smallcheckup_month" ).value.replace( ' ', '' )   ;
		var nYerSmallOne =  document.getElementById( "smallcheckup_year"  ).value.replace( ' ', '' )   ;
		
		var sEvaluate = nDayBigOne + nMntBigOne + nYerBigOne  + nDaySmallOne +  nMntSmallOne + nYerSmallOne ;
		
		/*Logic to detect changes*/
		
		/* First time */
		if( this._carmaintenance  == null )
		{
			this._carmaintenance = sEvaluate ;
			return -1 ;
		}
		
		/* No change */
		if( this._carmaintenance == sEvaluate && sEvaluate )
			return -1 ;
		else
			this._carmaintenance = sEvaluate ;		
		
		/* three status numbers
		 * one for empties
		 * one for errors
		 * one for ok
		 */
		
		var nEmpties = 0 ;
		var nErrors  = 0 ;
		var nDates   = 0 ;
		
		/* first date */
		if( this.isDate( nDayBigOne, nMntBigOne, nYerBigOne )  )
			nDates++ ;
		else if( !nDayBigOne && !nMntBigOne && !nYerBigOne )
			nEmpties++ ;
		else
			nErrors++ ;
		
		/*second date*/
		if( this.isDate( nDaySmallOne, nMntSmallOne, nYerSmallOne )  )
			nDates++ ;
		else if( !nDaySmallOne && !nMntSmallOne && !nYerSmallOne )
			nEmpties++ ;
		else
			nErrors++ ;	
		
		/* any errors ? Bye ! */
		if( nErrors > 0 )
			return 0 ;
		
		/* Do we have any validated dates ? */
		if( nDates > 0 )
			return 1 ;
		
		return  0    ;
		
	}
	
	reminderValidator.carfreesunday = function()
	{
		var oInput = document.getElementById( 'carfreesunday_zipcode' ) ;
		
		/*Logic to detect changes*/
		
		/* First time */
		if( this._carfreesunday  == null )
		{
			this._carfreesunday = oInput.value ;
		}
		
		/* No change */
		if( this._carfreesunday == oInput.value && this._carfreesunday )
			return -1 ;
		else
			this._carfreesunday = oInput.value ;
	
		
		
		if( this.isZipcode( oInput.value ) )
			return 1 ;
		return 0 ;
	}
	
	
	reminderValidator.changeuserdata = function()
	{
		var name    = document.getElementById( "changeuserdata_name"    ).value ;
		var email   = document.getElementById( "changeuserdata_email"   ).value ;
		var zipcode = document.getElementById( "changeuserdata_zipcode" ).value ;
		var password= document.getElementById( "changeuserdata_password" ).value ;

		var sEvaluate = name + email + zipcode + password ;
		
		/*Logic to detect changes*/
		
		/* First time */
		if( this._changeuserdata  == null )
		{
			this._changeuserdata = sEvaluate ;
			return -1 ;
		}
		
		/* No change */
		if( this._changeuserdata == sEvaluate )
			return -1 ;
		else
			this._changeuserdata = sEvaluate ;	
		
		/* check*/
		var bOk = true ;
		
		bOk = bOk && this.isEmail( email ) ;
		bOk = bOk && this.isZipcode( zipcode ) ;
		bOk = bOk && name.length > 1 ;
		if( password )
		{
			bOk = bOk && password.length > 4 ;
			bOk = bOk && password.length < 12 ;
		}
		
		if ( bOk )
			return 11 ;
		return 10 ;
	}
	
	reminderValidator.subscribe = function()
	{
		var name  = document.getElementById( "subscribe_name"  ).value ;
		var email = document.getElementById( "subscribe_email" ).value ;
		var optin = document.getElementById( "subscribe_optin" ).checked ;
		
		var sEvaluate = name + email   ;
	
		/* check*/
		var bOk = true ;
		
		var text = '' ;
		
		bOk = bOk && optin ;
		if( !optin )
			text = 'Je moet accoord gaan met de voorwaarden' ;		
		bOk = bOk && this.isEmail( email ) ;
		if( !this.isEmail( email ) )
			text = 'Je hebt geen juist e-mailadres ingevuld' ;
		bOk = bOk && name.length > 1 ;
		if( name.length < 2 )
			text = 'Je hebt je naam niet ingevuld' ;





		if( !bOk )
			document.getElementById( "submit_subscribe" ).onclick = function() 
				{ 
						document.getElementById( 'feedbacksubscribe' ).innerHTML   = text ;
						setTimeout( "document.getElementById( 'feedbacksubscribe' ).innerHTML='&#160;';", 2000 ) ;  	
				} ;
		
		
		if ( bOk )
			return 11 ;
		return 12 ;		
		
	}
	
	reminderValidator.contact = function()
	{
		var question  = document.getElementById( "contact_question"  ).value ;
		var email = document.getElementById( "contact_email" ).value ;
	
		/* check*/
		var bOk = true ;
		
		bOk = bOk && this.isEmail( email ) ;
		bOk = bOk && question.length > 1 ;
		
		if ( bOk )
			return 11 ;
		return 10 ;	
	}
	
	
	reminderValidator.login = function()
	{
		var name  = document.getElementById( "login_pass"  ).value ;
		var email = document.getElementById( "login_email" ).value ;
		
		var sEvaluate = name + email   ;
		
		/* check*/
		var bOk = true ;
		
		bOk = bOk && this.isEmail( email ) ;
		bOk = bOk && name.length > 1 ;
		
		if ( bOk )
			return 11 ;
		return 10 ;		
		
	}	
	
	reminderValidator.forgotpassword = function() 
	{
		var email = document.getElementById( "forgotpassword_email" ).value ;
		
		var sEvaluate =  email   ;
		
		
		if( this.isEmail( email ) )
			return 11 ;
		
		return 10 ;
		
	}
	
	reminderValidator.isZipcode = function( sZipcode )
	{
		if( sZipcode == '' )
			return false ;
		var zipcodeRe = /^\d{4}[A-Za-z]{2}$/ ;
		return sZipcode.match( zipcodeRe ) ;
		
	}
	
	reminderValidator.isDate = function( nDay, nMonth, nYear, bDateInPast )
	{
		var bOut = true ;
		if( nDay > 31 || nDay < 1 )
			bOut = bOut & false ;
		if( nMonth > 12 || nMonth < 1 )
			bOut = bOut & false ;
		if( nYear > 2012 || nYear < 1900 )
			bOut = bOut & false ;
		
		if( bOut && ( nMonth==4 || nMonth==6 || nMonth==9 || nMonth==11 ) && nDay > 30 )
			bOut = bOut & false ;

		if( bOut &&  nMonth==2  && nDay > 29 )
			bOut = bOut & false ;
		
		if( !bOut  )
			return bOut ;
		
		if( !bDateInPast )
			 bDateInPast = false
	
		if(  bDateInPast )
		{
			var oDateGiven  = new Date() ;
			var oDateNow    = new Date() ;
			
			oDateGiven.setFullYear( nYear, nMonth-1 , nDay ) ;
			if( oDateGiven > oDateNow )
				return false ;
		}
		
		return bOut ;
		
	}
	
	
	reminderValidator.isEmail = function( sEmail )
	{
		sEmail = sEmail.replace( ' ', '' ) ;
		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/ ;
		return reg.test( sEmail ) ;
	}
	
	
	
	