// validate.js v 1.98
// a generic form validator 
// (cc) Brian Lalonde http://webcoder.info/downloads/validate.html
// License: http://creativecommons.org/licenses/by-sa/2.0/

var status



function formFocus(frm)
{ // convenient way to start the form onLoad
  if(!document.forms.length) return;
  var els= ( frm || document.forms[0] ).elements;
  for(var i= 0; i < els.length; i++)
    if(els[i].type != 'hidden') { els[i].focus(); return; }
}

function formChanged(frm)
{ // determine whether any form fields have changed
  if(!document.forms.length) return;
  var els= ( frm || document.forms[0] ).elements;
  for(var i= 0; i < els.length; i++)
    switch(els[i].type)
    {
      case 'text': 
      case 'textarea': 
      case 'password': 
      case 'hidden':
      case 'file':
        if(els[i].defaultValue!=els[i].value)
        { status= '\'' + fieldname(els[i]) + '\' -  field has changed.'; return true; } 
        break;
      case 'checkbox':
        if(els[i].defaultChecked!=els[i].checked)
        { status= '\'' + fieldname(els[i]) + '\' -  checkbox has changed.'; return true; }
        break;
      case 'select-one':
        for(var j= 1; j < els[i].options.length; j++)
          if(els[i].options[j].defaultSelected!=els[i].options[j].selected)
          { status= '\'' + fieldname(els[i]) + '\' -  selection has changed.'; return true; }
        break;
      case 'select-multiple':
        for(var j= 0; j < els[i].options.length; j++)
          if(els[i].options[j].defaultSelected!=els[i].options[j].selected)
          { status= '\'' + fieldname(els[i]) + '\' -  selections have changed.'; return true; }
        break;
      case 'radio':
        if(els[i].length)
          for(var j= 0; j < els[i].length; j++)
            if(els[i][j].defaultChecked!=els[i][j].checked)
            { status= '\'' + fieldname(els[i]) + '\' -  choice has changed.'; return true; }
        break;
    }
  return false;
}

function fieldname(fld)
{ // get the field label text or name
  if(fld.id && document.getElementsByTagName)
  {
    for(var i= 0, lbl= document.getElementsByTagName('LABEL'); i < lbl.length; i++)
      if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
    for(var i= 0, lbl= document.getElementsByTagName('label'); i < lbl.length; i++)
      if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
  }
  return fld.name.replace('_', ' ')||fld.type;
}

function requireValue(fld)
{ // disallow a blank field
 
  if(fld.disabled) return true;
  if(!fld.value.length)
  { 
	if (fld.type == 'select-one') {
		  	status = '\'' + fieldname(fld) + '\' - ' + getFormValidationText('requireValue : selectone', strCultureCode);
		  	return false; 
	} 
	
	else {
		  	status = '\'' + fieldname(fld) + '\' - ' + getFormValidationText('requireValue : else', strCultureCode);
		  	return false; 
	}
  } 
  return true;
}

function requireChecked(fld)
{ // require a checkbox to be checked
  if(fld.disabled) return true;
  if(!fld.checked)
  { status= '\'' + fieldname(fld) + '\' - ' + getFormValidationText('requireChecked', strCultureCode); return false; }
  return true;
}

function requireConfirmation(fld,confirmfld)
{ // require fields to match
  if(fld.disabled) return true;
  if(fld.value != confirmfld.value)
  { status= '\'' + fieldname(fld) + '\' - ' + getFormValidationText('requireConfirmation', strCultureCode) + ' \'' + fieldname(confirmfld) + '\'.'; return false; }
  return true;
}

function requireRadio(radios)
{ // require at least one radio in this group to be checked

  if(!radios.length) return true; // invalid parameter
  var visible= false, enabled= false, labelconcat = '';
  for(var i= 0; i < radios.length; i++)
  {
	if (i == radios.length -1) {
		labelconcat += ' '  + getFormValidationText('requireRadio : or', strCultureCode) + ' '; 
	} else if (i > 0) {
		labelconcat += ', ';
	}
	labelconcat += fieldname(radios[i])
    if(!enabled) enabled= !radios[i].disabled;
    if(radios[i].checked) return true;
    else if(radios[i].offsetWidth == undefined || radios[i].offsetWidth > 0) visible= true;
  }
  if(!visible||!enabled) return true; // no visible/enabled options in this group
  
  var radiogrouplabel = '';
  if (radios[0].previousSibling) if (radios[0].previousSibling.innerHTML != '') radiogrouplabel = ReplaceTags(radios[0].previousSibling.innerHTML).replace('&nbsp;', '') + ' '
    
  status= radiogrouplabel + ' ' + getFormValidationText('requireRadio', strCultureCode) + ' ' + labelconcat + '.';
  return false;
}

function requireLength(fld,min,max)
{ // set minimum and/or maximum field lengths
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var len= fld.value.length;
  
/*
  if(min > -1 && len < min)
  { status= '\'' + fieldname(fld) + '\' - invoer in dit veld moet minimaal '+min+
    ' teken(s) lang zijn; het is nu '+len+' teken(s) lang.'; return false; }
	
  if(max > -1 && len > max)
  { status= '\'' + fieldname(fld)+ '\' - invoer in dit veld moet niet meer dan '+max+
    ' teken(s) lang zijn; het is nu '+len+' teken(s) lang.'; return false; }

*/	
  if(min > -1 && len < min)
  { status= '\'' + fieldname(fld) + '\' - '  + getFormValidationText('requireLength', strCultureCode) + ' ('+len+') ' + getFormValidationText('requireLength : shorter', strCultureCode) + ' ('+min+') '  ; return false; }
	
  if(max > -1 && len > max)
  { status= '\'' + fieldname(fld) + '\' - '  + getFormValidationText('requireLength', strCultureCode) + ' ('+len+') ' + getFormValidationText('requireLength : longer', strCultureCode) + ' ('+max+') '  ; return false; }
	
  return true;
}

function dependants(enabled,elements)
{ // convenience function to enable/disable dependant fields, passed in as an array 
	if(!elements.length) return true;
	for(var i= 0; i < elements.length; i++) {
		if (elements[i].length > 1) { // radiobuttons
			for(var n= 0; n < elements[i].length; n++) {
				elements[i][n].disabled = !enabled;
				if (elements[i][n].checked) elements[i][n].checked = false;
			}
		}
    	elements[i].disabled = !enabled;
		if (!enabled) {
			elements[i].value = '';
			if (elements[i].checked) elements[i].checked = false;
		}
	}
}

function allowChars(fld,chars)
{ // provide a string of acceptable chars for a field
  if(fld.disabled) return true;
  for(var i= 0; i < fld.value.length; i++)
  {
    if(chars.indexOf(fld.value.charAt(i)) == -1)
    { status= '\'' + fieldname(fld)+ '\' - ' + getFormValidationText('(dis)allowChars', strCultureCode) + ' ' + fld.value.charAt(i); return false; }
  }
  return true;
}

function disallowChars(fld,chars)
{ // provide a string of unacceptable chars for a field
  if(fld.disabled) return true;
  for(var i= 0; i < fld.value.length; i++)
  {
    if(chars.indexOf(fld.value.charAt(i)) != -1)
    { status= '\'' + fieldname(fld)+ '\' - ' + getFormValidationText('(dis)allowChars', strCultureCode) + ' ' + fld.value.charAt(i); return false; }  }
  return true;
}

function checkEmail(fld)
{ // simple email check
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var phony= /@(\w+\.)*example\.(com|net|org)$/i;
  if(phony.test(fld.value))
  { status= '\'' + fieldname(fld)+'\' -'  + getFormValidationText('checkEmail', strCultureCode); return false; }
  var emailfmt= /^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,8}$/;
  if(!emailfmt.test(fld.value))
  { status= '\'' + fieldname(fld)+'\' -'  + getFormValidationText('checkEmail', strCultureCode); return false; }
  return true;
}

function checkIntRange(fld,minVal,maxVal,sep)
{
  if(!fixInt(fld)) return false;
  var val= parseInt(fld.value);
  if(val < minVal) { status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('checkIntRange | checkFloatRange : lower', strCultureCode) + ' '+minVal+'.'; return false; } //interface text
  if(val > maxVal) { status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('checkIntRange | checkFloatRange : higher', strCultureCode) + ' '+maxVal+'.'; return false; } //interface text
  return true;
}

function checkFloatRange(fld,minVal,maxVal,sep)
{
  if(!fixFloat(fld)) return false;
  var val= parseFloat(fld.value);
  if(val < minVal) { status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('checkIntRange | checkFloatRange : lower', strCultureCode) + ' '+minVal+'.'; return false; }
  if(val > maxVal) { status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('checkIntRange | checkFloatRange : higher', strCultureCode) + ' '+maxVal+'.'; return false; }
  return true;
}

function fixInt(fld,sep)
{ // integer check/complainer 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var val= fld.value;
  if(typeof(sep)!='undefined') val= val.replace(new RegExp(sep,'g'),'');
  val= parseInt(val);
  if(isNaN(val))
  { // parse error 
    status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixInt', strCultureCode);
    return false
  }
  fld.value= val;
  return true;
}

function fixFloat(fld,sep)
{ // decimal number check/complainer 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var val= fld.value;
  if(typeof(sep)!='undefined') val= val.replace(new RegExp(sep,'g'),'');
  val= parseFloat(fld.value);
  if(isNaN(val))
  { // parse error 
    status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixFloat | fixFixed', strCultureCode);
    return false;
  }
  fld.value= val;
  return true;
}

function fixMoney(fld,sep)
{ // monetary field check
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var val= fld.value;
  if(typeof(sep)!='undefined') val= val.replace(new RegExp(sep,'g'),'');
  if(val.indexOf('$') == 0)
    val= parseFloat(val.substring(1,40));
  else
    val= parseFloat(val);
  if(isNaN(val))
  { // parse error 
    status= '\'' + fieldname(fld)+'\' - must contain a dollar amount.';
    return false;
  }
  var sign= ( val < 0 ? '-': '' );
  val= Number(Math.round(Math.abs(val)*100)).toString();
  while(val.length < 2) val= '0'+val;
  var len= val.length;
  val= sign + ( len == 2 ? '0' : val.substring(0,len-2) ) + '.' + val.substring(len-2,len+1);
  fld.value= val;
  return true;
}

function fixFixed(fld,dec,sep)
{ // fixed decimal fields 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var val= fld.value;
  if(typeof(sep)!='undefined') val= val.replace(new RegExp(sep,'g'),'');
  val= parseFloat(fld.value);
  if(isNaN(val))
  { // parse error 
    status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixFloat | fixFixed', strCultureCode);
    return false;
  }
  var sign= ( val < 0 ? '-': '' );
  val= Number(Math.round(Math.abs(val)*Math.pow(10,dec))).toString();
  while(val.length < dec) val= '0'+val;
  var len= val.length;
  val= sign + ( len == dec ? '0' : val.substring(0,len-dec) ) + '.' + val.substring(len-dec,len+1);
  fld.value= val;
  return true;
}

function fixDate(fld)
{ // tenacious date correction 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var val= fld.value;
  var dt= new Date(val.replace(/\D/g,'/'));
  if(!dt.valueOf())
  { // the date was unparseable 
    status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixDate | fixRecentDate', strCultureCode);
    return false;
  }
  fld.value= (dt.getMonth()+1)+'/'+dt.getDate()+'/'+dt.getFullYear();
  return true;
}

function fixRecentDate(fld,minyear)
{ // tenacious date correction 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var val= fld.value;
  var dt= new Date(val.replace(/\D/g,'/'));
  if(!dt.valueOf())
  { // the date was unparseable 
    status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixDate | fixRecentDate', strCultureCode);
    return false;
  }
  while(dt.getFullYear() < minyear) { dt.setFullYear(dt.getFullYear()+100); }
  fld.value= (dt.getMonth()+1)+'/'+dt.getDate()+'/'+dt.getFullYear();
  return true;
}

function fixTime(fld,starthour) 
{ // tenacious time correction 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var hour= 0; 
  var mins= 0;
  var ampm= 'am';
  val= fld.value;
  var dt= new Date('1/1/2000 ' + val);
  if(('9'+val) == parseInt('9'+val))
  { hour= val; }
  else if(dt.valueOf())
  { hour= dt.getHours(); mins= dt.getMinutes(); }
  else
  {
    val= val.replace(/\D+/g,':');
    hour= parseInt(val);
    mins= parseInt(val.substring(val.indexOf(':')+1,20));
    if(val.indexOf('pm') > -1) ampm= 'pm';
    if(isNaN(hour)) hour= 0;
    if(isNaN(mins)) mins= 0;
  }
  if(hour < starthour) { ampm= 'pm'; }
  while(hour > 12) { hour-= 12; ampm= 'pm'; }
  while(mins > 60) { mins-= 60; hour++; }
  if(mins < 10) mins= '0' + mins;
  if(!hour)
  { // the date was unparseable 
    status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixTime', strCultureCode);
    return false;
  }
  fld.value= hour + ':' + mins + ampm;
  return true;
}

function fixTime24(fld) 
{ // tenacious time correction 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var hour= 0; 
  var mins= 0;
  val= fld.value;
  var dt= new Date('1/1/2000 ' + val);
  if(('9'+val) == parseInt('9'+val))
  { hour= val; }
  else if(dt.valueOf())
  { hour= dt.getHours(); mins= dt.getMinutes(); }
  else
  {
    val= val.replace(/\D+/g,':');
    hour= parseInt(val);
    mins= parseInt(val.substring(val.indexOf(':')+1,20));
    if(isNaN(hour)) hour= 0;
    if(isNaN(mins)) mins= 0;
    if(val.indexOf('pm') > -1) hour+= 12;
  }
  hour%= 24;
  mins%= 60;
  if(mins < 10) mins= '0' + mins;
  fld.value= hour + ':' + mins;
  return true;
}

function fixPhone(fld,defaultAreaCode,sep,noext)
{ // tenacious phone # correction 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  if(typeof(sep)=='undefined') sep= '-';
  if(typeof(defaultAreaCode)!='undefined') defaultAreaCode= defaultAreaCode + sep;
  var ext= '', val= fld.value.toLowerCase();
  if(val.indexOf('x') > 0)
  {
    if(!noext) ext= ' x'+val.substr(val.indexOf('x')).replace(/\D/g,'');
    val= val.substr(0,val.indexOf('x'));
  }
  val= val.replace(/\D/g,'');
  if(val.length == 7)
  {
    fld.value= defaultAreaCode + val.substring(0,3) + sep + val.substring(3,20) + ext;
    return true;
  }
  if(val.length == 10)
  {
    fld.value= val.substring(0,3) + sep + val.substring(3,6) + sep + val.substring(6,20) + ext;
    return true;
  }
  if(val.length < 7)
  {
    status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixPhone | too short', strCultureCode);
    return false;
  }
  if(val.length > 10)
  {
    status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixPhone | too long', strCultureCode);
    return false;
  }
  status= '\'' + fieldname(fld)+'\' - ' + getFormValidationText('fixPhone | wrong', strCultureCode);
  return false;
}

function fixCreditCard(fld) {
//alert(fld);
// tenacious credit card correction; fieldname isn't a big consideration, probably only one card per form 
  if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
  var val= fld.value, ctype= 'credit card';
  val= val.replace(/\D/g,'');
  var prefix2= parseInt(val.substr(0,2));
  if( val.substr(0,1) == '4' )
  { // Visa
    ctype= 'Visa\xae';
    if( val.length == 16 );
    else if( val.length == 13 ); // very old #, should be reassigned
    else if( val.length < 13 )
    { status= 'The Visa\xae number you provided is not long enough.'; return false; }
    else if( val.length > 16 )
    { status= 'The Visa\xae number you provided is too long.'; return false; }
    else
    { status= 'The Visa\xae number you provided is either not long enough, or too long.'; return false; }
  }
  else if( prefix2 >= 51 && prefix2 <= 55 )
  { // MC
    ctype= 'MasterCard\xae';
    if( val.length < 16 )
    { status= 'The MasterCard\xae number you provided is not long enough.'; return false; }
    else if( val.length > 16 )
    { status= 'The MasterCard\xae number you provided is too long.'; return false; }
  }
  else if( (prefix2 == 34) || (prefix2 == 37) )
  { // AmEx
    ctype= 'American Express\xae card';
    if( val.length < 15 )
    { status= 'The American Express\xae card number you provided is not long enough.'; return false; }
    else if( val.length > 15 )
    { status= 'The American Express\xae card number you provided is too long.'; return false; }
  }
  else if( val.substr(0,4) == '6011' )
  { // Novus/Discover
    ctype= 'Discover\xae card';
    if( val.length < 16 )
    { status= 'The Discover\xae card number you provided is not long enough.'; return false; }
    else if( val.length > 16 )
    { status= 'The Discover\xae card number you provided is too long.'; return false; }
  }
  else
  { // other
    if( val.length < 13 )
    { status= 'The credit card number you provided is not long enough.'; return false; }
    if( val.length > 19 )
    { status= 'The credit card number you provided is too long.'; return false; }
  }
  var sum= 0, dbl= false;
  for(var i= val.length-1; i >= 0; i--)
  {
    var digit= parseInt(val.charAt(i))*((dbl=!dbl)?1:2);
    sum+= ( digit > 9 ? (digit%10)+1 : digit );
  }
  if(sum%10)
  {
    status= 'The '+ctype+' number you provided is not valid.\nPlease double-check it and try again.';
    return false;
  }
  fld.value= val;
  return true;
}

function nameContains(name,str)
{ // Check for nontrivial inclusion 
  // OK, *some* trivial cases must be handled...
  if(name == str || name.toLowerCase() == str.toLowerCase()) return true;
  var nlen= name.length;
  var slen= str.length;
  var endat= nlen - slen;
  // too small to fit?
  if(nlen > str) return false;
  if(name.toLowerCase() == name || name.toUpperCase() == name)
  { // all lower/upper case name? underscores separate
    if(name.indexOf('_') == -1) return false;
    str= str.toLowerCase();
    if( name.indexOf(str+'_') == 0 ||
      name.indexOf('_'+str+'_') > -1 ||
      name.substring(endat-1,nlen+1) == ('_'+str) )
      return true;
  }
  else
  { // proper case name? uppercase starts new words 
    var sep= name.substring(slen,slen+1);
    if( name.indexOf(str) == 0 && sep == sep.toUpperCase() ) return true;
    if( name.indexOf(str.toLowerCase()) == 0 && sep == sep.toUpperCase() ) return true;
    var sep= name.substring(endat-1,endat);
    if( name.substring(endat,nlen+1) == str ) return true;
    for(var index= name.indexOf(str); index > -1; index= name.indexOf(str,index+1))
    { // for each occurence of the word, is it followed by a non-lowercase char? 
      endat= index+slen;
      sep= name.substring(endat,endat+1);
      if(sep == sep.toUpperCase()) return true;
    }
  }
  return false;
}

function autocheckByName(frm) 
{ // uses names of form elements to determine type 
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
   
    if(!el.type) continue;
    if(el.type == 'text' || el.type == 'password' || el.type == 'file')
    { // text fields 
      if((nameContains(el.name,'Required')) && el.value.length == 0) //removed by FVE: el.name.substring(0,1) == el.name.substring(0,1).toUpperCase() ||
      { 
	  alert('\'' + fieldname(el)+'\' - ' + getFormValidationText('Required', strCultureCode)); el.focus(); return false; //interface text
	  } 
      if(nameContains(el.name,'Date') && !fixDate(el))
      { alert(status); el.focus(); return false; }
      if(nameContains(el.name,'Time24') && !fixTime24(el))
      { alert(status); el.focus(); return false; }
      if(nameContains(el.name,'Time') && !fixTime(el))
      { alert(status); el.focus(); return false; }
      if(nameContains(el.name,'CC') && !fixCreditCard(el))
      { alert(status); el.focus(); return false; }
      if(nameContains(el.name,'Email') && !checkEmail(el))
      { alert(status); el.focus(); return false; }
      if( ( nameContains(el.name,'Phone') ||
        nameContains(el.name,'Fax') || 
        nameContains(el.name,'Pager') ) &&
        !fixPhone(el))
      { alert(status); el.focus(); return false; }
    }
    // handle required select and select-multiple 
    else if(el.type.substring(0,3) == 'sel' && 
      (el.name.substring(0,1) == el.name.substring(0,1).toUpperCase() || 
      nameContains(el.name,'Required')) && el.selectedIndex == -1)
    { alert(status); el.focus(); return false; }
    // handle required checkbox
    else if(el.type == 'checkbox' && 
      (el.name.substring(0,1) == el.name.substring(0,1).toUpperCase() || 
      nameContains(el.name,'Required')) && !requireChecked(el))
    { alert(status); el.focus(); return false; }
    else if(el.type == 'radio' && isMemberOf(el,'required') && !requireRadio(frm[el.name]))
    { alert(status); frm.elements[index].focus(); return false; }
  }
  for(var index= 0; index < frm.elements.length; index++)
    //if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
  return true;
}

function isMemberOf(elem,classname)
{ // checks to see if elem is a member of the (style) class 
  // trivial cases first: no membership or simple equality
  if(!elem.className)
    return false
  else if(elem.className == classname)
    return true;
  else if(elem.className.indexOf(' ') > -1)
  { // multiple class names; use split, if avail 
    if(parseInt(navigator.appVersion) >= 4)
    {
      var names= elem.className.split(' ');
      for(var index= 0; index < names.length; index++)
        if(names[index] == classname)
          return true;
    }
    // older browsers can fake it 
    // WARNING: "fine" can be found in "oldRefined"
    else if(elem.className.indexOf(classname) > -1)
      return true;
  }
  return false;
}

function checkClass(el)
{ // validate the field, based on class membership
  if (el.disabled || el.type == 'hidden') return true; // hidden or disabled form elements should not be validated

  if(el.type == 'text' || el.type == 'password' || el.type == 'file')
  { // text fields 
  
    if(isMemberOf(el,'required') && !requireValue(el)) return false;
    if(isMemberOf(el,'date') && !fixDate(el)) return false;
    if(isMemberOf(el,'time') && !fixTime(el)) return false;
    if(isMemberOf(el,'time24') && !fixTime24(el)) return false;
    if(isMemberOf(el,'cc') && !fixCreditCard(el)) return false;
    if(isMemberOf(el,'phone') && !fixPhone(el)) return false;
    if(isMemberOf(el,'money') && !fixMoney(el)) return false;
    if(isMemberOf(el,'int') && !fixInt(el)) return false;
    if(isMemberOf(el,'float') && !fixFloat(el)) return false;
    if(isMemberOf(el,'email') && !checkEmail(el)) return false;
  } // handle required select and select-multiple 
  else if(el.type == 'checkbox' && 
    isMemberOf(el,'required') && !requireChecked(el)) return false;
  else if(el.type.substring(0,3) == 'sel' && 
    isMemberOf(el,'required') && el.selectedIndex == -1)return false;
  return true;
}


function autocheckByClass(frm) 
{ // uses the CSS class of form elements to determine type 
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
     
    if(!el.type) continue;
    if(el.type == 'radio' && isMemberOf(el,'required') && !requireRadio(frm[el.name]))
    { alert(status); frm.elements[index].focus(); return false; }
    //WDR - 20070813 toegevoegd i.v.m. /events/meerinformatie/ check of er een option is geselecteerd (bugfix)
    if(el.type == 'select-multiple' && isMemberOf(el,'required') && !requireValue(frm[el.name]))
    { alert(status); frm.elements[index].focus(); return false; }
    else if(!checkClass(frm.elements[index])) 
    { 
		alert(status); frm.elements[index].focus(); return false; 
	}
  }
  for(var index= 0; index < frm.elements.length; index++)
    //if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
  return true;
}

function autocheckByBlur(frm)
{ // uses the onBlur handler of form elements to check value 
  status= ''; // reset status

  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
    if(!el.type) continue;
    if(el.type == 'radio' && isMemberOf(el,'required') && !requireRadio(frm[el.name])){
		alert(status); frm.elements[index].focus(); return false;
	}
    else if(el.type != 'hidden' && el.name && el.onblur)
    {
      el.onblur();
      if(status) { alert(status); el.focus(); return false; }
    }
  }
  for(var index= 0; index < frm.elements.length; index++)
    //if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
  return true;
}

function canCheckByBlur(frm)
{ // determines whether programmatic invocation of form element onblur is available
  for(var index= 0; index < frm.elements.length; index++)
  {
    var el= frm.elements[index];
    if(!el.type) continue;
    if(el.type != 'hidden' && el.name && typeof(el.onblur)=='function') return true;
  }
  return false;
}

function autocheck(frm)
{ // uses the best available method to check form values 
  var bchar= navigator.appName.substring(0,1);
  if(isMemberOf(frm,'autocheck'))
  { return autocheckByClass(frm); }
  else if(canCheckByBlur(frm))
  { return autocheckByBlur(frm); }
  else
  { return autocheckByName(frm); }
}

var regExp = /<\/?[^>]+>/gi;

function ReplaceTags(xStr){
	xStr = xStr.replace(regExp,"");
	return xStr;
}

/* CUSTOM */

function checkNumber(objInput)
{
	if (objInput.value != "") {
		if (isNaN(objInput.value)) {
			alert("U kunt hier alleen getallen invoeren.");
			objInput.value = "1";
			objInput.style.backgroundColor = "#ff9999"; 
		} else {
			objInput.style.backgroundColor = "#FFFFFF"; 
		}
	}
}



function getFormValidationText(strKeyCode, strCulture) {
	var intCultureIndex;
	switch (strCulture) {
		case 'de-DE':
			intCultureIndex = 1 // to do: German translation
			break
		case 'en-GB':
			intCultureIndex = 1
			break
		default:
			intCultureIndex = 2 //nl-NL
	}
	
	for (x = 0; x < FormValidationTexts.length; x++) {
		if (FormValidationTexts[x][0] == strKeyCode) {
			return FormValidationTexts[x][intCultureIndex];
			break;
		}
	}
	return 'Error: form validation text \'' + strKeyCode + '\' does not exist.';
}

FormValidationTexts = new Array()

FormValidationTexts[0] = new Array(3); FormValidationTexts[0][0] = 'requireValue : selectone'
FormValidationTexts[0][1] = 'it is required to select an option.'
FormValidationTexts[0][2] = 'het is verplicht een keuze te maken uit de lijst.'

FormValidationTexts[1] = new Array(3); FormValidationTexts[1][0] = 'requireValue : else'
FormValidationTexts[1][1] = 'this field cannot be left blank.' //en-US
FormValidationTexts[1][2] = 'dit veld moet worden ingevuld.' //nl-NL

FormValidationTexts[2] = new Array(3); FormValidationTexts[2][0] = 'requireChecked'
FormValidationTexts[2][1] = 'must be checked' //en-US
FormValidationTexts[2][2] = 'moet worden aangevinkt.' //nl-NL

FormValidationTexts[3] = new Array(3); FormValidationTexts[3][0] = 'requireConfirmation'
FormValidationTexts[3][1] = 'this value must match the value for' //en-US
FormValidationTexts[3][2] = 'deze invoer moet gelijk zijn aan de invoer bij' //nl-NL

FormValidationTexts[4] = new Array(3); FormValidationTexts[4][0] = 'requireRadio'
FormValidationTexts[4][1] = 'It is required to choose between' //en-US
FormValidationTexts[4][2] = 'Het is verplicht een keuze te maken tussen' //nl-NL

FormValidationTexts[5] = new Array(3); FormValidationTexts[5][0] = 'requireRadio : or'
FormValidationTexts[5][1] = 'or' //en-US
FormValidationTexts[5][2] = 'of' //nl-NL

FormValidationTexts[6] = new Array(3); FormValidationTexts[6][0] = 'requireLength'
FormValidationTexts[6][1] = 'the current number of characters of the value of this field' //en-US
FormValidationTexts[6][2] = 'de huidige aantal tekens van de invoer in dit veld' //nl-NL

FormValidationTexts[7] = new Array(3); FormValidationTexts[7][0] = 'requireLength : longer'
FormValidationTexts[7][1] = 'is longer than the maximum number of characters' //en-US
FormValidationTexts[7][2] = 'is langer dan het maximale aantal tekens' //nl-NL

FormValidationTexts[8] = new Array(3); FormValidationTexts[8][0] = 'requireLength : shorter'
FormValidationTexts[8][1] = 'is shorter than the minimum number of characters' //en-US
FormValidationTexts[8][2] = 'is korter dan het minimale aantal tekens' //nl-NL

FormValidationTexts[9] = new Array(3)
FormValidationTexts[9][0] = '(dis)allowChars'
FormValidationTexts[9][1] = 'this field may not contain the following character:' //en-US
FormValidationTexts[9][2] = 'dit veld mog niet het volgende teken bevatten:' //nl-NL

FormValidationTexts[10] = new Array(3)
FormValidationTexts[10][0] = 'checkEmail'
FormValidationTexts[10][1] = 'this must be a valid e-mail address.' //en-US
FormValidationTexts[10][2] = 'dit moet een geldig e-mail adres zijn.' //nl-NL

FormValidationTexts[11] = new Array(3)
FormValidationTexts[11][0] = 'checkIntRange | checkFloatRange : lower'
FormValidationTexts[11][1] = 'this number may not be lower than' //en-US
FormValidationTexts[11][2] = 'dit getal mag niet lager zijn dan' //nl-NL

FormValidationTexts[12] = new Array(3)
FormValidationTexts[12][0] = 'checkIntRange | checkFloatRange : higher'
FormValidationTexts[12][1] = 'this number may not be higher than' //en-US
FormValidationTexts[12][2] = 'dit getal mag niet hoger zijn dan' //nl-NL

FormValidationTexts[13] = new Array(3)
FormValidationTexts[13][0] = 'fixInt'
FormValidationTexts[13][1] = 'this must contain a whole number.' //en-US
FormValidationTexts[13][2] = 'dit veld moet een geheel getal bevatten.' //nl-NL

FormValidationTexts[14] = new Array(3)
FormValidationTexts[14][0] = 'fixFloat | fixFixed'
FormValidationTexts[14][1] = 'must contain a number.' //en-US
FormValidationTexts[14][2] = 'dit veld moet een getal bevatten.' //nl-NL

FormValidationTexts[15] = new Array(3)
FormValidationTexts[15][0] = 'fixDate | fixRecentDate'
FormValidationTexts[15][1] = 'this is not a valid date.' //en-US
FormValidationTexts[15][2] = 'dit is geen geldige datum.' //nl-NL

FormValidationTexts[16] = new Array(3)
FormValidationTexts[16][0] = 'fixTime'
FormValidationTexts[16][1] = 'this is not a valid time.' //en-US
FormValidationTexts[16][2] = 'dit is geen geldige tijd.' //nl-NL

FormValidationTexts[17] = new Array(3)
FormValidationTexts[17][0] = 'fixPhone | too short'
FormValidationTexts[17][1] = 'this phone number is too short.' //en-US
FormValidationTexts[17][2] = 'dit telefoonnummer is te kort.' //nl-NL

FormValidationTexts[18] = new Array(3)
FormValidationTexts[18][0] = 'fixPhone | too long'
FormValidationTexts[18][1] = 'this phone number is too long.' //en-US
FormValidationTexts[18][2] = 'dit telefoonnummer is te lang.' //nl-NL

FormValidationTexts[19] = new Array(3)
FormValidationTexts[19][0] = 'fixPhone | wrong'
FormValidationTexts[19][1] = 'this phone number is wrong.' //en-US
FormValidationTexts[19][2] = 'dit telefoonnummer is ongeldig.' //nl-NL

FormValidationTexts[20] = new Array(3)
FormValidationTexts[20][0] = 'Required'
FormValidationTexts[20][1] = 'this field is required.' //en-US
FormValidationTexts[20][2] = 'dit veld moet worden ingevuld.' //nl-NL

FormValidationTexts[21] = new Array(3)
FormValidationTexts[21][0] = 'The chosen arrival date is in the past'
FormValidationTexts[21][1] = 'The chosen arrival date is in the past.' //en-US
FormValidationTexts[21][2] = 'De door u gekozen aankomstdatum ligt in het verleden.' //nl-NL

FormValidationTexts[22] = new Array(3)
FormValidationTexts[22][0] = 'The departure date must come after the arrival date'
FormValidationTexts[22][1] = 'The departure date must come after the arrival date.' //en-US
FormValidationTexts[22][2] = 'De vertrekdatum moet later zijn dan de aankomstdatum.' //nl-NL

FormValidationTexts[23] = new Array(3)
FormValidationTexts[23][0] = 'TOO_MANY_ADULTS'
FormValidationTexts[23][1] = 'You need two rooms for the selected number of adults.' //en-US
FormValidationTexts[23][2] = 'Voor het door u gekozen aantal volwassen heeft u twee kamers nodig.' //nl-NL

FormValidationTexts[24] = new Array(3)
FormValidationTexts[24][0] = 'TOO_MANY_ADULTS_LCR'
FormValidationTexts[24][1] = 'You need more rooms for the selected number of adults (2 per room).' //en-US
FormValidationTexts[24][2] = 'Voor het door u gekozen aantal volwassen heeft u meer kamers nodig. Er kunnen maximaal 2 personen op een kamer.' //nl-NL

FormValidationTexts[25] = new Array(3)
FormValidationTexts[25][0] = 'TOO_MANY_ROOMS'
FormValidationTexts[25][1] = 'Too many rooms for one adult.' //en-US
FormValidationTexts[25][2] = 'Te veel kamers voor 1 volwassene.' //nl-NL

FormValidationTexts[26] = new Array(3)
FormValidationTexts[26][0] = 'TOO_MANY_ROOMS_LCR'
FormValidationTexts[26][1] = 'You have selected more rooms than adults.' //en-US
FormValidationTexts[26][2] = 'U heeft meer kamers dan personen geselecteerd. Er dient minimaal 1 persoon in een kamer te verblijven.' //nl-NL


