function doValidate(form, labels, highlitecolors, nameActions)
{
//  if(typeof labels == 'undefined' || labels==null)
//  {
    labels = new Array();
    labels[0] = "Vul de volgende velden nog even in om verder te gaan";
    labels[1] = "Gebruik in deze velden alleen nummers";
    labels[2] = "Gebruik in deze velden komma's in plaats van punten";
    labels[3] = "Deze velden bevatten geen correct email adress";
    labels[4] = "Deze velden bevatten geen correcte datum (DD-MM-YYYY)";
    labels[5] = "Sorry, u heeft  nog niet alle gegevens (volledig) ingevuld.";
    labels[6] = "Deze velden bevatten geen correcte postcode";
    labels[7] = "De volgende velden zijn ongelijk";
    labels[8] = "Deze velden bevatten geen correcte bankrekeningnummer";
    labels[9] = "Deze velden bevatten geen correcte tijd ";
    labels[10] = "Gebruik geen speciale characters";
    labels[11] = "Minimale waarde overschreden";
    labels[12] = "Maximale waarde overschreden";
    labels[13] = "The file you have added is a wrong type of document. Please make sure this file is a Word document or a Excel document";
    labels[14] = "The file you have added is a wrong type of image. Please make sure this file is a .jpg or .gif image";
    labels[15] = "Deze velden bevatten geen correcte datum/tijd combinatie (DD-MM-YYYY HH:MM:SS)";
    labels[16] = "Deze velden bevatten geen correct telefoonnummer";
    labels[17] = "Deze velden moeten tenminste 1 cijfer bevatten";
//  }
  err = new Array();
  err[0] = new Array(); // Required
  err[1] = new Array(); // Numeric
  err[2] = new Array(); // Numeric - Commas
  err[3] = new Array(); // Email
  err[4] = new Array(); // Date
  err[5] = new Array(); // General error
  err[6] = new Array(); // Postal code
  err[7] = new Array(); // Postal code
  err[8] = new Array(); // No accountnumber
  err[9] = new Array(); // Time
  err[10]= new Array(); // No special chars
  err[11]= new Array(); // < Min
  err[12]= new Array(); // > Max
  err[13]= new Array(); // wrong document
  err[14]= new Array(); // wrong image
  err[15]= new Array(); // Datetime
  err[16]= new Array(); // tel_nr
  err[17]= new Array(); // req_nr

  if(form && form.elements)
  {
    for(i=0;i<form.elements.length;i++)
    {
      el = form.elements[i];
      validate = el.getAttribute("validate");
      if(validate && validate!="")
      {
        try
        {
          validate = ("" + validate).split("-");
        }catch( e )
        {
          return false;
        }
        err_in_el = false;
        error_name = el.getAttribute("error")
        if(error_name && error_name!="")
	        error = error_name;
  			else
        	error = getGoodName(el.name, nameActions);

        if(validate.length>0)
          tmp_name = error; //getGoodName(error, nameActions);
        new_validate = new Array();
        reg_exp = new RegExp("ifvalueof\((.)*,(.)*,(.)*\)");
        for( a = 0 ; a < validate.length ; a++)
        {
          ar  = reg_exp.exec(""+validate[a]);
          if(ar)
          {
            ar = (ar[1].substring(1, ar[1].length-1)).split(",");
            if(ar.length==3)
            {
              tmp_el = form.elements[ar[0]];
              equals = (ar[1].substring(0,1)!="!");
              if(!equals) ar[1] = (ar[1].substring(1));
              if(tmp_el && typeof tmp_el == "object")
              {
                try
                {
                  if(tmp_el.length > 0)
                  {
                    if(tmp_el[0].type && tmp_el[0].type.toLowerCase()=="radio")
                    {
                      for(b = 0; b < tmp_el.length; b++)
                        if(tmp_el[b].checked===true && ((equals && tmp_el[b].value==ar[1]) || (!equals && tmp_el[b].value!=ar[1])))
                          new_validate[new_validate.length] = ar[2];
                    }else if(tmp_el.tagName && tmp_el.tagName.toLowerCase()=="select")
                    {
                      if((equals && tmp_el[tmp_el.selectedIndex].value==ar[1]) || (!equals && tmp_el[tmp_el.selectedIndex].value!=ar[1]))
                        new_validate[new_validate.length] = ar[2];
                    }
                  }else if(tmp_el.tagName && tmp_el.tagName.toLowerCase()=="input")
                  {
                    if(tmp_el.type)
                    {
                      if(tmp_el.type.toLowerCase()=="checkbox")
                      {
                        if(((equals && tmp_el.checked && tmp_el.value==ar[1]) || (!equals && !tmp_el.checked && tmp_el.value==ar[1])))
                          new_validate[new_validate.length] = ar[2];
                      }else if(tmp_el.type.toLowerCase()=="text")
                      {
                        if((equals && tmp_el.value==ar[1]) || (!equals && tmp_el.value!=ar[1]))
                          new_validate[new_validate.length] = ar[2];
                      }
                    }
                  }
                }catch( e ) {}
              }else if(tmp_el && tmp_el.tagName && tmp_el.tagName.toLowerCase()=="input" && tmp_el.type && tmp_el.type.toLowerCase()=="text")
              {
                if(tmp_el.value == ar[1])
                  new_validate[new_validate.length] = ar[2];
              }
            }
          }else
            new_validate[new_validate.length] = validate[a];
        }
        validate = new_validate;
        must_be_equal_to = new RegExp("mustbeequalto\((.)*\)");
        one_must_be_set = new RegExp("onemustbeset\((.)*\)");
        check_postal_code = new RegExp("checkpostalcode\((.)*\)");
        check_extensions = new RegExp("checkext\((.)*\)");
        min = new RegExp("min\((.)*\)");
        max = new RegExp("max\((.)*\)");
        for( a = 0 ; a < validate.length ; a++)
        {
          if(!err_in_el)
          {
            if(validate[a] == "required")
            {
              if (el.type.toLowerCase() == "checkbox" && el.checked==false)
              {
                err_in_el = true;
              }else if (el.type.toLowerCase() == "radio")
              {
                radio_el = form.elements[(el.name)];
                err_in_el = true;
                if(radio_el)
                {
                  if(radio_el.length)
                  {
                    for(var b=0; b < radio_el.length; b++)
                    {
                      if(radio_el[b].checked)
                        err_in_el = false;
                    }
                  }else if(radio_el.checked)
                    err_in_el = false;
                }
              }else if((typeof el.value != "undefined") && el.value=="")
              {
                err_in_el = true;
              }
              if(err_in_el)
                err[0][err[0].length] = tmp_name;
            }else if(validate[a] == "numeric")
            {
              el.value = (""+el.value).replace(",",".");
              res =  checkNumeric(el.value);
              if(res < 0)
              {
                if(res < -1)
                  err[2][err[2].length] = tmp_name;

                err[1][err[1].length] = tmp_name;
                err_in_el = true;
              }
            }else if(validate[a] == "nospecialchars")
            {
              res = el.value.search("'");
              res2 = el.value.search('"');
              if(res > 0 || res2 > 0)
              {
                //if(res < -1)
                  //err[2][err[2].length] = tmp_name;

                err[10][err[10].length] = tmp_name;
                err_in_el = true;
              }
            }else if(validate[a] == "email")
            {
              if(!checkEmail(el.value))
              {
                err_in_el = true;
                err[3][err[3].length] = tmp_name;
              }
            }else if(validate[a] == "date")
            {
              if(!checkDate(el.value) && el.value!="")
              {
                err_in_el = true;
                err[4][err[4].length] = tmp_name;
              }
            }else if(validate[a] == "datetime")
            {
              if(!checkDateTime(el.value) && el.value!="")
              {
                err_in_el = true;
                err[15][err[15].length] = tmp_name;
              }
            }else if(validate[a] == "time")
            {
              if(!checkTime(el.value) && el.value!="")
              {
                err_in_el = true;
                err[9][err[9].length] = tmp_name;
              }
            }else if(validate[a] == "accountnumber" || validate[a] == "bankaccount")
            {
              if(!checkAccountNumber(el.value) && el.value!="")
              {
                err_in_el = true;
                err[8][err[8].length] = tmp_name;
              }
            }else if(validate[a] == "nl_postal_code")
            {
              if(!checkNlPostalCode(el.value))
              {
                err_in_el = true;
                err[6][err[6].length] = tmp_name;
              }
            }else if(validate[a] == "tel_nr")
            {
              if((el.value!='') && !checkTelephoneNumber(el.value))
              {
                err_in_el = true;
                err[16][err[16].length] = tmp_name;
              }
            }else if(validate[a] == "req_nr")
            {
              regexp = /([0-9])?/;
              test = ("" + el.value).match(regexp);
              if(test && typeof test[0] != "undefined") test = test[0];

              if(test=='')
              {
                err_in_el = true;
                err[17][err[17].length] = tmp_name;
              }
            }else if(ar = check_postal_code.exec(validate[a]))
            {
            	if(el.value != "undefined" && el.value != "")
            	{
	              land_id_el = (ar[1].substring(1, ar[1].length-1));

	              try
	              {
	                if(land_id_el = form.elements[land_id_el])
	                {
	                  if(land_id_el.value == 'NL')
	                  {
											if(!checkNlPostalCode(el.value))
				              {
				                err_in_el = true;
				                err[6][err[6].length] = tmp_name;
				              }
	                  }
	                }
	              }catch(e) {}
							}
            }else if(ar = must_be_equal_to.exec(validate[a]))
            {
              must_equal_el = (ar[1].substring(1, ar[1].length-1));
              try
              {
                if(must_equal_el = form.elements[must_equal_el])
                {
                  if((typeof must_equal_el.value != "undefined") && must_equal_el.value!=el.value)
                  {
                    err_in_el = true;
                    error_name = must_equal_el.getAttribute("error")
                    if(error_name && error_name!="")
            	        other_el = error_name;
              			else
                    	other_el = getGoodName(must_equal_el.name, nameActions);
                    err[7][err[7].length] = tmp_name + " != " + other_el;
                  }
                }
              }catch(e) {}
            }else if(ar = one_must_be_set.exec(validate[a]))
            {
            	this_or_el = (ar[1].substring(1, ar[1].length-1));
            	try
            	{
								if((typeof el.value != "undefined") && el.value=="")
              	{
              		if(this_or_el = form.elements[this_or_el])
              		{
	               		if((typeof this_or_el.value != "undefined") && this_or_el.value=="")
	               		{
	               			err_in_el = true;
	               			err[0][err[0].length] = tmp_name;
	               		}
	               	}
              	}
            	}catch(e) {}
            }else if(ar = min.exec(validate[a]))
            {
              minValue = (ar[1].substring(1, ar[1].length-1));
            	try
            	{
								if(checkNumeric(minValue)==0)
              	{
                  if(parseFloat(el.value) < minValue)
              		{
              			err_in_el = true;
              			err[11][err[11].length] = tmp_name;
              		}
              	}
            	}catch(e) {}
            }else if(ar = max.exec(validate[a]))
            {
              maxValue = (ar[1].substring(1, ar[1].length-1));

            	try
            	{
								if(checkNumeric(maxValue)==0)
              	{
                  if(parseFloat(el.value) > maxValue)
              		{
              			err_in_el = true;
              			err[12][err[12].length] = tmp_name;
              		}
              	}
            	}catch(e) {}
            }else if(ar = check_extensions.exec(validate[a]))
            {
            	extensions = (ar[1].substring(1, ar[1].length-1));
              extensions = extensions.split(",");
            	try
            	{
								if((typeof el.value != "undefined") && el.value!="")
              	{
                  ok = false;
                  ext = ("" + el.value).substring((""+el.value).lastIndexOf(".")+1);
                  for(bc=0;!ok && bc < extensions.length;bc++)
                    if(extensions[bc] == ext)
                      ok = true;

                  if(!ok)
                  {
                    err_in_el = true;
                    if((el.name=="doc[]"))
                			err[13][err[13].length] = "";
                    else
                      err[14][err[14].length] = "";
                  }
              	}
            	}catch(e) {}
            }
          }
        }
        if(err_in_el && !((el.name=="doc[]") || (el.name=="img[]")))
        {
          try
          {
            if(highlitecolors[0]!="")
              el.style.borderColor = highlitecolors[0];
            if(highlitecolors[1]!="")
              el.style.backgroundColor = highlitecolors[1];
          }catch ( e ) {}
        }else
        {
            if(highlitecolors[2]!="")
              el.style.borderColor = highlitecolors[2];
            if(highlitecolors[3]!="")
              el.style.backgroundColor = highlitecolors[3];
        }
      }
    }

    total_errs = 0;
    for(a=0;a<err.length;a++)
      total_errs += err[a].length;
    if(total_errs>0)
    {
      err_txt = labels[5] + "\n\n";
      for(a=0;a<err.length;a++)
      {
        if(err[a].length>0)
        {
          err_txt += labels[a] + ":\n" + err[a].join(", ") + "\n\n";
        }
      }
      alert(err_txt);
    }else
      return true;
  }
  return false;
}

/*
function checkEmail(email)
{
  //regexp = /(\w+\-?\.?\w+\-?\w+)+@(\w+\-?\w+)(\.\w+)/;
  //return (("" + email).match(regexp) || ("" + email)=="");
  return ValidateEmailJS(email);
}
*/

function checkEmail(email)
{
  //regexp = /(\w+\-?\.?\w+\-?\w+)+@(\w+\-?\w+)(\.\w+)/;
  //regexp = /\w+([\.\-_]{1}\w+)*@(\w+([\.\-_]{1}\w+)*)\.(ac|ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cat|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jobs|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mobi|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|post|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|travel|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|xxx|ye|yt|yu|za|zm|zw)/;
  regexp = /\w+([\.\-_]{1}\w+)*@(\w+([\.\-_]{1}\w+)*)\.(\w{2,4})/;

  test = ("" + email).match(regexp);
  if(test && typeof test[0] != "undefined") test = test[0];
  return (test==email || ("" + email)=="");
}

function ValidateEmailJS(checkString)
{
  var newstr = "";
  var at = false;
  var dot = false;
  var dotpos = false;

  // IF EMAIL ADDRESS HAS A '@' CHARACTER
  if (checkString.indexOf("@") != -1)
  {
    at = true;
  // IF EMAIL ADDRESS HAS A '.' CHARACTER
  }
  else if (checkString.indexOf(".") != -1)
 	{
    dot = true;
  }
  // IF EMAIL ADDRESS HAS A '.' AFTER a '@'
  if (checkString.lastIndexOf(".") > checkString.indexOf("@"))
  {
    dotpos = true;
  }

  // PARSE REMAINDER OF STRING
  for (var i = 0; i < checkString.length; i++)
  {
      ch = checkString.substring(i, i + 1)
      if ((ch >= "A" && ch <= "Z") || (ch >= "a" && ch <= "z")
              || (ch == "@") || (ch == ".") || (ch == "_")
              || (ch == "-") || (ch >= "0" && ch <= "9"))
      {
        newstr += ch;
        if (ch == "@")
        {
            at=true;
        }
        if (ch == ".")
        {
            dot=true;
        }
      }
  }
  if ((at == true) && (dot == true) && (dotpos == true) && (newstr == checkString))
  {
    return true;
  }
  else
  {
    return false;
  }
}

function checkDate(date)
{
  val = (""+date).split("-");
  if(val.length==3)
  {
    dat = new Date(val[2], val[1]-1, val[0]);
    newdat = new Date(Date.parse(dat));
    if(newdat==-1 || (newdat.getDate()!=Math.round(val[0]) || newdat.getFullYear()!=Math.round(val[2]) || newdat.getMonth()!=Math.round(val[1]-1)))
      return false;
  }else
    return false;

  return true;
}

function checkDateTime(date)
{
  val = (""+date).split(" ");
  if(val.length==2)
  {
    date = val[0];
    time = val[1];
    return checkDate(date) && checkTime(time);
  }

  return false;
}

function checkTime(time)
{
  val = (""+time).split(":");
  if(val.length==2 || val.length==3)
  {
  	if (parseInt(val[0]) < 0 || parseInt(val[0]) >= 24)
      return false;
    if (parseInt(val[1]) < 0 || parseInt(val[1]) >= 60)
    	return false;
    if(val.length==3)
    {
      if (parseInt(val[2]) < 0 || parseInt(val[2]) >= 60)
      	return false;
    }
  }else
    return false;

  return true;
}

function checkNlPostalCode(code)
{
	tmp_val = code.replace(" ", "");
	first  = -1;
	second = -1;
	third  = -1;
	if(tmp_val.length == 6)
	{
	  first  = tmp_val.substring(0,4);
	  second = tmp_val.substring(4,5);
	  third  = tmp_val.substring(5,6);

		if((checkNumeric(first) == 0) && (checkNumeric(second) == -1) && (checkNumeric(third) == -1))
			return true;
	}

	return false;
}

function cleanPostalCode(code)
{
	var postcode = removeSpaces(code);
  var first  = postcode.substring(0,4);
  var second = postcode.substring(4,6);
  if(checkNlPostalCode(postcode))
		return first+' '+second.toUpperCase();

	return code;
}

function checkNumeric(number)
{
  res = 0;
  if(number != ((number/2)*2))
  {
    res--;
    if((""+number).indexOf(",")!=-1)
      res--;
  }
  return res;
}

function getGoodName(old, actions)
{
  for(var i=0; i < actions.length; i++)
  {
    if(actions[i][0])
    {
      switch(actions[i][0])
      {
        case "substring":
          if(actions[i][2]=="-1")
            old = (""+old).substring(actions[i][1]);
          else
            old = (""+old).substring(actions[i][1], actions[i][2]);
        break;

        case "replace":
          while(old.indexOf(actions[i][1])!=-1)
            old = (""+old).replace(actions[i][1], actions[i][2]);
        break;

        case "ucfirst":
          old = (old.substring(0, 1)).toUpperCase() + old.substring(1);
        break;
      }
    }
  }
  return old;
}


function checkTelephoneNumber(nr)
{
  var nr = nr.replace(/ /g,'',nr);
  nr = nr.replace(/-/g,'',nr);
  nr = nr.replace(/\//,'',nr);
  nr = nr.replace(/=/,'',nr);
  nr = nr.replace(/\./,'',nr);
  var netNumbers = ',6,10,13,15,20,23,24,26,30,33,35,36,38,40,43,45,46,50,53,55,58,70,71,72,73,74,75,76,77,78,79,111,113,114,115,117,118,161,162,164,165,166,167,168,172,174,180,181,182,183,184,186,187,222,223,224,226,227,228,229,251,252,255,294,297,299,313,314,315,316,317,318,320,321,341,342,343,344,345,346,347,348,411,412,413,416,418,475,478,481,485,486,487,488,492,493,495,497,499,511,512,513,514,515,516,517,518,519,521,522,523,524,525,527,528,529,541,543,544,545,546,547,548,561,562,566,570,571,572,573,575,577,578,591,592,593,594,595,596,597,598,599,';
  var regexp = /(((((00)|(\+))(\d{2})?)[\(]*(0)?[\)]*)|0)(\d{3})(\d{6})/;
  var test = ("" + nr).match(regexp);
  if(test && typeof test[0] != "undefined" && test[0]==nr && nr!='')
  {
    for(ctn=0;ctn<test[9].length;ctn++)
    {
      netnum = test[9].substring(0, test[9].length-ctn);
      if(netNumbers.indexOf(','+netnum+',')!==-1)
      {
        //okNr = '+31 (0) '+(test[9]+test[10]).replace(netnum, netnum + ' ');
        return true;//'';//okNr+"<BR>";
      }
    }
  }
  return false;
}


function checkAccountNumber(number)
{
  /* Maak sommige hoofd-variabelen */
  total = 0;
  count = 9;
  numberlength = 0;

  /* Maak een loop om elk afzonderlijk cijfer uit het hele nummer te halen.
     En vermeenvuldig het met $count (Deze begint bij 9 en loopt af.) */
  for(var i=0;i<number.length;i++)
  {
   number_temp = (""+number).substr(i,1);
   if(!checkNumeric(number_temp))
   {
    total = total + number_temp * count;
   	count--;
    numberlength++;
   }
  }

  /* Is het getal zonder punten en streepjes 9 cijfers lang? */
  if(numberlength != 9)
  	return false;

  /* Kijk of de som ($total) van alle cijfers in het nummer deelbaar is door 11.
     Hier mag ook geen cijfer achter de komma uitkomen! */
  if (total % 11 == 0){ return true; } else { return false; }

}

function removeSpaces(string)
{
  var tstring = "";
  string = '' + string;
  splitstring = string.split(" ");
  for(i = 0; i < splitstring.length; i++)
  tstring += splitstring[i];
  return tstring;
}

function doSubmit(dovalidate, str_replace, formname)
{
  var result = true;
  var nameActions = new Array();

  if(typeof dovalidate =='undefined' || dovalidate)
  {
  	if(typeof str_replace != 'undefined')
  	{
  		nameActions = new Array(new Array("replace", str_replace, ""),
  														new Array("replace", "_", " "),
  														new Array("replace", "[", ""),
  														new Array("replace", "]", ""),
                              new Array("ucfirst")
                             );
  	}
  	else
  	{
   		nameActions = new Array(new Array("substring", "2", "-1"),
  														new Array("replace", "_", " "),
                              new Array("ucfirst")
                             );
  	}

    result = doValidate(document.forms[formname],
                        new Array(),
                        new Array("red",
                        					"white",
                                  "black",
                                  "white"),
                        nameActions
                       )


  }
  return result;
}


/* TIMER */
/******************************************************************************************/

var doelDatum=new Date(2006,8,5,16,0,0);
function countdown() {
  startDatum=new Date();
  if(startDatum<doelDatum)  {
  	var dag=0, uur=0, minuut=0, seconden=0;

		// Dagen
		while(startDatum.getTime()+(24*60*60*1000)<doelDatum) {
			dag++;
 			startDatum.setTime(startDatum.getTime()+(24*60*60*1000));
		}

		// Uren
		uur=Math.floor((doelDatum-startDatum)/(60*60*1000));
		startDatum.setTime(startDatum.getTime()+uur*60*60*1000);

		// Minuten
		minuut=Math.floor((doelDatum-startDatum)/(60*1000));
		startDatum.setTime(startDatum.getTime()+minuut*60*1000);

		// Seconden
		seconden=Math.floor((doelDatum-startDatum)/1000);

		// Anzeige formatieren
		(dag!=1)?dag="Nog "+dag+" dagen, ":dag="Nog "+dag+" dagen, ";
		(uur!=1)?uur=uur+" uur, ":uur=uur+" uur, ";
		(minuut!=1)?minuut=minuut+" minuten en ":minuut=minuut+" minuten en ";
		if(seconden<10) seconden="0"+seconden;
		(seconden!=1)?seconden=seconden+" seconden":seconden=seconden+" seconden";

		 document.countdownform.countdowninput.value=dag+uur+minuut+seconden;

		 setTimeout('countdown()',200);
	 }
		 else document.countdownform.countdowninput.value=".";
}