function isNotEmpty(cObj){
	var valid = false;
	
	switch(cObj.type) {
		case 'text':
		case 'textarea':
			if (cObj.value.length > 0) valid = true;
		break;
		case 'select':
		case 'select-one':
		case 'select-multiple':
			if (cObj[cObj.selectedIndex].value.length > 0) valid = true;
		break;
		case 'radio':
			var elements = document.getElementsByName(cObj.name);
			
			for (i=0; i < elements.length; i++)
				if (!valid && elements[i].checked) valid = true;
		break;
	}
	return valid;
}

function isChecked(cObj){
	var valid = true;
	
	if (cObj.type == 'checkbox') {
		if (!cObj.checked) valid = false;
	}
	return valid;
}

function isValidPostalCode(cObj, postalcodeType){
	var valid = true;
	
	if (postalcodeType.length == 0) postalcodeType = 'nl';
	
	switch (postalcodeType) {
		case 'nl':
			if (!/^\d{4}\s?[A-Z]{2}$/i.test(cObj.value)) valid = false;
		break;
	}
	return valid;
}

function isValidDateOneField(cObj, format, separator){
	var valid = true;
	
	if (format == undefined) format = 'dmy';
	if (separator == undefined) separator = '-';
	
	var parts = cObj.value.split(separator);
	
	switch (format) {
		case "dmy" :
			var day = parts[0];
			var month = parts[1];
			var year = parts[2];
		break;
		case "ymd" :
			var day = parts[2];
			var month = parts[1];
			var year = parts[0];
		break;
		case "mdy" :
			var day = parts[1];
			var month = parts[0];
			var year = parts[2];
		break;
	}
	
	day = parseInt(day, 10);
	month = parseInt(month, 10) - 1; // setFullYear accepteerd waarden tussen 0 en 11
	year = parseInt(year, 10);
	
	objDate = new Date();
	objDate.setFullYear(year, month, day);
	
	if (objDate.getMonth() != month) valid = false;
	
	return valid;
}

function isValidDate(obj, type){
	if (type == "day"){
		return checkNumber(obj, 1, 31, true);
	} else if (type == "month"){
		return checkNumber(obj, 1, 12, true);
	} else if (type == "year"){
		return checkNumber(obj, 1800, 2100, false);
	}
}

function checkNumber(obj, min, max, zeroPrefixAllowed){
	var value = obj.value;
	var valid = false;
	var msg = '';
	
	if (zeroPrefixAllowed){
		var check = isIntZeroPrefixAllowed(value);
	} else {
		var check = isInt(value);
	}
	
	if (!check){
		msg = "Geen getal";
	} else if (parseInt(value, 10) < parseInt(min)){
		msg = "Te lage waarde";
	} else if (parseInt(value, 10) > parseInt(max)){
		msg = "Te hoge waarde";
	} else {
		valid = true;
	}
	return valid;
}

function isValidTelephoneNumberOld(obj, type){ 
	var value = obj.value;
	var valid = false;
	
	if (type == "national"){
		if (value.length == 10 && isIntZeroPrefixAllowed(value) && value.substr(0, 1) == "0") valid = true;
	} else if (type == "international"){
		if (value.length == 13 && isIntZeroPrefixAllowed(value) && value.substr(0, 2) == "00") valid = true;
	}
	
	return valid;
}
function isValidTelephoneNumber(obj){
	var value = obj.value;
	var valid = false;
	
	if (value.length >= 5 && value.length <= 11 && isIntZeroPrefixAllowed(value)) valid = true;
	
	return valid;
}

function isInt(x){
	var y = parseInt(x, 10);
	if (isNaN(y)) return false;
	return x == y && x.toString() == y.toString();
}

function isIntZeroPrefixAllowed(x){
	var y = parseInt(x, 10);
	return !isNaN(y);
}

function checkLength(obj, min, max){
	var value = obj.value;
	var valid = false;
	var msg = '';
	
	if (value.length > max){
		msg = "Te veel karakters";
	} else if (value.length < min){
		msg = "Te weinig karakters";
	} else {
		valid = true;
	}
	return valid;
}

function isValidBSN(cObj){
	sofiNr = cObj.value;
	var re = new RegExp('[^0-9]','g');
	sofiNr = sofiNr.replace(re,'');
	var totaal = 0;

	for (i=1; i < 9; i++){
		totaal += (10-i) * parseInt(sofiNr.charAt(i-1));
	}

	if ((totaal - sofiNr.charAt(8)) % 11 == 0){
		return true;
	} else {
		return false;
	}
}

function isValidAccountNr(obj, name){
	var valid = true;
	bankNr = obj.value;
	var lengthAfter = bankNr.length;
	var banks = document.getElementsByName(name);
	for (var i = 0; i < banks.length; i++){
		if (banks[i].checked)
			var bank = banks[i].value;
	}
	
	if (lengthAfter >= 3 && lengthAfter <= 7 && bank == "girorekening"){
		
	} else if (lengthAfter == 9 && bank == "bankrekening"){ // If the bankNumber is 9 numbers, execute 'elfproef'
		var totaal = 0;
		for(i=0; i < 9; i++){
			totaal += (9-i) * parseInt(bankNr.charAt(i));
		}

		if (totaal % 11 != 0) valid = false;
	} else {
		valid = false;
	}
	
	return valid;
}

function isValidEmail(obj){
	var regexp = /^[a-zA-Z0-9_-]+([\.]{1}[a-zA-Z0-9_-]+)*@[a-zA-Z0-9_-]+([\.]{1}[a-zA-Z0-9_-])*([\.]{1})+[a-zA-Z]{2,3}$/i;
	return regexp.test(obj.value);
}

function isValidUrl(obj){
	var regexp = /[A-Za-z0-9\.-]{2,}\.[A-Za-z]{2}/;
	return regexp.test(obj.value);
}

function cc(cd, name, bankf, accf){
	this.name=name;
	this.cd=cd;
	this.bank=cf(bankf);
	this.acc=cf(accf);
	this.bankl=cl(this.bank);
	this.accl=cl(this.acc);
	this.totall=4+this.bankl+this.accl;
}

function cf(form){
var forml=new Array();
var parts=form.split(" ");
for (var i=0; i<parts.length; ++i){var part=parts[i];
if (part!=""){
var a_n=part.charAt(part.length-1);
if (a_n=="a"||a_n=="n") part=part.substring(0, part.length-1);
else a_n="an";
var lng=parseInt(part);
forml[forml.length]=new Array(lng, a_n);}}
return forml;}

function cl(forml){
var sum=0;
for (var i=0; i<forml.length; ++i)
sum+=forml[i][0];
return sum;}

var iban_d=new Array(
new cc("AD","Andorra","0 4n 4n","0 12 0"),
new cc("AT","Austria","0 5n 0","0 11n 0"),
new cc("BA","Bosnia","0 3n 3n","0 8n 2n"),
new cc("BE","Belgium","0 3n 0","0 7n 2n"),
new cc("BG","Bulgaria","0 4a 4n","0 10 0"),
new cc("CH","Switzerland","0 5n 0","0 12 0"),
new cc("CS","Serbia","0 3n 0","0 13n 2n"),
new cc("CY","Cyprus","0 3n 5n","0 16 0"),
new cc("CZ","Czech Republic","0 4n 0","0 16n 0"),
new cc("DE","Germany","0 8n 0","0 10n 0"),
new cc("DK","Denmark","0 4n 0","0 9n 1n"),
new cc("EE","Estonia","0 2n 2n","0 11n 1n"),
new cc("ES","Spain","0 4n 4n","2n 10n 0"),
new cc("FI","Finland","0 6n 0","0 7n 1n"),
new cc("FO","Faroe Islands","0 4n 0","0 9n 1n"),
new cc("FR","France","0 5n 5n","0 11 2n"),
new cc("GB","United Kingdom","0 4a 6n","0 8n 0"),
new cc("GI","Gibraltar","0 4a 0","0 15 0"),
new cc("GL","Greenland","0 4n 0","0 9n 1n"),
new cc("GR","Greece","0 3n 4n","0 16 0"),
new cc("HR","Croatia","0 7n 0","0 10n 0"),
new cc("HU","Hungary","0 3n 4n","1 15 1 "),
new cc("IE","Ireland","0 4a 6n","0 8n 0"),
new cc("IS","Iceland","0 4n 0","0 18n 0"),
new cc("IT","Italy","1a 5n 5n","0 12 0"),
new cc("LI","Liechtenstein","0 5n 0","0 12 0"),
new cc("LT","Lithuania","0 5n 0","0 11n 0"),
new cc("LU","Luxembourg","0 3n 0","0 13 0"),
new cc("LV","Latvia","0 4a 0","0 13 0"),
new cc("MC","Monaco","0 5n 5n","0 11 2n"),
new cc("MK","Macedonia","0 3n 0","0 10 2n"),
new cc("MT","Malta","0 4 5n","0 18 0"),
new cc("MU","Mauritius","0 4a 4n","0 15n 3"),
new cc("NL","Netherlands","0 4a 0","0 10n 0"),
new cc("NO","Norway","0 4n 0","0 6n 1n"),
new cc("PL","Poland","0 8n 0","0 16n 0"),
new cc("PT","Portugal","0 4n 4n","0 11n 2n"),
new cc("RO","Romania","0 4a 0","0 16 0"),
new cc("SE","Sweden","0 3n 0","0 16n 1n"),
new cc("SI","Slovenia","0 5n 0","0 8n 2n"),
new cc("SK","Slovak Republic","0 4n 6n","0 10n 0"),
new cc("SM","San Marino","1a 5n 5n","0 12 0"),
new cc("TN","Tunisia","0 2n 3n","0 13n 2n"),
new cc("TR","Turkey","0 5n 1","0 16 0")
);

function cty_d(cd){
	for (var i=0; i<iban_d.length; ++i)
		if (iban_d[i].cd==cd)
			return iban_d[i];
	return null;
}

function Inv1(forml, ip){
for (var f=0; f<forml.length; ++f){
var lng=forml[f][0], a_n=forml[f][1];
if (lng>ip.length) lng=ip.length;
for (var i=0; i<lng; ++i){
var ch=ip.charAt(i);
var a=("A"<=ch&&ch<="Z");
var n=("0"<=ch&&ch<="9");
if ((!a&&!n)||(!a&&a_n=="a")||(!n&&a_n=="n"))
return true;}
ip=ip.substring(lng);}
return false;}

function Inv2(cy, bank){
	return (bank.length!=cy.bankl);
}

function Inv3(cy, bank){
	return (Inv2(cy, bank)||Inv1(cy.bank, bank));
}

function Inv4(cy, a){
	return (a.length<1||a.length>cy.accl);
}

function Inv5(cy, a){
	return (Inv4(cy, a)||Inv1(cy.acc, fa(cy, a)));
}

function Inv6(cy, iban){
	return (iban.length!=cy.totall);
}

function IBANokay(iban){
	return cksum(iban)=="97";
}

function fa(cy, a){
	return fz(a, cy.accl);
}

function fz(p, l){

	while (p.length<l)
	p="0"+p;
	return p;
}

function c2d(ch){
var upp="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (var i=0; i<upp.length; ++i)
if (ch==upp.charAt(i))
break;
return i+10;}

function m97(digs){
var m=0;
for (var i=0; i<digs.length; ++i)
m=(m*10+parseInt(digs.charAt(i)))%97;
return m;}

function cksum(iban){
var cd=iban.substring(0, 2);
var ck=iban.substring(2, 4);
var bban=iban.substring(4);
var d="";
for (var i=0; i<bban.length; ++i){
var ch=bban.charAt(i);
if ("0"<=ch&&ch<="9") d+=ch;
else d+=c2d(ch);}
for (var i=0; i<cd.length; ++i){
var ch=cd.charAt(i);
d+=c2d(ch);}
d+=ck
ck=98-m97(d);
return fz(""+ck, 2);}

function isValidIban(obj){
	var iban=obj.value;
	iban=iban.replace(/\s+/g, '');
	iban = iban.toUpperCase();
	obj.value = iban;
	var cd=iban.substring(0, 2);
	var ck=iban.substring(2, 4);
	var bban=iban.substring(4);
	var cy=cty_d(cd);
	var err=null;
	var valid = true;
	
	if (cy==null){
		err="Unrecognized country code: "+cd+" or no data";
		valid = false;
	} else if (Inv6(cy, iban)){
		err="Length of IBAN: "+iban.length+" is not correct. IBAN for "+cy.name+" needs to be "+cy.totall+" characters in length";
		valid = false;
	} else {
		var bankl=cy.bankl;
		var bank=bban.substring(0, bankl);
		var a=bban.substring(bankl);

		if (Inv3(cy, bank)){
			err="Bank/Branch Code: "+bank+" is not correct format for "+cy.name;
			valid = false;
		} else if (Inv5(cy, a)){
			err="Account Number: "+a+" is not correct format for "+cy.name;
			valid = false;
		} else if (!IBANokay(iban)){
			err="IBAN checksum: "+ck+" is not correct - data entry error or invalid IBAN";
			valid = false;
		}
	}
	
	if (!valid) alert(err);
	
	return valid;
}