var formattedFields = new Array(); //contains fieldnames which are already autocorrected
var formattedValues = new Array(); //contains values of fields which are already autocorrected

// ==============================================================================
//    function CheckGen(o)
// ==============================================================================
//    {
//      var s = new String(o.value);
//      var r = new String();
//      if(0 != s.length) {
//        var i=0;
//
//        // check for invalid characters
//        while(i<s.length)
//          {
//              if("0123456789abcdefghijklmnopqrstuvwxyzäáàöóòüúùïíìëéèîôûêÿýÄÁÀÖÓÒÜÚÙÏÍÌËÉÈÎÔÛÊŸÝãõÃÕABCDEFGHIJKLMNOPQRSTUVWXYZ .,;_+-=!@#&*()".indexOf(s.charAt(i)) >= 0) {
//                r = r + s.charAt(i);
//          }
//          i++;
//
//        }
//        // override old value
//        o.value = r;
//	formattedValues[formattedFields.length-1] = r;
//      }
//    }

// ==============================================================================
    function CheckSofi(o)
// ==============================================================================
    {
      //CheckGen(o);

	  var s = new String(o.value);
      if(0 != s.length)
      {
        var i=0;

        // check for invalid characters
        while(i<s.length)
        {
          if( (s.charAt(i) < '0' || s.charAt(i) > '9') ) {
		  	s = s.substr(0,i) + s.substr(i+1);
          }
          else
          {
            i++;
          }
        }

        // override old value
        o.value = s;
	formattedValues[formattedFields.length-1] = s;
      }
	}

// ==============================================================================
    function CheckRekening(o)
// ==============================================================================
    {
      //CheckGen(o);
      
      var s = (new String(o.value)).toUpperCase();
      if(0 != s.length)
      {
        var i=0;

        // check for invalid characters
        while(i<s.length)
        {
          if( (s.charAt(i) < '0' || s.charAt(i) > '9')  && s.charAt(i) != 'P' ) {
		s = s.substr(0,i) + s.substr(i+1);
          }
          else
          {
            i++;
          }
        }
        

        // override old value
        o.value = s;
	formattedValues[formattedFields.length-1] = s;
      }
	 }

// ==============================================================================
    function CheckPostcode(o)
// ==============================================================================
    {
      //CheckGen(o);

      var s = (new String(o.value)).toUpperCase();
      if(0 != s.length)
      {
        var i=0;

        // check for invalid characters
        while(i<s.length)
        {
          if("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(s.charAt(i)) >= 0)
          {
            i++;
          }
          else
          {
            s = s.substr(0,i) + s.substr(i+1);
          }
        }

        if(s.length>6)
        {
          s = s.substr(0,6);
        }

        // override old value
        o.value = s;
	formattedValues[formattedFields.length-1] = s;
      }
    }
    
    function isAlfaNumeric(s,space) {
    	if (!space) {
		validRegExp = /^[a-zA-Z0-9]{0,}$/;
	}
	else {
		validRegExp = /^[a-zA-Z0-9\s]{0,}$/;
	}
    	return s.search(validRegExp);
    }

// ==============================================================================
    function CheckVoorl(o, nrChars)
// ==============================================================================
    {
    	if (nrChars=='')
    		nrChars = 5;
      	//CheckGen(o);
      	var s = new String(o.value);

      	// als er al een punt instaat, is de inhoud door de gebruiker zelf al 'geformateerd'
      	if (s.indexOf(".") != -1) {
      		/*if(0 != s.length) {
      			var i=0;
	
	        	while( i < s.length ) {
	        		if("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(s.charAt(i)) >= 0) {
	        			// hoofdletter bij 1e karakter en na een punt
	        			var q = i-1 < 0 ? 0 : i-1;
	        			if (q==0 || isAlfaNumeric(s.charAt(q), true)==-1) {
	        				var upperS = new String(s.charAt(i)).toUpperCase();
	        				s = s.substr(0,i) + upperS + s.substr(i+1);
	        				i+=1;
	        			}
	        			else {
	        				i+=1;
	        			}
	        		}
	        		else if(".".indexOf(s.charAt(i)) >= 0) {
	        			i+=1;
	        		}
	        		else {
	        			s = s.substr(0,i) + s.substr(i+1);
	        			break;
	        		}
	        	}
	        }*/
	}
	else {
      		s = s.toUpperCase();
      		
      		if(0 != s.length) {
      			var i=0;
	
	        	// check for invalid characters and add points
	        	while(i<s.length) {
	        		if("ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(s.charAt(i)) >= 0) {
	        			s = s.substr(0,i+1) + "." + s.substr(i+1);
	        			i+=2;
	        		}
	        		else {
	        			s = s.substr(0,i) + s.substr(i+1);
	        		}
	        	}
	        }
	}
	
	if(s.length > 2*nrChars) {
		s = s.substr(0, 2*nrChars);
	}
	if (s.lastIndexOf(".") != s.length-1 ) {
		s += ".";
	}
	
	// override old value
	o.value = s;
	formattedValues[formattedFields.length-1] = s;
      
    }

// ==============================================================================
    function CheckAchternaam(o)
// ==============================================================================
    {
	//CheckGen(o);

	var s = new String(o.value);
	if(0 != s.length) {
		s = (s.charAt(0)).toUpperCase() + s.substr(1);
		var i=1;

		while(i<(s.length-1))
		{
		          if(" ".indexOf(s.charAt(i)) >= 0 )
		          {
		          	s= s.substr(0,i+1) +  (s.charAt(i+1)).toUpperCase() + s.substr(i+2);
		          }
		          i++;

		}

	}

	// override old value
	o.value = s;
	formattedValues[formattedFields.length-1] = s;
    }

// ==============================================================================
    function CheckPhone(o)
// ==============================================================================
    {
     // CheckGen(o);

      var s = new String(o.value);
      if(0 != s.length)
      {
        var i=0;

        // check for invalid characters
        while(i<s.length)
        {
          if((s.charAt(i) < '0' || s.charAt(i) > '9')) {
						s = s.substr(0,i) + s.substr(i+1);
          }
          else
          {
            i++;
          }
        }
        // override old value
        o.value = s;
	formattedValues[formattedFields.length-1] = s;
      }
    }


// ==============================================================================
    function CheckNum(o)
// ==============================================================================
    {
     // CheckGen(o);

      var s = new String(o.value);
      if(0 != s.length)
      {
        var i=0;

        // check for invalid characters
        while(i<s.length) {
          if((s.charAt(i) < '0' || s.charAt(i) > '9') && (s.charAt(i) != ',') &&  (s.charAt(i) != '.')) {
						s = s.substr(0,i) + s.substr(i+1);
          }
          else {
            i++;
          }
        }

        //s = s.replace(/,/g, ".");

        // remove trailing comma's
        while((',' == s.charAt(s.length-1)) || ('.' == s.charAt(s.length-1))) s = s.substr(0,s.length-1);

	// remove leading zeroes
	while (s.length > 1 && s.charAt(0) == '0' && "0123456789".indexOf(s.charAt(1)) >= 0) s = s.substr(1, s.length-1);

	// remove leading comma's
        while((',' == s.charAt(0)) || ('.' == s.charAt(0))) s = s.substr(1);

        // override old value
        o.value = s;
        formattedValues[formattedFields.length-1] = o.value;
      }
    }

// ==============================================================================
    function CheckNumNeg(o)
// ==============================================================================
    {
      //CheckGen(o);

      var s = new String(o.value);
      if(0 != s.length)
      {
        var i=0;

        // check for invalid characters
        while(i<s.length) {
          if((s.charAt(i) < '0' || s.charAt(i) > '9') && (s.charAt(i) != ',') &&  (s.charAt(i) != '.') &&  (s.charAt(i) != '-')) {
            s = s.substr(0,i) + s.substr(i+1);
          }
          else {
            i++;
          }
        }

		//s = s.replace(/,/g, ".");

        // remove trailing comma's
        while((',' == s.charAt(s.length-1)) || ('.' == s.charAt(s.length-1))) s = s.substr(0,s.length-1);

		// remove leading zeroes
		while (s.length > 1 && s.charAt(0) == '0' && "0123456789".indexOf(s.charAt(1)) >= 0) s = s.substr(1, s.length-1);

		// remove leading comma's
        while((',' == s.charAt(0)) || ('.' == s.charAt(0))) s = s.substr(1);

		// remove excess minuses
		s = s.charAt(0) + s.substr(1).replace(/-/g, "");

        // override old value
        o.value = s;
		formattedValues[formattedFields.length-1] = o.value;
      }
    }
    
// ==============================================================================
    function CheckAndFormatNum(o, dec)
// ==============================================================================
    {
		//CheckGen(o);
		
		var s = new String(o.value);
		var bCorrect = true;
		if(0 != s.length) {
			var i=0;
			
			// check for invalid characters
			while(i<s.length) {
				if((s.charAt(i) < '0' || s.charAt(i) > '9') && (s.charAt(i) != ',') &&  (s.charAt(i) != '.') &&  (s.charAt(i) != '-')) {
					bCorrect = false;
					break;
				}
				 else{
					i++;
				}
			}
			if (bCorrect) {
			
				// remove trailing comma's
				while((',' == s.charAt(s.length-1)) || ('.' == s.charAt(s.length-1))) s = s.substr(0,s.length-1);
				
				// remove leading zeroes
				while (s.length > 1 && s.charAt(0) == '0' && "0123456789".indexOf(s.charAt(1)) >= 0) s = s.substr(1, s.length-1);
				
				// remove leading comma's
				while((',' == s.charAt(0)) || ('.' == s.charAt(0))) s = s.substr(1);
				
				// remove excess minuses
				s = s.charAt(0) + s.substr(1).replace(/-/g, "");
				
				// override old value
				o.value = formatNumber(s, new String(dec));
				formattedValues[formattedFields.length-1] = o.value;
			}
		}
	}    

// ==============================================================================
    function CheckDate(o)
// ==============================================================================
    {
      //CheckGen(o);

      var s = new String(o.value);
      if(0 != s.length)
      {
        var i=0;

        // check for invalid characters
        while(i<s.length)
        {
          if((s.charAt(i) < '0' || s.charAt(i) > '9') && (s.charAt(i) != '-'))
          {
            s = s.substr(0,i) + s.substr(i+1);
          }
          else
          {
            i++;
          }
        }
        if(4 == s.length)
        {
          s = "0" + s.charAt(0) + "-0" + s.charAt(1) + ((s.substr(2)>"30")?"-20":"-20") + s.substr(2);
        }
        else if(s.length > 4)
        {
          // check days
          if(new Number(s.substr(0,2)) > 31) s = "0" + s.substr(0);

          // check format (convert d-* to 0d-*)
          if("-" == s.charAt(1)) s = "0" + s;

          // check format (convert ddm* to dd-m*)
          if("-" != s.charAt(2)) s = s.substr(0,2) + "-" + s.substr(2);

          // check months
          if(new Number(s.substr(3,2)) > 12) s = s.substr(0,3) + "0" + s.substr(3);

          // check format (convert dd-m-* to dd-0m-*)
          if("-" == s.charAt(4)) s = s.substr(0,3) + "0" + s.substr(3);

          // check format (convert dd-mmy* to dd-mm-y*)
          if("-" != s.charAt(5)) s = s.substr(0,5) + "-" + s.substr(5);

          // check year
            if(s.length < 10) {
            	if(new Number(s.substr(6)) > 40 )
	        	s = s.substr(0,6) + "19" + s.substr(6);
	        else
	        	s = s.substr(0,6) + "20" + s.substr(6);
            }

          // check length
          if(s.length > 10) s = s.substr(0,10);
          	while(s.length<10) s = s + "0";
        }
        
        if (!isDate(s, "dd-MM-yyyy")) {
        	o.value = "";
		formattedValues[formattedFields.length-1] = "";
	}
	else {
		// override old value
		o.value = s;
		formattedValues[formattedFields.length-1] = s;
	}
      }
    }

    // ==============================================================================
    function CheckBirthDate(o)
// ==============================================================================
    {
      //CheckGen(o);

      var s = new String(o.value);
      if(0 != s.length)
      {
        var i=0;

        // check for invalid characters
        while(i<s.length)
        {
          if((s.charAt(i) < '0' || s.charAt(i) > '9') && (s.charAt(i) != '-'))
          {
            s = s.substr(0,i) + s.substr(i+1);
          }
          else
          {
            i++;
          }
        }
        if(4 == s.length)
        {
          s = "0" + s.charAt(0) + "-0" + s.charAt(1) + ((s.substr(2)>"30")?"-19":"-19") + s.substr(2);
        }
        else if(s.length > 4)
        {
          // check days
          if(new Number(s.substr(0,2)) > 31) s = "0" + s.substr(0);

          // check format (convert d-* to 0d-*)
          if("-" == s.charAt(1)) s = "0" + s;

          // check format (convert ddm* to dd-m*)
          if("-" != s.charAt(2)) s = s.substr(0,2) + "-" + s.substr(2);

          // check months
          //HIER WAS JE: met je 2611983
          //newline: if(new Number(s.substr(3,2)) > 12) || new Number(s.substr(4,2)) == 19)) s = s.substr(0,3) + "0" + s.substr(3);
          if(new Number(s.substr(3,2)) > 12) s = s.substr(0,3) + "0" + s.substr(3);

          // check format (convert dd-m-* to dd-0m-*)
          if("-" == s.charAt(4)) s = s.substr(0,3) + "0" + s.substr(3);

          // check format (convert dd-mmy* to dd-mm-y*)
          if("-" != s.charAt(5)) s = s.substr(0,5) + "-" + s.substr(5);

          // check year
         // if((s.charAt(6) != '1') && (s.charAt(6) != '2'))
          //{

           // if(s.length >= 10) s = s.substr(0,6) + "19" + s.substr(8);
           // else s = s.substr(0,6) + "19" + s.substr(6);

            if(s.length < 10) s = s.substr(0,6) + "19" + s.substr(6);

          //}

          // check length
          if(s.length > 10) s = s.substr(0,10);
          while(s.length<10) s = s + "0";
        }

        if (!isDate(s, "dd-MM-yyyy")) {
        	o.value = "";
		formattedValues[formattedFields.length-1] = "";
	}
	else {
		// override old value
		o.value = s;
		formattedValues[formattedFields.length-1] = s;
	}
      }
    }

  function StripNul(s)
    {
        while (s.length > 1 && s.charAt(0) == '0' && "0123456789".indexOf(s.charAt(1)) >= 0) {
		s = s.substr(1, s.length-1);
	};
	return s
    }

function setAge(value) {
	if(document.getElementById("leeftijd")) {
		var year = value.substr(6,4);
		var month =  value.substr(3,2);
		var day = value.substr(0,2);

		var age = calcAge(year, month, day, "years", 0, "rounddown");
		document.getElementById("leeftijd").value = age;
	}
}


function calcAge(yr, mon, day, unit, decimal, round){
	var one_day=1000*60*60*24;
	var one_month=1000*60*60*24*30;
	var one_year=1000*60*60*24*30*12;

	today=new Date();
	var pastdate=new Date(yr, mon-1, day);

	var countunit=unit;
	var decimals=decimal;
	var rounding=round;

	finalunit=(countunit=="days")? one_day : (countunit=="months")? one_month : one_year;
	decimals=(decimals<=0)? 1 : decimals*10;

	if (unit!="years"){
		if (rounding=="rounddown")
			return Math.floor((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals;
		else
			return Math.ceil((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals;
	}
	else{
		yearspast=today.getFullYear()-yr-1;

		tail=(today.getMonth()>mon-1 || ( today.getMonth()==mon-1 && today.getDate()>=day))? 1 : 0;
		// jsc: onderstaande berekening geeft een verkeerde uitkomst terug voor berekening leeftijd Personalia.geboortedatum
		// waarvoor dient dit? is dit een alternatief voor bovenstaande?
		//pastdate.setFullYear(today.getFullYear());
		//pastdate2=new Date(today.getFullYear()-1, mon-1, day);
		//tail=(tail==1)? tail+Math.floor((today.getTime()-pastdate.getTime())/(finalunit)*decimals)/decimals : Math.floor((today.getTime()-pastdate2.getTime())/(finalunit)*decimals)/decimals;
		return yearspast+tail;
	}
}

function getNumber( strValue ) {
	strValue = strValue.replace(/\./g, ''); //no thousand seperators
	strValue = strValue.replace(/\,/g, '.'); //decimal seperator is .
	return 1*strValue;
}
function formatNumber( strValue, nrDecs ) {
	strValue = getNumber( '' + strValue );
	return addSeparatorsNF( strValue, '.', ',', '.', nrDecs );
}
function addSeparatorsNF(nStr, inD, outD, sep, decNo)
{
	nStr += '';
	if (decNo == 0)
		nStr = '' + Math.round(1*nStr);
	var dpos = nStr.indexOf(inD);
	var nStrEnd = decNo > 0 ? outD + formatDecimals(nStr, decNo) : '';
	if (dpos != -1) {
		nStr = nStr.substring(0, dpos);
	}
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(nStr)) {
		nStr = nStr.replace(rgx, '$1' + sep + '$2');
	}
	nStr += nStrEnd;
	return nStr;
}

function roundDecimal( number, decNo ) {
	var numberStr = '' + number;
	if( numberStr.length > decNo ) {
		numberStr = '' + Math.round( 1*(numberStr.substring(0,decNo) + '.' + numberStr.substring(decNo,decNo.length)));
	}
	return numberStr;
}

function isAlreadyFormatted( field ) {
	for( var i=0; i < formattedFields.length; i++ ) {
		if( formattedFields[i] == field.name ) {
			if (formattedValues[i] == field.value) {
				return true;
			}
		}
	}
	formattedFields[formattedFields.length] = field.name;
	return false;
}

function formatDecimals(n,d){
	n = '' +  Math.abs(n); // negative numbers
	var xx = n.indexOf('.')
	var l = n.length
	var zstr = '0000000000000000000000'
	var theFrac = ''
	var theNo = ''
	rfac = ''
	rfacx = 0
	nx = 0
	var xt = parseInt(d) + 1
	var rstr = '' + zstr.substring(1,xt)
	var rfac = '.' + rstr + '5'
	var rfacx = parseFloat(rfac)
	if (xx == -1 ) 	{    // No fraction
		theFrac = zstr
	}
	else if (xx == 0) {
		nx = 0 + parseFloat(n) + parseFloat(rfacx)
		n = nx + zstr
		theFrac = '' + n.substring(1, n.length)
	}
	else {
		nx = parseFloat(n) + rfacx
		n = '' + nx + zstr
		theFrac = '' + n.substring(xx+1,xx + 1 + parseInt(d))
		var astr = 'd = ' + d
	}
	theFrac = theFrac.substring(0,parseInt(d))
	var ii = 0
	return theFrac
}


