

	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 ;
		this._personal			= null ;
	}

	reminderValidator.personal = function()
	{
		var sTxt = document.getElementById( "persoonlijk_desc" ).value || document.getElementById( "persoonlijk_desc" ).innerHTML;
		var nDay = document.getElementById( "persoonlijk_day" ).value.replace( ' ', '' );
		var nMnt = document.getElementById( "persoonlijk_month" ).value.replace( ' ', '' );
		var nYer = document.getElementById( "persoonlijk_year" ).value.replace( ' ', '' );

		var sEval = "" + nDay + nMnt + nYer + sTxt.replace( " ", "" );

		if( this._personal == null )
		{
			this._personal = sEval;
			return -1;
		}

		if( this._personal == sEval && sEval )
			return -1
		else
			this._personal = sEval;

		if( this.isDate( nDay, nMnt, nYer ) && Boolean( sTxt ) )
			return 1;
		return 0;
	}

	reminderValidator.birthday = function()
	{
		/* OMGWTFBBQ whatta shitload of data */

		var nBirthdays = 24

		/* three status numbers
		 * one for empties
		 * one for errors
		 * one for ok
		 */

		var nEmpties = 0 ;
		var nErrors  = 0 ;
		var nDates   = 0 ;

		var sEvaluate = "";
		for( var i = 1; i <= nBirthdays; ++i )
		{
			sNme = document.getElementById( "birthday" + i + "_name"  ).value.replace( ' ', '' );
			nDay = document.getElementById( "birthday" + i + "_day"   ).value.replace( ' ', '' );
			nMnt = document.getElementById( "birthday" + i + "_month" ).value.replace( ' ', '' );
			nYer = document.getElementById( "birthday" + i + "_year"  ).value.replace( ' ', '' );
			sEvaluate += sNme + nDay + nMnt + nYer;
			if( this.isDate( nDay, nMnt, nYer, true ) &&  sNme  )
				nDates++ ;
			else if( !nDay && !nMnt && !nYer && !sNme )
				nEmpties++ ;
			else
				nErrors++ ;
		}

		/*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 ;

		/* 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 ) ;
	}



