function checkForm(formobj)
{
  var returnvalue;
  returnvalue = true;

  //doorloop alle elementen
  for(i=0; i<formobj.elements.length; i++)
  {
    obj = formobj.elements(i);   //get form element
    pat = obj.pattern;           //get element pattern
    val = obj.value;             //get element value

    //data veld? -> dan controle en evt.
    //achtergrond aapassen
    if(pat)
    {

      // Is dit veld verplicht?
      fieldcorrect=true;
      if (pat.search('VERPLICHT')>=0) {
        //standaard element
        if (val=='')
  				fieldcorrect=false;
			}
      
			// Is dit een datum veld?
			if ( (pat.search('DATUM')>=0) && (!checkDate(val)) ) {
				fieldcorrect=false;
			}
			
			// Is dit veld een telefoonnummer?
			if ( (pat.search('TELEFOONNUMMER')>=0) ) {
	      if ((val!='')) {
					// Veld is NIET leeg --> waarde moet geldig zijn...
					if (!isValidTelefoonnummer(val)) {
						fieldcorrect=false;
					}
				}
			}

			// Is dit veld een Nederlandse postcode ?
			if ( (pat.search('POSTCODE-NL')>=0) ) {
	      if ((val!='')) {
					// Veld is NIET leeg --> waarde moet geldig zijn...
					if (!isValidPostcode_NL(val)) {
						fieldcorrect=false;
					}
				}
			}
			
			// Is dit veld een geldig emailadres ?
			if ( (pat.search('EMAIL')>=0) ) {
	      if ((val!='')) {
					// Veld is NIET leeg --> waarde moet geldig zijn...
					if (!isValidEmail(val)) {
						fieldcorrect=false;
					}
				}
			}

			// Is dit veld een geldig opmerkingen veld ?
			if ( (pat.search('TEXTAREA')>=0) ) {
	      if (pat.search('MAXLENGTH-5000')) {
					// Het veld mag niet meer dan 5000 tekens bevatten...
					if (val.length >= 5000) {
						fieldcorrect=false;
					}
				}
			}
			
			// Is dit een jaar veld?
			if ( (pat.search('JAAR')>=0) ) {
	      if ((val!='')) {
					// Veld is NIET leeg --> waarde moet geldig zijn...
					if (!(val>1900 && val<2030)) {
						fieldcorrect=false;
					}
				}
			}
			// Is het veld correct ingevuld?
			if (fieldcorrect) {
				// JA
				obj.style.backgroundColor='#FFFFFF';
				obj.style.color='#000000';
			} else {
				// NEE
				// Maak de achtergrondkleur rood...
				obj.style.backgroundColor='#FF0000';
				obj.style.color='#FFFFFF';
				returnvalue = false;
      }

    }//end if(pat)

  }//end for(i..)

  //return value
  if(!returnvalue) {
    alert('Het formulier is niet juist ingevuld. Herstel de rode velden.');
	}
  return returnvalue;
}



function checkDate(d)
{
    if (d=='')
    {
        // return ok als veld leeg is
        return true
    }
    else
    {
        //zoek eerste '-'
        p1 = d.search('-')
        if (p1==-1)
            return false
        else
        {
            //zoek tweede '-'
            rest = d.substr(p1+1)
            p2 = rest.search('-')
            if (p2==-1)
                return false
            else
            {
                // 2 lines required

                //get day month year
                a = d.split('-')
                dag = parseInt(a[0].replace('0',''))
                maand = parseInt(a[1].replace('0',''))
                year = parseInt(a[2])

                //check domain of day, month and year
                if (dag>0 && dag<32 && maand>0 && maand<13 && year>1900 && year<2030)
                    return true
                else
                    return false
            }
        }
    }
}       



/*
'-Function Header----------------------------------------------------------------------------------
'#  Description : prototypes voor string trim functies.
'#  history     : jul 2002 - created - Adriaan Hogenstijn
'--------------------------------------------------------------------------------------------------
*/
String.prototype.trim  = function () { return this.ltrim().rtrim() }
String.prototype.ltrim = function () { return this.replace(/^\s+/g, "") }
String.prototype.rtrim = function () { return this.replace(/\s+$/g, "") }



/*
'-Function Header----------------------------------------------------------------------------------
'#  Description : Is het argument een letter [a-z,A-Z]?
'#  Arg         : sChar ::= character dat moet worden gecontroleerd
'#  Returnvalue : boolean
'#  history     : jul 2002 - created - Adriaan Hogenstijn
'--------------------------------------------------------------------------------------------------
*/
function isLetter(sChar) {
	if ( (sChar>="a" && sChar<="z") || (sChar>="A" && sChar<="Z") ) {
		return true;
	} else {
		return false;
	}
}



/*
'-Function Header----------------------------------------------------------------------------------
'#  Description : Is het argument character [a-z,A-Z,0-9]?
'#  Arg         : sChar ::= character dat moet worden gecontroleerd
'#  Returnvalue : boolean
'#  history     : jul 2002 - created - Adriaan Hogenstijn
'--------------------------------------------------------------------------------------------------
*/
function isChar(sChar) {
	if ((sChar>="a" && sChar<="z") || (sChar>="A" && sChar<="Z") || (sChar>="0" && sChar <="9")) {
		return true;
	} else {
		return false;
	}
}



/*
'-Function Header----------------------------------------------------------------------------------
'#  Description : valideer telefoonnummer
'#  Arg         : strInput ::= String met telefoonnummer.
'#  Returnvalue : boolean
'#  history     : jul 2002 - created - Adriaan Hogenstijn
'--------------------------------------------------------------------------------------------------
*/
function isValidTelefoonnummer(strInput) {

	// leeg?
	if (strInput == '') {
		return false;
	}
	
	// Niet leeg, dan trimmen...
	strInput = strInput.trim();

	for( iCounter=0 ; iCounter<strInput.length ; iCounter++) {
		if ( (!isDecimaalGetal(strInput.charAt(iCounter)))
			&& (strInput.charAt(iCounter) != '+')
			&& (strInput.charAt(iCounter) != '-')
			&& (strInput.charAt(iCounter) != '(')
			&& (strInput.charAt(iCounter) != ')')
			&& (strInput.charAt(iCounter) != ' ') ) {
			return false;
		}
	}

	// alles OK...
	return true;
}



/*
'-Function Header----------------------------------------------------------------------------------
'#  Description : valideer Nederlandse postcode
'#  Arg         : strInput ::= String met postcode.
'#  Returnvalue : boolean
'#  history     : jul 2002 - created - Adriaan Hogenstijn
'--------------------------------------------------------------------------------------------------
*/
function isValidPostcode_NL(strInput) {
	// leeg?
	if (strInput == '') {
		return false;
	}
	
	// Niet leeg, dan trimmen...
	strInput = strInput.trim();

	// lengte niet goed ?
  if (strInput.length != 7) {
		return false;
	}
	
	// Eerst 4 cijfer?
	if (	(isNaN(strInput.charAt(0)))
		 ||	(isNaN(strInput.charAt(1)))
		 ||	(isNaN(strInput.charAt(2)))
		 ||	(isNaN(strInput.charAt(3))) ) {
		return false;
	}

	// Dan een spatie?
	if (strInput.charAt(4) != " ") {
		return false;
	}
	
	// Dan 2 letters?
	if (	(!isLetter(strInput.charAt(5)))
		||	(!isLetter(strInput.charAt(6))) ) {
		return false;
	}

	// alles OK...
	return true;
}



/*
'-Function Header----------------------------------------------------------------------------------
'#  Description : valideer emailadres
'#  Arg         : strInput ::= String met emailadres.
'#  Returnvalue : boolean
'#  history     : jul 2002 - created - Adriaan Hogenstijn
'--------------------------------------------------------------------------------------------------
*/
function isValidEmail(strInput)
{

	// leeg?
	if (strInput == '') {
		return false;
	}
	
	// Niet leeg, dan trimmen...
	strInput = strInput.trim();

	// Maak reguliere expressie voor emailadres...
	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
	if (!filter.test(strInput)) {
		return false;
	}
	
	// alles OK...
	return true;
}



/*
'-Function Header----------------------------------------------------------------------------------
'#  Description : Is het argument een decimaal nummer [0-9]?
'#  Arg         : strGetal ::= character dat moet worden gecontroleerd
'#  Returnvalue : boolean
'#  history     : jul 2002 - created - Adriaan Hogenstijn
'--------------------------------------------------------------------------------------------------
*/
function isDecimaalGetal(strGetal) {
	var allowed = '0123456789';
	for (var i=0; i< strGetal.length; i++) {
		if (allowed.indexOf(strGetal.charAt(i)) == -1) {
			return false;
		}
	}
	return true;
}

