var NS = IE = false;
if(navigator.appVersion.substr(0,3) >= 4) {
	if(navigator.appName == 'Netscape') {
		NS = true;
	} else {
		IE = true;
	}
}

// A utility function that returns true if a string contains only 
// whitespace characters.
function isblank(s)
{
    for(var i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if ((c != ' ') && (c != '\n') && (c != '\t')) return false;     
    }
    return true;
}

function verify(field, type, alias, optional)
{
	
    var msg;
	var hasvalue = false;
    var error = "";
	arr = new Array;
	var datePat = "";
	var mysrc ="";
	
	mysrc = "document." + field.name + "bullet.src";

	if (field.type == "checkbox")
	{
		if (field.checked == true)
		{
			return true;
		}
		else
		{
			return false ;
		}
	}

	if (field.type == "radio")
	{	
		
		//The field object has to be converted to loop the array
		//Then the array is looped to check for checked items
		
		var radiofield = eval('document.' + field.form.name + '.' + field.name)
		var blnSelected = false
		
		for (var k = 0; k < radiofield.length; k++)
		{
			if (radiofield[k].checked == true)
			{
				report(mysrc,error);
				return true;
			}
		}
		if (blnSelected==false)
		{
			error = " - None of the radio boxes '" + alias + "' were selected\n";
			report(mysrc,error);
			return false;
		}
		
	}
		
	
	if ((field.value == null) || (field.value == "") || isblank(field.value)) 
	{
		hasvalue = false;
	}
	else
	{
		hasvalue = true;
		
	}
		
	if (!optional && !hasvalue)
	{
		error = "The required field '" +  alias + "' is empty\n";
		
	}
	

	
	if(hasvalue){
	
		switch(type){
			case "numeric":
                var v = parseFloat(field.value);
                if (isNaN(v))
				{
                   error = "- The field '" + alias + "' must be a number.\n";                     
                }
			break;
			case "numericstrict":
		 		if (isNaN(field.value))
				{
                   error = "- The field '" + alias + "' must be a number.\n";                     
                }
			break;
			case "email":
				arr = field.value.split("@");
				if (arr[0] == null || arr[0].length < 1 || arr[1] == null || arr[1].length < 1 || arr.length > 2)
				{
					error = " - The field '" + alias + "' is not a valid e-mail field\n";
				}
				else if (arr[1].lastIndexOf(".") == -1)
				{
					error = " - The field '" + alias + "' is not a valid e-mail field\n";
				}
			break;
			case "MMDDYY":
				checkDate = isValidDate(field.value, "MMDDYY");
				if (!checkDate) {
					error = " - The field '" + alias + "' is not a valid date format (MM-DD-YY)\n";
				}
			break;
			case "DDMMYY":
				checkDate = isValidDate(field.value, "DDMMYY");
				if (!checkDate) {
					error = " - The field '" + alias + "' is not a valid date format (DD-MM-YY)\n";
				}
				 
			break;
			case "MMDDYYYY":
				checkDate = isValidDate(field.value, "MMDDYYYY");
				if (!checkDate) {
					error = " - The field '" + alias + "' is not a valid date format (MM-DD-YYYY)\n";
				}
			break;
			case "DDMMYYYY":
				checkDate = isValidDate(field.value, "DDMMYYYY");
				if (!checkDate) {
					error = " - The field '" + alias + "' is not a valid date format (DD-MM-YYYY)\n";
				}
			break;  
			
			
		}
	}
	report(mysrc,error);

}
function report(mysrc,error){
	if (!error)
	{
		mysrc +="='/images/x.gif'";
		eval(mysrc);	
		return true;
	}
	else
	{
		msg  = "______________________________________________________\n\n";
	  //  msg += "The form was not submitted because of the following error.\n";
	    msg += "Please correct this error.\n";     
	    msg += "______________________________________________________\n\n" ;
		
		if (error)
		{
			msg += error;
			
			mysrc +="='/images/xbullet.gif'";
			eval(mysrc);
			
		}
		
		//alert(msg);
	    return false;
	}
}
function isValidDate(dateStr, dateFormat) 
// Checks for the following valid date formats:
// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
// Also separates date into month, day, and year variables
{
	var datePat
	
	if (dateFormat=="MMDDYY" || dateFormat=="DDMMYY")
	{
		datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
	}
	else if (dateFormat=="MMDDYYYY" || dateFormat=="DDMMYYYY")
	{
		datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
	}

	// is the format ok?
	var matchArray = dateStr.match(datePat); 
	
	if (matchArray == null) 
	{
		//alert("Date is not in a valid format.")
		return false;
	}
	
	// parse date into variables
	if (dateFormat=="MMDDYY" || dateFormat=="MMDDYYYY")
	{
		month = matchArray[1]; 
		day = matchArray[3];
	}
	else if (dateFormat=="DDMMYY" || dateFormat=="DDMMYYYY")
	{
		month = matchArray[3]; 
		day = matchArray[1];
	}	
	year = matchArray[4];
	
	// check month range
	if (month < 1 || month > 12) 
	{
		//alert("Month must be between 1 and 12.");
		return false;
	}
	
	if (day < 1 || day > 31) 
	{
		//alert("Day must be between 1 and 31.");
		return false;
	}
	
	if ((month==4 || month==6 || month==9 || month==11) && day==31)
	{
		//alert("Month "+month+" doesn't have 31 days!")
		return false
	}
	
	// check for february 29th
	if (month == 2) 
	{ 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
		{
			//alert("February " + year + " doesn't have " + day + " days!");
			return false;
		}
	}
	
	// date is valid
	return true;  
}

var check = true;               // als check=true dan zijn er geen errors, en is het formulier valid

  function submitform(activeform)
  {
          var msg;
                          
          check = update(activeform);
          if (check==true) {
            	//activeform.submit();
				return true;
          }
          else {
		  		
		  		openFormcheckError();
				return false;
		  		
		  		
             	
			     // 	msg  = "______________________________________________________\n\n";    
          		//	msg += "Het formulier is niet opgestuurd omdat velden niet waren ingevuld.\n";
         		//	msg += "Corrigeer de velden die zijn gemarkeerd met een rood kruisje en verstuur het opnieuw.\n";     
          		//	msg += "______________________________________________________\n\n" ;
          
                //alert(msg);
				
          }
  }

function update (f)
  {
  		//alert('chekcing form')
  		var check = true
          for(var i = 0; i < document.images.length; i++)
          {
		  		
                  if (document.images[i].name.indexOf("bullet") >= 0){
				  	//alert(document.images[i].src)
				  	if (document.images[i].src.indexOf('/images/xbullet.gif') >= 0){check = false;}
				  }
				   if (document.images[i].name.indexOf("vink") >= 0 ){
				   	 	//alert(document.images[i].src)
				  	if (document.images[i].src.indexOf('/images/xbullet.gif') >= 0){check = false;}
				  }
          }
  			
			
          return check;
  } 
 

function changeReqFields(thisForm,thisArray)
/*
Deze functie is een aanvulling op het bolletjes script.

INPUT:
	formname (als 'document.formulier' het form is, hier dus alleen 'formulier')
	thisArray (pointer naar de array met de required velden subset.)

OUTPUT:
	geen

ACTIONS:
	zet eerst alle onchange properties en bolletjes in het opgegeven form naar inactief,
	vult daarna de onchange properties van alle in de opgegeven array gedefinieerde elementen,
	en checkt daarna de formuliervelden nogmaals, om de bolletjes meteen goed te zetten.

*/
{
	// Alle verplichte velden niet verplicht stellen (CLEANUP)
	//var thisForm = thisForm.valueOf
	//alert(document.test.length)
	var strOnChange = ''
	var msg = ''
	
	
	thisForm = eval(thisForm)
	for(var i = 0; i < document.images.length; i++)
	{
		if (document.images[i].name.indexOf("bullet")>=0)
		{
			
			var fieldname = document.images[i].name.substring(0,document.images[i].name.length - 6)
			
			checkElements(fieldname);
			
			if (NS == true)	{ var field = thisForm.eval(fieldname) }
			else { var field = eval('thisForm.' + fieldname); }
			
			field.onchange = ''
			
			document.images[i].src = '/images/x.gif'
			
		}
	}
	
	//Sources voor plaatjes en onchanges toekennen aan formfields genoemd in array.
	for (var j = 0; j < thisArray.length; j++)
	{
		
		var fieldname = thisArray[j].substring(0,thisArray[j].indexOf(","))
		
		
		if (NS == true)	{ var field = thisForm.eval(fieldname) }
		else { var field = eval('thisForm.' + fieldname); }
	
		var onchangeAction = thisArray[j].substring(thisArray[j].indexOf(",")+1,thisArray[j].length)
		
		if (isNaN(field.length) == true)
		{
			
			if (NS == true)	{				
				eval('field.onchange = function onchange(event) {check = verify' + onchangeAction + ' }')
				eval('field.onblur = function onchange(event) {check = verify' + onchangeAction + ' }')
			}
			else { 
				eval('field.onchange = function anonymous() {check = verify' + onchangeAction + ' }')
				eval('field.onblur = function anonymous() {check = verify' + onchangeAction + ' }')				
			}
			field.onchange();
		}
		else // a radio array
		{
			
			for (var k = 0; k < field.length; k++)
			{	
				if (NS == true)	{ 
					eval('field[k].onclick = function onchange(event) {check = verify' + onchangeAction + ' }')
				}
				else { 
					eval('field[k].onclick = function anonymous() {check = verify' + onchangeAction + ' }')
				}
				field[k].onclick();
				
			}	
		}
		
	}
}

function checkElements(fieldname){
	var found = false
	for (var s = 0; s < document.forms.length; s++)
	{
		for (var v = 0;v < document.forms[s].elements.length;v++){
			if (document.forms[s].elements[v].name == fieldname){
				found = true;
				return true
			}
		}
	}
	if (found == false){alert('Er is een bullet genaamd: - ' + fieldname + ' - maar daar is geen formulierveld voor!');}
}
	