function ValidateAndSubmit(objForm)
{
   if(ValidateForm(objForm)==true) objForm.submit()
}

function ValidateForm(objForm)
{
   var intIndex, strName
   for(intIndex=0;intIndex<=objForm.elements.length-1;intIndex++)
      if(ValidateElement(objForm.elements[intIndex])==false) return(false)
   for(intIndex=0;intIndex<=objForm.elements.length-1;intIndex++)
   {
      if(objForm.elements[intIndex].name.indexOf("name=")!=-1)
      {
         strName=Parse(objForm.elements[intIndex].name,"name")
         if(strName!="") objForm.elements[intIndex].name=strName
      }
   }
   return(true)
   
	
}

function ValidateElement(objElement)
{
   var strName, strValue, strName2, strDatatype, fltMin, fltMax, intMin, intMax, strRequired
   if(objElement.name.indexOf("name=")!=-1)
   {
      strName=objElement.name
      strValue=objElement.value
      strName2=Parse(strName,"name")
      strDatatype=Parse(strName,"datatype")
      strRequired=Parse(strName,"required")
      if(strRequired=="yes" && strValue=="")
      {
         alert("Je bent een verplicht veld vergeten in te vullen")
         objElement.focus()
         return(false)
      }
      if(strValue!="") switch(strDatatype)
      {
         case "date":
            if(ValidateDateNL(strValue)==false)
            {
               alert("Onjuiste datum, vul een datum in met het formaat \"DD-MM-YYYY\".")
               objElement.focus()
               return(false)
            }
            break
         case "email":
            if(ValidateEmail(strValue)==false)
            {
               alert("Onjuist e-mailadres, vul een e-mailadres in met het formaat: \"naam@domein.land\".")
               objElement.focus()
               return(false)
            }
            break
         case "float":
            fltMin=parseFloat(Parse(strName,"min"))
            fltMax=parseFloat(Parse(strName,"max"))
            if(isNaN(fltMin)||isNaN(fltMax))
            {
               alert("error: float min/max waarde is niet gecodeerd.")
               return(false)
            }
            if(ValidateFloat(strValue,fltMin,fltMax)==false)
            {
               alert("Incorrecte waarde. Voer een numerieke waarde in tussen "+fltMin+".."+fltMax+".")
               objElement.focus()
               return(false)
            }
            break
         case "integer":
            intMin=StringToInt(Parse(strName,"min"))
            intMax=StringToInt(Parse(strName,"max"))
            if(isNaN(intMin)||isNaN(intMax))
            {
               alert("error: integer min/max waarde niet gecodeerd.")
               return(false)
            }
            if(ValidateInteger(strValue,intMin,intMax)==false)
            {
               alert("Incorrecte waarde. Voer een integer waarde in tussen "+intMin+".."+intMax+".")
               objElement.focus()
               return(false)
            }
            break
         default: break
      }
   }
   return(true)
}

function Parse(strLine, strParameter)
{
   var intIndex, strParameterValue=""
   if(strParameter!="" && (intIndex=strLine.indexOf(strParameter+"="))!=-1)
   {
      intIndex+=strParameter.length+1
      while(intIndex<strLine.length && strLine.charAt(intIndex)!=" ")
         strParameterValue+=strLine.charAt(intIndex++)
   }
   return(strParameterValue)
}

function StringToInt(strString)
{
   var arrMatch=new RegExp("^([-]?)0*([0-9]+)$").exec(strString)
   if(arrMatch) return(parseInt(arrMatch[1]+arrMatch[2])); else return(NaN)
}

function ValidateDateNL(strValue)
{
   var arrMatch=new RegExp("^([0-9]{1,2})[/-]([0-9]{1,2})[/-]([0-9]{2}|[0-9]{4})$").exec(strValue)
   var intDay, intMonth, intYear
   /* Getallen */
   if(!arrMatch) return(false)
   intDay=StringToInt(arrMatch[1])
   intMonth=StringToInt(arrMatch[2])
   intYear=StringToInt(arrMatch[3])
   if(arrMatch[3].length==2) if(intYear<20) intYear+=2000; else intYear+=1900
   /* Geldige datum */
   if(isNaN(intDay) || intDay<1 || intDay>31) return(false)
   if(isNaN(intMonth) || intMonth<1 || intMonth>12) return(false)
   if(intDay>29 && intMonth==2) return(false)
   if(intDay==31 && (intMonth==4 || intMonth==6 || intMonth==9 || intMonth==11)) return(false)
   if(isNaN(intYear) || intYear<1000 || intYear>9999) return(false)
   if(intDay==29 && intMonth==2 && (intYear%4!=0 || (intYear%100==0 && intYear%400!=0))) return(false)
   return(true)
}

function ValidateEmail(strValue)
{
   var arrMatch=new RegExp("^[A-Za-z0-9_-]+([.][A-Za-z0-9_-]+){0,4}[@][A-Za-z0-9_-]+([.][A-Za-z0-9_-]+){1,3}$").exec(strValue)
   if(!arrMatch) return(false); else return(true)
}

function ValidateFloat(strValue, fltMin, fltMax)
{
   var arrMatch=new RegExp("^([-]?[0-9]+([.][0-9]+)?)$").exec(strValue)
   if(!arrMatch || parseFloat(arrMatch[1])<fltMin || parseFloat(arrMatch[1])>fltMax) return(false)
   else return(true)
}

function ValidateInteger(strValue, intMin, intMax)
{
   var arrMatch=new RegExp("^([-]?[0-9]+)$").exec(strValue)
   if(!arrMatch || StringToInt(arrMatch[1])<intMin || StringToInt(arrMatch[1])>intMax) return(false)
   else return(true)
}