//
// validate, mwe 06-06-2000, v0.2
//
//

var	strErrorLn	= "_______________________________\n\n";
var	strErrorMsg001	= "Dit veld moet ingevuld worden...\n";
var	strErrorMsg002	= "Dit mag alleen een getal zijn...\n";
var	strErrorMsg003A = "Veld bevat een ongeldige datum...\nFormaat is DD-MM-JJJJ.\n"
var   strErrorMsg003B = "De datum moet liggen tussen ";
var   strErrorMsg003C = "De datum moet liggen na ";
var   strErrorMsg003D = "De datum moet liggen voor ";
var	strErrorMsg004	= "Dit veld mag alleen letters bevatten...\n";
var	strErrorMsg005	= "Veld moet groter of gelijk zijn dan";
var	strErrorMsg006	= "Veld moet kleiner of gelijk zijn dan";
var	strErrorMsg007	= "Dit is geen geldig emailadres...\n";
var	strErrorMsg008	= "Verkeerd formaat...\n";
var	strErrorMsg009  = "...\n";
var	strErrorMsg010  = "Dit is geen geldige postcode.\n";
var	strErrorMsg011  = "Dit veld bevat meer tekens dan toegestaan.\n";
var   strErrorMsg012  = "Dit numeriek veld mag maar 1 punt of komma bevatten.\n";
var   strErrorMsg013A = "Dit veld mag niet meer dan ";
var   strErrorMsg013B = " tekens bevatten.\n";
var   strErrorMsg014  = "Dit veld mag niet negatief zijn.\n";
var   strErrorMsg015A  = "Dit veld mag niet meer dan ";
var   strErrorMsg015B  = " tekens voor de komma bevatten.\n";
var   strErrorMsg015C  = " tekens achter de komma bevatten.\n";
var   strErrorMsg016  = "De maximale waarde voor dit veld is: ";
var strErrorMsg017A = "Bankrekeningnummer moet 9 of 10 cijfers zijn\n"
var strErrorMsg017B = "Onjuist bankrekeningnummer\n"
var strErrorMsg018 = "Wachtwoord moet minstens 6 karakters zijn en minstens één cijfer en één letter bevatten.\n"
var   strErrorMsg019  = "Postcode in onjuist formaat.\n";
var   strErrorMsg020  = "Onjuist IP adres.\n";
var   strErrorMsg021  = "Onjuiste tijd\nTijd ligt niet tussen 00:00 - 23:59\n";
var   strErrorMsg022  = "Onjuist telefoonnummer\n";
var	  strErrorMsg025  = "wordt niet herkend als kenteken!\nIs dit een buitenlandskenteken klikt u dan op OK (u kunt deze melding negeren).\nKentekens moeten geschreven worden zoals op de kentekenplaat vermeld.\n Voorbeelden: ";

var	strErrorMsg999  = "De programmeur is een oen!\n";
// defaults (overruled in <countrycode>.js
if(typeof(_gMobPrefix)=="undefined") _gMobPrefix = "6";
if(typeof(_gCountryCode)=="undefined") _gCountryCode = "31";
if(typeof(_gTelnrPrefix)=="undefined") _gTelnrPrefix = "0";
if(typeof(_gCountry)=="undefined") _gCountry = "nl";
if(typeof(_gLanguage)=="undefined") _gLanguage = "nl";
if(typeof(_gTelnrMinLen)=="undefined") _gTelnrMinLen = 11;
if(typeof(_gTelnrMaxLen)=="undefined") _gTelnrMaxLen = 11;

//
// validate fraction/char/num/date, manditory, min, max, format, maxcharacters
//
// Arguments
//  item: Form object
//  type: "F" = "Fraction, "N" = Numeric, "C" = character, "D" = Date, "t" = time(00:00/24h checkonly)
//				, "T" = Telephonenr, "T+" Validate & Edit
//  empty: 0 = Empty not allowed, 1 = empty values allowed
//  min: Minimum value (For dates format as "EEYYMMDD")
//  max: Maximum value (For dates format as "EEYYMMDD")
//  format:
//     For Fraction: [P|Z]<numbers before seperator>.[P]<numbers after seperator>
//			P = add leading (before seperator) or trailing (after seperator) 0's
//			Z = If no number before the seperator add 1 zero
//     For numeric: 
//		"B" = bank account number check (11-proof)
//		"B+" = bank account, allowing Postbank numbers (between 1 and 7 digits)
//     For character: 
//		"E" = Email validation
//		Combination of 9 (any number), A (any alpha), X (any char)
//     For dates: 
//		"M" = MMDDEEYY
//		"Y" = EEYYMMDD 
//		"D" = DDMMEEYY (default)
//     For telephone numbers:
//		"0" = any type number (see ValidateTel for details)
//		"1" = Mobile number
//		"2" = Regular number (vast nummer)
//
//  maxlength: Optional check on maximum number of characters in a field
function ValidField (item, type, empty, min, max, fformat, maxlen) {

   if (item.length) {
     for(i=0;i<item.length;i++) {
       if(typeof item[i].checked && item[i].checked) break;
     }
     if(i < item.length) item = item[i];
     else item = item[item.selectedIndex];
   }
   var bIsEmpty = IsEmptyString(item);

	if(type == "T" || type == "T+"){
		stringFilter(item); // filter - en spaties
	}

   // check empty
   if (empty == "0" && bIsEmpty) {
      showAlert(item,strErrorMsg001);
      return false;
   }

   // if empty is allowed and field is empty then we are done.
   if (empty == "1" && bIsEmpty) {
      return true;
   }

   // Maxlength for a field (mainly here for textareas that do not have
   // a maxlength property themselves
   if (maxlen != null && maxlen != 0 && item.value.length > maxlen) {
      showAlert(item,strErrorMsg013A + maxlen + strErrorMsg013B);
      return false;
   }

   // check type
   switch(type) {
      case "F":
         // Check if this is a valid fraction
         if (!validFraction(item, min, max, fformat))
            return false;
         break;

      case "N":
         // Check if text is a valid number
         if (!validNumber(item,min,max,fformat))
            return false;
         break;

      case "C":
         if (!validChar(item,min,max,fformat))
            return false;
         break;
      case "D":
         if (!validDate(item,min,max,fformat))
            return false;
         break;
      case "T+": // Validate AND change Telephone number
        if (!valiEditTel(item,fformat)){
			return false;}
        break;
      case "T": // Validate Telephone number
        if (!validateTel(item,fformat)){
			return false;}
        break;
      case "t": // Validate 24-Time
        if (!validateTime(item)){
			return false;}
        break;
      case "P": // Validate Password
        if (!validatePassword(item)){
			return false;}
        break;
      case "Z":
		if(!validZip(item)){
			return false;}
		break;
	  case "K":
		if(!valLicensePlate(item.value)){
			item.focus();
			return false;
		}
		break;
      default:
         showAlert(item,strErrorMsg999);
         break;
   }
   return true;
}


function validZip(object){
	var bPCOK
	bPCOK = true
	if((object.value.length == 6 && _gCountry == "nl") || (object.value.length == 4 && _gCountry == "be")){
		var PCArray
		PCArray = object.value.split('')
		for( i = 0 ; i < 4; i ++){
			if(isNaN(PCArray[i])){
				bPCOK = false
			}
		}
		if(_gCountry == "nl") {
			for( i = 4 ; i < 6; i ++){
				if(!isNaN(PCArray[i])){
					bPCOK = false
				}
			}
		}
	} else {
		bPCOK = false
	}
	
	if(!bPCOK){
		alert(strErrorMsg019)
		object.focus()
	}
	return bPCOK
}

// alert & focus
// void voor fucntion weg gehaald, alert werkte anders niet in chrome
function showAlert(item, message) {
   var strAlert = strErrorLn + message + strErrorLn;
   alert(strAlert);

   // IE "Design" flaw.
   // IE does javascript first then continues with
   // his own processing. A .focus() will then be undone
   // again. (item.focus will work fine on netscape
   // but also this 0 timeout works there so we use that.

   // This 0 timeout will ensure that IE finishes all his
   // own processing before calling the timeout.
   setTimeout("MyFocus('" + item.name + "')", 0);
}

function validatePassword(item) {
var bOK = true;
	if(item.value.length<6) bOK = false;
	if(bOK && !item.value.match(/[0-9]/)) bOK = false;
	if(bOK && !item.value.match(/[a-zA-Z]/)) bOK = false;
	if(!bOK) showAlert(item,strErrorMsg018);
	return bOK;
}

function validateTime(item) {
	if(item.value.length == 5){
		if(item.value.substring(2,3) == ':'){
			var hh = item.value.substring(0,2);
			var mm = item.value.substring(3,5);
			if(hh > -1 && hh < 24 && mm > -1 && mm <60){
				return 1;
			}
		}
	}
	showAlert(item,strErrorMsg021);
	return 0;
}

void function MyFocus(name) {
   if (document.forms.length == 1) {
     document.forms[0][name].focus();
     document.forms[0][name].select();
   } else {
     for(iFrm=0;iFrm<document.forms.length;iFrm++) {
       frm = document.forms[iFrm]
       for(iFld=0;iFld<frm.length;iFld++) {
         fld = frm[iFld]
         if (fld.name == name) {
           fld.focus();
		   fld.select();
		   return;
         }
       }
     }
   }
}

void function validFraction(item, min, max, fformat) {
   var i, iPos, bPadding, iLen, iExtraLen;
   var arrParts;
   var arrFormat;
   var sPadString;

   item.value=trim_string(item.value);

   // Replace all , with .
   item.value = item.value.replace(",", ".");

   arrParts = item.value.split(".");

   // validate that the field has only one decimal point
   if (arrParts.length > 2) {
      showAlert(item,strErrorMsg012);
      return false;
   }

   // Validate part before the dot (note it may be empty what is valid)
   if (arrParts[0] != '' && isNaN(arrParts[0])) { 
      showAlert(item,strErrorMsg002);
      return false;
   }

   if (arrParts.length == 2) {   
      // Validate part after the dot (note it may be empty what is valid)
      if (arrParts[1] != '' && isNaN(arrParts[1])) { 
         showAlert(item,strErrorMsg002);
         return false;
      }

	   // Part after the decimal better not be negative
   	if (arrParts[1].substring(0,1) == '-') { 
      	showAlert(item,strErrorMsg002);
	      return false;
   	}
   }
      
   if (fformat != null) {
      arrFormat = fformat.split('.');
      if (arrFormat[0] != '') {
      	// Part before the seperator: [-][P|Z]<max number of digits>
      	iPos = 0;
      	
      	// First char a - means the number may be negative
      	// so if not a - number must be positive
      	if (arrFormat[0].substring(iPos, iPos+1) == '-')
      		iPos++;
      	else {
      		if (arrParts[0].substring(0,1) == '-') {
      			showAlert(item, strErrorMsg014);
					return false;
      		}
      	}	 
      	
      	// Z (zero if empty)
      	if (arrFormat[0].substring(iPos, iPos+1) == 'Z') {
				iPos++;
      		if (arrParts[0] == '') {
      			arrParts[0] = '0';
      		}
      	}

         if (arrFormat[0].substring(iPos, iPos+1) == 'P') {
         	bPadding = true;
         	iPos++;
         }
         else 
         	bPadding = false;
         	
         // Last is the number of digits
         iLen = parseInt(arrFormat[0].substring(iPos, arrFormat[0].length));
         if (arrParts[0].substring(0,1) == '-') 
         	iExtraLen = 1;	// add one to allow room for the minus sign
         else
         	iExtraLen = 0;
         		
      	if (arrParts[0].length > (iLen+iExtraLen)) {
      		// too many numbers before the decimal
      		showAlert(item, strErrorMsg015A + iLen + strErrorMsg015B);
      		return false;
      	}
      	
      	// format before decimal is ok, now deal with the padding if
      	// required
      	if (bPadding) {
      		sPadString = '';
      		for (i=arrParts[0].length; i < (iLen+iExtraLen); i++) 
         		sPadString += '0';
         		
         	if (arrParts[0].substring(0,1) == '-') 
         	   arrParts[0] = '-' + sPadString + arrParts[0].substring(1,arrParts[0].length);
         	else
         		arrParts[0] = sPadString + arrParts[0];
      	}         	
	   }

	   if (arrFormat.length > 1 && arrFormat[1] != '') {
      	// Part after the seperator

      	iPos = 0;
         if (arrFormat[1].substring(0, 1) == 'P') {
         	bPadding = true;
         	iPos++;
         }
         else 
         	bPadding = false;

			if (arrParts.length != 2) {
				arrParts[1] = '';
			}

	      iLen = parseInt(arrFormat[1].substring(iPos, arrFormat[1].length));
         		
	   	if (arrParts[1].length > iLen) {
   			// too many numbers after the decimal
   			showAlert(item, strErrorMsg015A + iLen + strErrorMsg015C);
   			return false;
      	}
			      	
      	// format before decimal is ok, now deal with the padding if
	   	// required
   		if (bPadding) {
   			sPadString = '';
   			for (i=arrParts[1].length; i < iLen; i++) 
      			sPadString += '0';
         		
         	arrParts[1] += sPadString;
      	}         	
	   }
	   
	   // reconstruct the value
	   item.value = arrParts[0];
	   if (arrParts.length > 1 && arrParts[1] != '')
	      item.value += '.' + arrParts[1];
   }

   return true;
}


// trim
function trim_string(item) {
   var ichar, icount;
   var strValue = item;
   ichar = strValue.length - 1;
   icount = -1;
   while (strValue.charAt(ichar)==' ' && ichar > icount)
      --ichar;

   if (ichar != (strValue.length-1))
      strValue = strValue.substring(0, ichar + 1 );

   ichar = 0;
   icount = strValue.length - 1;
   while (strValue.charAt(ichar) == ' ' && ichar < icount)
      ++ichar;

   if (ichar != 0)
      strValue = strValue.substring(ichar,strValue.length);

   return strValue;
}

// non blank
function IsEmptyString(item) {
   return (item.value.length == 0);
}

// number
function validNumber(item,min,max,fformat) {
   var bNegAllowed;
   var i, iLen, iMax;
   var sMax;
   item.value=trim_string(item.value);
   if (isNaN(item.value)) { 
      showAlert(item,strErrorMsg002);
      return false;
   }

   // check min
   if (min!=null && !validNumberMin(item,min)) {
      return false;
   }

   // check max
   if (max!=null && !validNumberMax(item,max)) {
      return false;
   }

   // check format
   if (fformat=="B" && !validBankaccount(item)) {
      return false;
   }
   
   // bank account allowing postbank (nl only)
   if (fformat=="B+") {
	  if (isNaN((i = parseInt(item.value)))) {
         showAlert(item,strErrorMsg017B);
         return false;
	  } else {
		if (i >= 10000000) {
		   return validBankaccount(item)
		} else {
			return (_gCountry == "nl");
		}
	 }
   }


   if (fformat != null) {
   	if (fformat.substring(0,1) == '-') {
   	   bNegAllowed = true;
         iLen = parseInt(fformat.substring(1, fformat.length));
   	}
   	else {
         iLen = parseInt(fformat);
   	}   	
   	
   	if (!bNegAllowed && (parseInt(item.value) < 0)) { 
      	// Negative not allowed, but value is negative
         showAlert(item,strErrorMsg014);
         return false;
      }

      // determine max value
      sMax = '';
      for (i=0;i<iLen;i++) 
         sMax += '9';
      iMax = parseInt(sMax);

      if (parseInt(item.value) > iMax) {
         showAlert(item, strErrorMsg016 + sMax + '\n');
         return false;         
      }      
   }   

   return true;
}

// char
function validChar(item, min, max, fformat) {

   item.value=trim_string(item.value);
   // TODO Min/Max checking

   // check format
   if (fformat=="E" && !validEmail(item)) {
      return false;
   }
   if (fformat=="I" && !validIP(item)) {
      return false;
   }

   return true;
}

// date
// min and max values are in the format of "EEYYMMDD"
// format can be:
//   - "Y" for "EEYYMMDD"
//   - "M" for "MM/DD/EEYY" 
//   - "D" for "DD/MM/EEYY"
function validDate(item,min,max,fformat) {
   var varField = trim_string(item.value);
   var aParts = new Object();	// use object not array so this will be JavaScript 1.0 compatible
   var Day, Month, Year;
   var i, iPos;

   // initialize aParts object
   aParts[0] = "";
   aParts[1] = "";
   aParts[2] = "";

   if (!isNaN(varField)) {
      // Pure numeric value. This should be 8 long.
      if (varField.length != 8) {
         showAlert(item,strErrorMsg003A);
         return false;        
      }
      // split into seperate parts
      if (fformat == "Y") {
         // first 4 chars is year
         aParts[0] = varField.substring(0,4);
         aParts[1] = varField.substring(4,6);
         aParts[2] = varField.substring(6,8);         
      }
      else {
         // last 4 chars is year
         aParts[0] = varField.substring(0,2);
         aParts[1] = varField.substring(2,4);
         aParts[2] = varField.substring(4,8);         
      }
   }
   else {
      // There are seperators
      iPos = 0;
      i=0;
      while (iPos < varField.length) {
         if (isNaN(varField.substring(iPos,iPos+1))) {
            i++;
            if (i > 2) {
               // Too many seperators used.
               showAlert(item,strErrorMsg003A);
               return false;        
            }
         }
         else {
	    // ignore leading zero's
            if (aParts[i] != "" || varField.substring(iPos,iPos+1) != "0")
               aParts[i] += varField.substring(iPos,iPos+1);
         }

         iPos++;
      }

      if (i != 2) {
         // Too few seperators used.
         showAlert(item,strErrorMsg003A);
         return false;        
      }

      if (aParts[0] == "" || aParts[1] == "" || aParts[2] == "") {
         // Misformatted.
         showAlert(item,strErrorMsg003A);
         return false;        
      }
   }

   switch(fformat) {
      case "Y" :   // EEYYMMDD
         iDay = parseInt(aParts[2]);
         iMonth = parseInt(aParts[1]);
         iYear = parseInt(aParts[0]);
         break;
      case "M" :   // MM-DD-EEYY
         iDay = parseInt(aParts[1]);
         iMonth = parseInt(aParts[0]);
         iYear = parseInt(aParts[2]);
         break;
      default:  // DD-MM-EEYY
         iDay = parseInt(aParts[0]);
         iMonth = parseInt(aParts[1]);
         iYear = parseInt(aParts[2]);
   }

   // add century if not specified
   if (iYear < 100) {
      iYear += 2000;
   }
   if (iYear < 1000) {
      iYear += 1000;
   }

   //  MaxDag voor februari bepalen
   var varMaxDag = 31;
   if (iMonth == 4 || iMonth == 6 || iMonth == 9 || iMonth == 11) {
      varMaxDag = 30;
   } 
   else {
      if (iMonth == 2) {
         if (iYear % 4 == 0 && (iYear % 100 != 0 || iYear % 400 == 0)) {
            varMaxDag = 29;
         } 
         else {
            varMaxDag = 28;
         }
      }
   }

   // Is het een geldige datum 
   if (iMonth > 0 && iMonth <= 12 && 
         iDay > 0 && iDay <= varMaxDag ) {

      // Reformat field (add seperators, century etc)
      if (fformat == "Y") {
         item.value = "" + iYear + aParts[1] + aParts[2];
      }
      else {	
         if (aParts[0].length == 1)
            aParts[0] = "0" + aParts[0];
         if (aParts[1].length == 1)
            aParts[1] = "0" + aParts[1];
         item.value = "" + aParts[0] + "-" + aParts[1] + "-" + iYear;
      }

      // Date itself is valid formatted, now compare it to the min and max values
      if (min != null && max != null && min != '' && max != '') {
         // Both min and max values set
         if (("" + iYear + aParts[1] + aParts[0] < min) || ("" + iYear + aParts[1] + aParts[0] > max)) {
            showAlert(item,strErrorMsg003B + min.substring(6,8) + '-' + min.substring(4,6) + '-' + min.substring(0,4) 
                      + ' en ' + max.substring(6,8) + '-' + max.substring(4,6) + '-' + max.substring(0,4) + '\n');
            return false;
         }
      }
      else {
         if (min != null && min != '') {
             // Only min value set
            if ("" + iYear + aParts[1] + aParts[0] < min) {
               showAlert(item,strErrorMsg003C + min.substring(6,8) + '-' + min.substring(4,6) + '-' + min.substring(0,4) + '\n'); 
               return false;
            }
         }
         else {
            if (max != null && max != '') {
               // Only max value set
               if ("" + iYear + aParts[1] + aParts[0] > max) {
                  showAlert(item,strErrorMsg003D + max.substring(6,8) + '-' + max.substring(4,6) + '-' + max.substring(0,4) + '\n');
                  return false;
               }
            }
         }
      }
      
      // All is valid !   
      return true;
   }

   showAlert(item,strErrorMsg003A);
   return false;
}

// min
function validNumberMin(item, min) {
   if (item.value < min) {
      showAlert(item,strErrorMsg005 + " " + min +"...\n")
      return false;
   }
   return true;
}

// max
function validNumberMax(item, max) {
   if (item.value > max) {
      showAlert(item,strErrorMsg006 + " " + max +"...\n")
      return false;
   }
   return true;
}

// Email format
function validEmail(item) {
   var iAtPos;
   var iDotPos;
   var iDotPos2;

   // email requirements:
   // exactly 1 at sign ('@') and not as first char
   // at least 1 dot (.) after the @
   // dot is not first char after the @
   // dot is not last char 
   // no 2 dots in a row

   iAtPos = item.value.indexOf("@",1);
   if (iAtPos != -1) {
      // check if we have a second @
      if (item.value.indexOf("@", iAtPos+1) != -1) {
         showAlert(item, strErrorMsg007);
         return false;
      }

      // find last dot after the @
      iDotPos = iAtPos;
      while ((iDotPos2 = item.value.indexOf(".", iDotPos+1)) != -1) {
         if (iDotPos2-iDotPos == 1) {
            // 2 dots in a row
            showAlert(item, strErrorMsg007);
            return false;
         }
         iDotPos = iDotPos2;
      }

      if (iDotPos < (iAtPos+2)) {
         showAlert(item, strErrorMsg007);
         return false;
      }

      if (iDotPos == item.value.length-1) {
         showAlert(item, strErrorMsg007);
         return false;
      }
   }
   else {
      showAlert(item, strErrorMsg007);
      return false;
   }

   return true;
}

// bank account format
function validBankaccount(item) {
var intOptelling
var intTeller
var intOptelling
var intLen

    intLen = item.value.length;
    if (_gCountry == "nl") {
		if (intLen < 9 || intLen > 10) {
		  showAlert(item, strErrorMsg017A);
		  return false;
		}
		// Validatie van RekeningNummer (Loop): Optellen van elke cijfer * positie
		intOptelling = 0;
		for(intTeller = 0; intTeller < intLen; intTeller++) {
		  intCijfer = parseInt(item.value.substr((intLen - intTeller) - 1, 1));
		  intOptelling = intOptelling + (intCijfer * (intTeller + 1));
		}
		// Validatie van RekenningNummer (elfproef): Rest van deling door elf moet nul zijn.
		if ((intOptelling % 11) != 0) {
		  showAlert(item, strErrorMsg017B);
		  return false;
		}
		return true;
	} else if (_gCountry == "be") {
		if (intLen != 12) showAlert(item, strErrorMsg017B);
		return (intLen == 12); // check more later when we find out how.
	}
	return true;
}

// IP address
function validIP(item) {
var aP, i, j
	aP = item.value.split('.');
	if(aP.length!=4) {
      showAlert(item, strErrorMsg020);
	  return false;
	}
	for(i=0;i<aP.length;i++){
		j = parseInt(aP[i]);
		if(isNaN(j) || j < 0 || j > 255) {
			showAlert(item, strErrorMsg020);
			return false;
		}
	}
	return true;
}

function ClearForm() {
	var i;
	for (i=0; i<document.forms[0].length; i++)
	{
		switch (document.forms[0][i].type)
		{
		case 'button':
		case 'checkbox':
			document.forms[0][i].checked = false;
			break;
		case 'file':
		case 'hidden':
		case 'none':
		case 'password':
			document.forms[0][i].value = '';
			break;
		case 'radio':
			if (document.forms[0][i].defaultChecked == true)
			{
				document.forms[0][i].checked = true;
			}
			else
			{
				document.forms[0][i].checked = false;
			}
			break;
		case 'reset':
		case 'select-one':
			document.forms[0][i].options[0].selected = true;
			break;
		case 'select-multiple':
			var j;
			for (j=0; j<document.forms[0][i].length; j++)
			{
				document.forms[0][i].options[j].selected = false;
			}
			break;
		case 'submit':
		case 'text':
			document.forms[0][i].value = '';
			break;
		case 'textarea':
			document.forms[0][i].value = '';
			break;
		}
	}
}

// Filter niet numerieke karakters van de value van meegegeven object
function stringFilter (inpObj) {
	var s = inpObj.value;
	var filteredValues = " -";     // Characters stripped out
	var i;
	var returnString = "";
	for (i = 0; i < s.length; i++) {  // Search through string and append to unfiltered values to returnString.
		var c = s.charAt(i);
		if (filteredValues.indexOf(c) == -1) returnString += c;
	}
	inpObj.value = returnString;
	//alert(returnString);
}

// Format "T"
function validateTel(item, iVtype){
	if(!valTel(item.value,iVtype)){
		showAlert(item,strErrorMsg022);
		return false;
	} else {
		return true;
	}
}
// Format "T+"
// Validate en format telefoonnummers
// vtype = 0 maakt niet uit, 1 alleen vast nummer, 2 alleen mobielnummer
function valiEditTel(item,iVtype){
	var iResult = valTel(item.value,iVtype);
	
	if(!iResult){
		showAlert(item,strErrorMsg022);
		return false;
	} else {
		item.value = iResult;
		return true;
	}
}
// Return is een tot 31-nummer aangepast telefoonnummer indien ok, anders false
// _gMobPrefix = "6";
// _gCountryCode = "31";
// _gTelnrPrefix = "0";
// _gCountry = "nl";
// _gLanguage = "nl";
// _gTelnrMinLen = 11;
// _gTelnrMaxLen = 11;
function valTel(strTelnumber, iVtype) {
var iFtype; // found type, 1 = vast, 2 = mobiel, -1 = Onbekend
var s,ret;
ret = true;
	s = strTelnumber.replace(/[^0-9]/, "");
	// cut leading prefix off if remaining number can be long enough
	if (_gTelnrPrefix.length > 0 && s.substr(0, _gTelnrPrefix.length) == _gTelnrPrefix && s.length - _gTelnrPrefix.length + _gCountryCode.length + _gMobPrefix.length >= _gTelnrMinLen)
			s = _gCountryCode + s.substr(_gTelnrPrefix.length);
	if (s.length >= _gTelnrMinLen)
		// See if we can prefix current mobile number prefix and/or country code
		strTelnumber = s; // OK, assume full number
	else if ((s.length + _gCountryCode.length) >= _gTelnrMinLen && (s.length + _gCountryCode.length) <= _gTelnrMaxLen)
		strTelnumber = _gCountryCode + s; // assume we can prefix country code OK
	else if ((s.length + _gCountryCode.length + _gMobPrefix.length) >= _gTelnrMinLen && (s.length + _gCountryCode.length + _gMobPrefix.length) <= _gTelnrMaxLen)
		strTelnumber = _gCountryCode + _gMobPrefix + s; // nr without mob prefix

	// what type did we find?
	if(_gMobPrefix.length == 0) {
		// always OK
		if (strTelnumber.substr(0, _gCountryCode.length) == _gCountryCode && (strTelnumber.length < _gTelnrMinLen || strTelnumber.length > _gTelnrMaxLen))
			return false; 
		else
			return strTelnumber;
	} else {
		if (strTelnumber.substr(0, _gCountryCode.length) == _gCountryCode && (strTelnumber.length < _gTelnrMinLen || strTelnumber.length > _gTelnrMaxLen)) {
			return false; 
		}
		if((_gCountryCode+_gMobPrefix) == strTelnumber.substr(0,_gCountryCode.length+_gMobPrefix.length)) iFtype = 2; // mobile
		else iFtype = 1; // fixed or other
		if (iFtype == iVtype || iVtype == 0 || (iFtype == 2 && iVtype == 3) || (iFtype == 1 && iVtype == 4)) return strTelnumber;
		else if(iVtype == 3 && iFtype == 1) {
			if(confirm('Dit is geen (locaal) mobiel nummer, toch doorgaan?')) return strTelnumber
			else return false;
		} else if(iVtype == 4 && iFtype == 2) {
			if(confirm('Dit is geen (locaal) vast nummer, toch doorgaan?')) return strTelnumber
			else return false;
		} else {
			return false;
		}
	}
}
function checkLicensePlate(strLicense) {
	if(typeof(_gLicensePlateFormat)!="undefined"){
		if(_gLicensePlateFormat.length != 0) {
			var re = new RegExp(_gLicensePlateFormat);
			re.ignoreCase = true
			var m = re.exec(strLicense);
			if(m == null){
				return false;
			} else {
				return true;
			}
		} 
	}
	return true;
}
function valLicensePlate(strLicense) {
	if(typeof(_gLicensePlateFormat)!="undefined"){
		if(_gLicensePlateFormat.length != 0) {
			var re = new RegExp(_gLicensePlateFormat);
			re.ignoreCase = true
			var m = re.exec(strLicense);
			if(m == null){
				return confirm(strLicense+' '+strErrorMsg025+' '+_gLicensePlateFormatDesc);
			} else {
				return true;
			}
		} 
	}
	return true;
}

