/* Validatie of een geldig datum is ingevuld i.c.m. mask dd-mm-jjjj */

function is_date(obj) {
   var parsedDate = obj.value.split ("-");
   if (parsedDate.length != 3) return false;
   
   var day, month, year;
   day = parsedDate[0];
   month = parsedDate[1]-1;
   year = parsedDate[2];
   var objDate = new Date (year, month, day);

   if (month != objDate.getMonth()) return false;
   if (day != objDate.getDate()) return false;
   if (year != objDate.getFullYear()) return false;
   return true;
} 

/* Validatie of een optie in een radiogroup is geselecteerd */

function is_selected(obj) {
	for (i = 0;  i < obj.length;  i++) {
		if (obj[i].checked) {
			return true;
		}
	}
		return false;	
}

/* Controleerd of een specifieke waarde is geselecteerd */

function selected_value(obj,value)
{
	for (i = 0;  i < obj.length;  i++)
	{
		if (obj[i].checked)
		{
			if (obj[i].value == value)
			{
				return true;
			}

		}
	}
	return false;
}

/* Validatie of een geldig emailaders is ingevuld */

function is_email(obj) {

	var at = "@"
	var dot = "."
	var lat = obj.value.indexOf(at)
	var lstr = obj.value.length
	var ldot = obj.value.indexOf(dot)
	
	if (obj.value.indexOf(at)==-1) {
		return false
	}

	if (obj.value.indexOf(at)==-1 || obj.value.indexOf(at)==0 || obj.value.indexOf(at)==lstr) {
	   return false
	}

	if (obj.value.indexOf(dot)==-1 || obj.value.indexOf(dot)==0 || obj.value.indexOf(dot)==lstr) {
	    return false
	}

	if (obj.value.indexOf(at,(lat+1))!=-1) {
		return false
	}

	if (obj.value.substring(lat-1,lat)==dot || obj.value.substring(lat+1,lat+2)==dot){
	    return false
	 }

	 if (obj.value.indexOf(dot,(lat+2))==-1){
	    return false
	 }
		
	 if (obj.value.indexOf(" ")!=-1){
	    return false
	 }

	 return true					

}

/* Controle of een veld gevuld is */

function is_filled(obj) {

	if (obj.value == "") {
		return false;
	}
	else {
		return true;
	}

}

/* Controle of een vink vakje is aangevinkt */

function is_checked(obj) {
	if (obj.checked == true) {
		return true;
	}
	else {
		return false;
	}
}

/* Controle of een veld een numerieke waarde bevat */

function is_numeric(obj) {
	var ValidChars = "0123456789";
	var IsNumber=true;
	var Char;

	for (i = 0; i < obj.value.length && IsNumber == true; i++) {
		Char = obj.value.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	
	return IsNumber;
}

/* Postcode validatie functie die werkt i.c.m. het masker "9999 AA" */

function is_postcode(obj) {
		var PN;
		var PT;
		PN = obj.value.substring(0,4);
		PT = obj.value.substring(5,7);
		if (!(PN >= 1000 && PN <= 9999)){
			return false;
		}
		if (!((PT.substring(0,1) >= 'A' && PT.substring(0,1) <= 'Z') && (PT.substring(1,2) >= 'A' && PT.substring(1,2) <= 'Z'))){
			return false;
		}
	
	return true;
	}

/* Elfproef functie voor bankrekeningnummers */
	
function is_validbankaccount(obj)
{
	var rekeningnummer;
	rekeningnummer = obj.value;
	
	if (rekeningnummer.length != 9)
	{
		return false;
	}
	
	var teller = 0;
	var totaal = 0;
	for (var i = 9;i > 0;i--)
	{
		totaal += rekeningnummer.substring(teller,teller+1) * i;
		teller++;
	}
	
	if (totaal%11 == 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}
	
/* Mask functies */

function mask(str,textbox,loc,delim){
var locs = loc.split(',');
for (var i = 0; i <= locs.length; i++){
	for (var k = 0; k <= str.length; k++){
	 if (k == locs[i]){
	  if (str.substring(k, k+1) != delim){
	   if (event.keyCode != 8){ //backspace
	    str = str.substring(0,k) + delim + str.substring(k,str.length);
       }
	  }
	 }
	}
 }
textbox.value = str
}


function changeCase(frmObj) {
var index;
var tmpStr;
var tmpChar;
var preString;
var postString;
var strlen;
tmpStr = frmObj.value.toLowerCase();
strLen = tmpStr.length;
if (strLen > 0)  {
for (index = 0; index < strLen; index++)  {
if (index == 0)  {
tmpChar = tmpStr.substring(0,1).toUpperCase();
postString = tmpStr.substring(1,strLen);
tmpStr = tmpChar + postString;
}
else {
tmpChar = tmpStr.substring(index, index+1);
if (tmpChar == " " && index < (strLen-1))  {
tmpChar = tmpStr.substring(index+1, index+2).toUpperCase();
preString = tmpStr.substring(0, index+1);
postString = tmpStr.substring(index+2,strLen);
tmpStr = preString + tmpChar + postString;
         }
      }
   }
}
frmObj.value = tmpStr;
}

var keybNumeric = new keybEdit('01234567890','In dit veld zijn alleen cijfers mogelijk.');
var keybNumericNM = new keybEdit('01234567890');

function keybEdit(strValid, strMsg) {
	var reWork = new RegExp('[a-z]','gi');		//	Regular expression\

	//	Properties
	if(reWork.test(strValid))
		this.valid = strValid.toLowerCase() + strValid.toUpperCase();
	else
		this.valid = strValid;

	if((strMsg == null) || (typeof(strMsg) == 'undefined'))
		this.message = '';
	else
		this.message = strMsg;

	//	Methods
	this.getValid = keybEditGetValid;
	this.getMessage = keybEditGetMessage;
	
	function keybEditGetValid() {
		return this.valid.toString();
	}
	
	function keybEditGetMessage() {
		return this.message;
	}
}




void function editKeyBoard(objForm, objKeyb) {
	strWork = objKeyb.getValid();
	strMsg = '';							// Error message
	blnValidChar = false;					// Valid character flag

	// Part 1: Validate input
	if(!blnValidChar)
		for(i=0;i < strWork.length;i++)
			if(window.event.keyCode == strWork.charCodeAt(i)) {
				blnValidChar = true;

				break;
			}

	// Part 2: Build error message
	if(!blnValidChar) {
		if(objKeyb.getMessage().toString().length != 0)
			alert('Fout: ' + objKeyb.getMessage());

		window.event.returnValue = false;		// Clear invalid character
		objForm.focus();						// Set focus
	}
}

void function setEvents() {
	document.all.huisnummer.onkeypress = new Function('editKeyBoard(this,keybNumeric)');
}

var CTRL_PASTE = 22; 
var CTRL_COPY = 3; 
var CTRL_CUT = 24; 
var TAB_KEY = 9; 
var DELETE_KEY = 46; 
var BACKSPACE_KEY = 8; 
var ENTER_KEY = 13; 
var RIGHT_ARROW_KEY = 39; 
var DOWN_ARROW_KEY = 40; 
var UP_ARROW_KEY = 38; 
var LEFT_ARROW_KEY = 37; 
var HOME_KEY = 36; 
var END_KEY = 35; 
var PAGEUP_KEY = 33; 
var PAGEDOWN_KEY = 34; 
var CAPS_LOCK_KEY = 20; 
var ESCAPE_KEY = 27; 
function tbMask(textBox) { 
var keyCode = event.keyCode; 
var keyCharacter = cleanKeyCode(keyCode); 
var retVal = false; 
var mask = textBox.mask; 
switch(keyCode) 
{ 
case BACKSPACE_KEY: 
var c = getCursorPos(textBox); 
if(c > 0) { 
var currentMaskChar; 
// get next available char to delete except mask chars 
while(c > 0) { 
c--; 
currentMaskChar = mask.charAt(c); 
if(currentMaskChar == '9' || currentMaskChar == 'X' || currentMaskChar == 'A') { 
// found a spot.....replace that char with '_' 
var x = textBox.value.substring(0,c); 
var y = textBox.value.substring(c+1,textBox.value.length); 
textBox.value = x + '_' + y; 
setCursorPos(textBox,c); 
textBox.curPos = c; 
break; 
} 
} 
} 
break; 
case TAB_KEY: // keep track of cursor b4 tabbing out of field 
var c = getCursorPos(textBox); 
textBox.curPos = c; 
retVal = true; 
break; 
case HOME_KEY: // just move/keep track of cursor 
setCursorPos(textBox,0); 
textBox.curPos = c; 
break; 
case END_KEY: // just move/keep track of cursor 
setCursorPos(textBox,textBox.value.length); 
textBox.curPos = textBox.value.length; 
break; 
case ENTER_KEY: 
retVal = true; 
break; 
case DELETE_KEY: 
var c = getCursorPos(textBox); 
if(c > -1) { 
var currentMaskChar = mask.charAt(c); 
// only allow delete if it's a valid char 
if(currentMaskChar == '9' || currentMaskChar == 'X' || currentMaskChar == 'A') { 
var x = textBox.value.substring(0,c); 
var y = textBox.value.substring(c+1,textBox.value.length); 
textBox.value = x + '_' + y; 
setCursorPos(textBox,c); 
textBox.curPos = c; 
} 
} 
break; 
case LEFT_ARROW_KEY: // just move/keep track of cursor 
var c = getCursorPos(textBox); 
if(c > 0) { 
setCursorPos(textBox,c-1); 
textBox.curPos = c-1; 
} 
break; 
case RIGHT_ARROW_KEY: // just move/keep track of cursor 
var c = getCursorPos(textBox); 
if(c < textBox.value.length) { 
setCursorPos(textBox,c+1); 
textBox.curPos = c+1; 
} 
break; 
default: // adding a new char somewhere in the field 
var c = getCursorPos(textBox); 
var currentMaskChar; 
// get next available to change.....except masking chars 
while(c < textBox.value.length) { 
currentMaskChar = mask.charAt(c); 
if(currentMaskChar == '9' || currentMaskChar == 'X' || currentMaskChar == 'A') break; 
c++; 
} 
switch(currentMaskChar) 
{ 
case '9': // numeric only 
if('0123456789'.indexOf(keyCharacter) != -1) 
addNewKey(textBox,keyCharacter,c); 
break; 
case 'A': // alpha only 
if('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(keyCharacter) != -1) 
addNewKey(textBox,keyCharacter,c); 
break; 
case 'X': // alphanumeric 
if('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.indexOf(keyCharacter) != -1) 
addNewKey(textBox,keyCharacter,c); 
break; 
default: 
break; 
} 
} 

return retVal; 
} 
function addNewKey(tb,key,pos) { 
// add the new key to the textbox at pos 
var startSel = tb.value.substring(0,pos); 
var endSel = tb.value.substring(pos+1,tb.value.length); 
tb.value = startSel + key + endSel; 

// advance cursor to next '_' 
while(pos < tb.value.length) { 
curChar = tb.value.charAt(pos); 
if(curChar == '_') break; 
pos++; 
} 
setCursorPos(tb,pos); 
tb.curPos = pos; 
} 
function tbPaste(textBox) { 

// grab the textBox value and the mask 
var pastedVal = window.clipboardData.getData("Text"); 
var mask = textBox.mask; 
var newVal = ''; 
var curPastedVal = 0; 

for(var i=0;i<mask.length;i++) 
{ 
var currentMaskChar = mask.charAt(i); 
// if current mask pos allows entry 
if(currentMaskChar == '9' || currentMaskChar == 'X' || currentMaskChar == 'A') 
{ 
var currentPastedChar = pastedVal.charAt(curPastedVal); 
// check each current mask char against new keystroke 
// return false if any are out of sync 
if(currentMaskChar == '9') { 
if('0123456789'.indexOf(currentPastedChar) == -1) 
return false; 
} else if(currentMaskChar == 'A') { 
if('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(currentPastedChar) == -1) 
return false; 
} else if(currentMaskChar == 'X') { 
if('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.indexOf(currentPastedChar) == -1) 
return false; 
} else { 
return false; 
} 

// add new key 
newVal += currentPastedChar; 
curPastedVal++; 
} 
else { 
// add mask literal 
newVal += currentMaskChar; 
} 
} 
textBox.value = newVal; 
return false; 
} 
// -------------------------------------------------------------------- 
// puts masked thingie in tb ie: '(___) ___-____' 
// -------------------------------------------------------------------- 
function tbFocus(textBox) { 
var val = textBox.value; 
var mask = textBox.mask; 
var startVal = ''; 
if(textBox.curPos == 'undefined' || textBox.curPos == null) 
textBox.curPos = -1; 
if(val.length == 0 || val == null) { 
for(var i = 0; i < mask.length; i++) { 
var c = mask.charAt(i); 
if(c == '9' || c == 'X' || c == 'A') { 
startVal += '_'; 
if(textBox.curPos == -1) textBox.curPos = i; 
} 
else { 
startVal += c; 
} 
} 
textBox.value = startVal; 
} 

// otherwise just set proper cursor pos 
if(textBox.curPos == -1) { 
textBox.curPos = textBox.value.length; 
} 
setCursorPos(textBox,textBox.curPos); 
// set just in case. 
textBox.maxlength = mask.length; 
return true; 
} 
// -------------------------------------------------------------------- 
// The Numeric KeyPad returns keyCodes that ain't all that workable. 
// 
// ie: KeyPad '1' returns keyCode 97 which String.fromCharCode converts to an 'a'. 
// 
// This way allows the Numeric KeyPad to be used 
// -------------------------------------------------------------------- 
function cleanKeyCode(key) 
{ 
switch(key) 
{ 
case 96: return "0"; break; 
case 97: return "1"; break; 
case 98: return "2"; break; 
case 99: return "3"; break; 
case 100: return "4"; break; 
case 101: return "5"; break; 
case 102: return "6"; break; 
case 103: return "7"; break; 
case 104: return "8"; break; 
case 105: return "9"; break; 
default: return String.fromCharCode(key); break; 
} 
} 
// -------------------------------------------------------------------- 
// Google gems 
// -------------------------------------------------------------------- 
function getCursorPos(el){ 
var sel, rng, r2, i=-1; 

if(document.selection && el.createTextRange) { 
sel=document.selection; 
if(sel){ 
r2=sel.createRange(); 
rng=el.createTextRange(); 
rng.setEndPoint("EndToStart", r2); 
i=rng.text.length; 
} 
} 
return i; 
} 
function setCursorPos(field,pos) { 
if (field.createTextRange) { 
var r = field.createTextRange(); 
r.moveStart('character', pos); 
r.collapse(); 
r.select(); 
} 
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}
