// ===============
// Auto Focus Form
/*
function focusForm(){
	var formCount = document.forms.length;
	
	formCount = formCount - 1;
	if(formCount >= 0)
	{
		document.forms[formCount].elements[0].focus();
	}
}
*/
// ===============
// STEP NEXT
var fieldlength = 0; 

function stepNext(obj, maxLength)
{
	if (obj.value.length == maxLength && obj.value.length != fieldlength) {
		nextField = 0;
		nElements = obj.form.length;
		for (i=0; i<nElements; i++) {
			if (obj.form[i].name == obj.name) {
				var nextField = i;
				if (nextField <nElements) {
					nextField++
				}
				obj.form[nextField].focus(); 
			} 
		} 
	}
	fieldlength = obj.value.length;
}

// ===============
// NUMERIC
function isNumberKey(field,evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode
		if (charCode > 31 && (charCode < 48 || charCode > 57)) 
		{
			return false;        	
		}
	 
		if (charCode == 13) //-- on <enter>
		{
			var i;
			for (i = 0; i < field.form.elements.length; i++)
				if (field == field.form.elements[i])
					break;
			i = (i + 1) % field.form.elements.length;
			field.form.elements[i].focus();
			return false;
		}
	return true;
}

// ===============
// POSTCODE
function isPostcode(field,evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode
		if (charCode == 13 || charCode == 31 || (charCode > 47 && charCode < 58) || (charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) || (charCode == 8)) 
		{
			if (charCode == 13) //-- on <enter>
			{
				var i;
				for (i = 0; i < field.form.elements.length; i++)
					if (field == field.form.elements[i])
						break;
				i = (i + 1) % field.form.elements.length;
				field.form.elements[i].focus();
				return false;
			}
			return true;
		}
	 
	return false;
}

// ===============
// KENTEKEN

function isKenteken(evt)
{
	var charCode = (evt.which) ? evt.which : event.keyCode;
	
	if (charCode == 13 || charCode == 31 || (charCode > 47 && charCode < 58) || (charCode > 64 && charCode < 91) || (charCode > 96 && charCode < 123) || (charCode == 45) || (charCode == 8)) 
	{	//alert(charCode);
		return true;     	
	}
	//alert(charCode);
	return false;   
}

function trim(sString)
{
   while (sString.substring(0,1) == ' ')
   {
     sString = sString.substring(1, sString.length);
   }
   while (sString.substring(sString.length-1, sString.length) == ' ')
   {
      sString = sString.substring(0,sString.length-1);
   }
   return sString;
}


function AdjustKenteken(ptKenteken){
//Deze functie geeft indien mogelijk een geldige kentekencombinatie terug
//ook het 2006-formaat
   var fNieuwKenteken;
   var iAsciWaarde;
   var tResult="";
   var tKenteken=ptKenteken;
      
   tKenteken = trim(tKenteken);
   if (tKenteken!="") 
   {
      tKenteken=tKenteken.toString().toUpperCase();
      tKenteken=tKenteken.replace(/-/g, "");
      if (tKenteken.length>6)
      {
         tKenteken=tKenteken.substr(0,6);
      }
      //-----------------------------------------------------------------------------
      //Nu de streepjes eruit zijn en de lengte (indien te lang) is aangepast, moet
      //de invoer 6 karakters bevatten. Zoniet, dan gaan we er niets verder aan doen.
      //-----------------------------------------------------------------------------

      if (tKenteken.length==6)
      {
         fNieuwKenteken = true;
         for (var iTeller=2;iTeller <= 4;iTeller++)
         {
            var charcode = tKenteken.charCodeAt(iTeller);
            if (!((charcode>=65) && (charcode<=90)))
            {
               fNieuwKenteken = false;
               break; 
            }
         }
         if (fNieuwKenteken)
         {
            //-----------------------------------------------------------------------------------
            //Laatste teken nog controleren, want die is ook bepalend, zoals 09-GG-JJ of 09-GGG-1
            //-----------------------------------------------------------------------------------
            var charcode = tKenteken.charCodeAt(5);
            if (!((charcode >= 48) && (charcode <= 57))) fNieuwKenteken = false;
         }
         for (var iTeller=0;iTeller<6;iTeller++)
         {
            if (((charcode >= 48) && (charcode <= 57)) ||((charcode >= 65) && (charcode <= 90)))
            {
               tResult+=tKenteken.substr(iTeller,1);
               if ((iTeller==1) ||
                  ((iTeller==4) && fNieuwKenteken) ||
                  ((iTeller==3) && !fNieuwKenteken)
                  )
                  tResult+="-";
            }
            else
            {
			   return "";
            }
         }
      }
   }
   return tResult;
}

// ===============
// KENTEKEN MINTEKEN TOEVOEGEN
function KentekenStreep(obj,evt)
{
 var charCode = (evt.which) ? evt.which : event.keyCode;
 	if (charCode != 8) //-- <backspace>
	{
		if (obj.value.length == 2 || obj.value.length == 5) 
		{
			nextField = 0;
			nElements = obj.form.length;
			for (i=0; i<nElements; i++) 
			{
				if (obj.form[i].name == obj.name) 
				{
					nextField = i-1;
					if (nextField <nElements) 
					{
						nextField++
					}
					obj.form[nextField].value += '-'; 
				} 
			} 
		}
	}
}




/************************************************************************************************************
(C) www.dhtmlgoodies.com, February 2006

This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	

Terms of use:
You are free to use this script as long as the copyright message is kept intact. However, you may not
redistribute, sell or repost it without our permission.

Thank you!

www.dhtmlgoodies.com
Alf Magne Kalleland

************************************************************************************************************/	

/* Regular expression om tot een jaar te komen wat ligt tussen 1900-2007 (waarbij 2007 het huidige jaar is) */
	var currentTime = new Date();
	var year = currentTime.getFullYear();
	function Right(str, n){
		if (n <= 0)
		   return "";
		else if (n > String(str).length)
		   return str;
		else {
		   var iLen = String(str).length;
		   return String(str).substring(iLen, iLen - n);
		}
	}
	year = Right(year, 1);
	regexstring = '(^19[0-9]{2}$|^20[0-9][0-'+year+']{1}$)';
	yearExp = new RegExp(regexstring,"gi");

/* datum regex -- werkt niet*/
var datumExp;
regexstring = '/^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;';
datumExp = new RegExp(regexstring,"gi");

// Patterns
var formValidationMasks = new Array();
formValidationMasks['email'] 	= /\b[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\b/gi;// Email
formValidationMasks['numeric'] 	= /^[0-9]+$/gi;									// Numeric
formValidationMasks['banknr'] 	= /\d{9}|([P]\d{3,8})/gi;						// 123456789 || P123-P12345678
formValidationMasks['meldcode']	= /\d{4}/gi;									// 12345
formValidationMasks['postcode'] = /^[0-9]{4}[A-Z]{2}$/gi;						// 1234AB
formValidationMasks['day'] 		= /^(0?\d|[012]\d|[3][01])$/gi;					// Day (01-31)
formValidationMasks['month'] 	= /^(0?\d|[01][012])$/gi;						// Month (01-12)
formValidationMasks['year'] 	= yearExp;										// Year (zie functie hierboven)
formValidationMasks['date']		= datumExp;										// datum (22-12-1970) -- werkt niet

var formElementArray = new Array();

function addEvent( obj, type, fn ) { 
  if ( obj.attachEvent ) { 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );} 
    obj.attachEvent( 'on'+type, obj[type+fn] ); 
  } else 
    obj.addEventListener( type, fn, false ); 
} 
function removeEvent( obj, type, fn ) { 
  if ( obj.detachEvent ) { 
    obj.detachEvent( 'on'+type, obj[type+fn] ); 
    obj[type+fn] = null; 
  } else 
    obj.removeEventListener( type, fn, false ); 
} 

function validateInput(e,inputObj)
{
	if(!inputObj)inputObj = this;		
	var inputValidates = true;
	
	if(formElementArray[inputObj.name]['required'] && inputObj.tagName=='INPUT' && inputObj.value.length==0)inputValidates = false;
	if(formElementArray[inputObj.name]['required'] && inputObj.tagName=='SELECT' && inputObj.value.length==0){
		inputValidates = false;
	}
		if(formElementArray[inputObj.name]['mask'] && !inputObj.value.match(formValidationMasks[formElementArray[inputObj.name]['mask']]))inputValidates = false;
	
		if(formElementArray[inputObj.name]['freemask']){
			var tmpMask = formElementArray[inputObj.name]['freemask'];
			tmpMask = tmpMask.replace(/-/g,'\\-');
			tmpMask = tmpMask.replace(/S/g,'[A-Z]');
			tmpMask = tmpMask.replace(/N/g,'[0-9]');
			tmpMask = eval("/^" + tmpMask + "$/gi");
			if(!inputObj.value.match(tmpMask))inputValidates = false
		}	
		
		if(formElementArray[inputObj.name]['regexpPattern']){
			var tmpMask = eval(formElementArray[inputObj.name]['regexpPattern']);
			if(!inputObj.value.match(tmpMask))inputValidates = false
		}
	if(!formElementArray[inputObj.name]['required'] && inputObj.value.length==0 && inputObj.tagName=='INPUT')inputValidates = true;
	
	
	if(inputValidates){
		inputObj.parentNode.className='validInput';
	}else{
		inputObj.parentNode.className='invalidInput'
	}
}

function isFormValid()
{
	var wrong = false;
	var divs = document.getElementsByTagName('SPAN');
	for(var no=0;no<divs.length;no++)
	{
		if(divs[no].className=='invalidInput' || divs[no].className=='invalidInputRed')
		{
			wrong = true;
			divs[no].className = 'invalidInputRed';
		}
	}

	if (wrong) 
		{
			return false;
		} 
		else 
		{
			return true;
		}
}



function initFormValidation()
{
	//--
	
	var inputFields = document.getElementsByTagName('INPUT');
	var selectBoxes = document.getElementsByTagName('SELECT');

	var inputs = new Array();
	
	
	for(var no=0;no<inputFields.length;no++){
		inputs[inputs.length] = inputFields[no];
	}	

	for(var no=0;no<selectBoxes.length;no++){
		inputs[inputs.length] = selectBoxes[no];
	}
	
	for(var no=0;no<inputs.length;no++){
		// alert(inputs[no].type);
		var className = inputs[no].parentNode.className;
		var required = inputs[no].getAttribute('required');
		var inputEmpty = inputs[no].getAttribute('notrequired');
		if(!required){
			required = inputs[no].required;		
		}
		if(!required)
			{
				if(inputEmpty)
				{
					var div = document.createElement('SPAN');
					div.className = 'inputEmpty';
					inputs[no].parentNode.insertBefore(div,inputs[no]);
					div.appendChild(inputs[no]);
					div.style.width = inputs[no].offsetWidth + 'px';
				}
				continue;
			}
		
		if(className && className.indexOf('validInput')>=0)continue;			
		
			var mask = inputs[no].getAttribute('mask');
			if(!mask)mask = inputs[no].mask;
			
			var freemask = inputs[no].getAttribute('freemask');
			if(!freemask)freemask = inputs[no].freemask;
			
			var regexpPattern = inputs[no].getAttribute('regexpPattern');
			if(!regexpPattern)regexpPattern = inputs[no].regexpPattern;
		
		var div = document.createElement('SPAN');
		div.className = 'invalidInput';
		inputs[no].parentNode.insertBefore(div,inputs[no]);
		div.appendChild(inputs[no]);
		div.style.width = inputs[no].offsetWidth + 'px';
		
		addEvent(inputs[no],'blur',validateInput);
		addEvent(inputs[no],'change',validateInput);
		addEvent(inputs[no],'paste',validateInput);
		addEvent(inputs[no],'keyup',validateInput);
		
	
		formElementArray[inputs[no].name] = new Array();
		formElementArray[inputs[no].name]['mask'] = mask;
		formElementArray[inputs[no].name]['freemask'] = freemask;
		formElementArray[inputs[no].name]['required'] = required;
		formElementArray[inputs[no].name]['regexpPattern'] = regexpPattern;

		validateInput(false,inputs[no]);
			
	}	
}

window.onload = initFormValidation;

