ENGINE_labels = new Array();
ENGINE_labels[0] = "De volgende velden zijn verplicht";
ENGINE_labels[1] = "De volgende fouten zijn opgetreden tijdens het invullen van het formulier";
ENGINE_labels[2] = "Deze velden bevatten geen correct email adres";
ENGINE_labels[3] = "Deze velden bevatten geen correcte datum (DD-MM-YYYY)";
function ENGINE_doValidate(form, alertErr)
{
  if(typeof ENGINE_labels == "undefined")
    alert("Please include a labels file or define a labels array yourself");
  err = new Array();
  err[0] = new Array(); // Required
  err[1] = new Array(); // General error
  err[2] = new Array(); // Email
  err[3] = new Array(); // Date

  lastName = '';
  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 = el.name;
        error_name = el.getAttribute("error") 
        if(error_name && error_name!="")
	        error = error_name;
              
        if(validate.length>0)
          tmp_name = error; 

        if(tmp_name==lastName)
          continue;
          
        for( a = 0 ; a < validate.length ; a++)
        {
          if(!err_in_el)
          {
            if(validate[a] == "required")
            {
              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 (el.type.toLowerCase() == "checkbox")
              {
                ok = false;
                if(typeof form.elements[el.name].length != 'undefined' && form.elements[el.name].length>1)
                {
                  for(var b=0;b<form.elements[el.name].length;b++)
                  {
                    if(form.elements[el.name][b].checked)
                    {
                      ok = true;
                      break;
                    }
                  }
                }else
                  ok = el.checked;
                if(!ok)
                  err_in_el = true;
              }else if (el.tagName.toLowerCase() == "select")
              {
                if(el.selectedIndex==-1 || el[el.selectedIndex].value=='')
                  err_in_el = true;
              }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] == "email")
            {
              if(!ENGINE_checkEmail(el.value))
              {
                err_in_el = true;
                err[2][err[2].length] = tmp_name;
              }
            }else if(validate[a] == "date")
            {
              if(!ENGINE_checkDate(el.value) && el.value!="")
              {
                err_in_el = true;
                err[3][err[3].length] = tmp_name;
              }
            }
          }
        }
        lastName = tmp_name;
      }
    }

    total_errs = 0;
    for(a=0;a<err.length;a++)
      total_errs += err[a].length;

    if(total_errs>0)
    {
      err_txt = ENGINE_labels[1] + ":\n\n";      
      for(a=0;a<err.length;a++)
      {
        if(err[a].length>0)
        {
          if(typeof err[a][0] != "object")
            err_txt += ENGINE_labels[a] + ":\n" + err[a].join(", ") + "\n\n";
          else
            err_txt += err[a][0][0] + ":\n" + err[a][0][1] + "\n\n";
        }
      }
      if(typeof alertErr == "undefined" || alertErr)
        alert(err_txt);
    }else
      return new Array();
  }
  return false;
}

function ENGINE_checkEmail(email)
{
  //regexp = /\w+([\.\-_]{1}\w+)*@(\w+([\.\-_]{1}\w+)*)\.(\w{2,4})/;
  regexp = /\w+([\.\-_\+]{1}\w*)*@(\w+([\.\-_]{1}\w+)*)\.(\w{2,6})/;

  test = ("" + email).match(regexp);
  if(test && typeof test[0] != "undefined") test = test[0];
  return (test==email || ("" + email)=="");
}
function ENGINE_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 checkForm(form, doAlert)
{
  result = ENGINE_doValidate(form, doAlert);
  return result;
}