/*			
						This javascript library is copyright protected, Ninebits © 2009
			
			--------------------------------------------------------------------------------------------------------------------
			None of the scripts, functions or any other elements on this site and this library
			may be copied, sold, decompiled or used in any other way.
			
			Unauthorised backup is prohibited, only one instance may reside at the server
			where a ninebits project is hosted. On request a new instance will be installed
			by ninebits.
			--------------------------------------------------------------------------------------------------------------------
			Please visit us at http://www.ninebits.nl
			--------------------------------------------------------------------------------------------------------------------
			This library is W3C compliant, FF, IE, NS, OP. 26-07-2005 22:33 CET
			
			Current version: 3.002
			
			This library contains several functions regarding checking and markup of forms and
			formelements. This library needs the common library for additional functions called
			by it's own functions.
			
			Minimale omgevingseisen
			 -  'var nb_verplicht_marker' moet een waarde hebben, deze waarde wordt door de 
			 	controle functie gezocht en uitgelezen om te zien of het betreffende element
			 	verplicht is of niet
			 - formulierelementen die verplicht zijn dienen een 'title' attribuut te hebben, de 
			 	eigenschap van dit attribuut moet de volgende onderdelen bevatten in de 
			 	omschreven volgorde: 
			 		title="titel_van_het_element [verplicht_marker, optionele_integriteitseisen]"
			 - alle elementen moeten een 'naam' en een 'id' hebben
			
			Mogelijke integriteitscontrole of mutaties
			 - valuta / controleren of het geldige valuta notatie is
			 - e-mail / controleren of invoer aan de minimale eisen van een e-mail adres voldoet
			 - akkoord / voor juridische verklaringen controleren of er exact 'akkoord' ingevoerd is
			 - nummer / of de invoer numeriek is
			 - postcode / of de invoer uit 4 cijfers en 2 letters zonder spatie bestaat
			 - datum / of de invoer voldoet aan dd-mm-jjjj
			 - vandaag / of de invoer voldoet aan dd-mm-jjjj en dat het de huidige datum is
			 - telefoon / of de invoer uit 10 cijfers bestaat met of zonder minus teken
			 - hoofdletters / invoer omzetten naar hoofdletters
			 - onderkasten / invoer omzetten naar onderkasten
			 - geen-spaties / spaties verwijderen uit invoer
			
			Bewerkt
			--------------------------------------------------------------------------------------------------------------------
			01-11-2006 14:41 Alex Mooij / Documentatie uitgebreidt en multiselector functie
			20-03-2007 17:55 Alex Mooij / Entertoets onderdrukking functie
*/
	
	var nb_verplicht_marker = 'verplicht';
	var nb_bevestiging_onthouden = '';
	
	// De juiste reeksen opbouwen om geneste rollen en profielen weer te geven
	var _nbgenesterechteningroep = new Array();
	_nbgenesterechteningroep['rollen'] = new Array();
	_nbgenesterechteningroep['profielen'] = new Array();
	
	function _nbresetlijst(id){
		if (document.getElementById(id)){
			var obj = document.getElementById(id);
			for (var x=0; x < obj.options.length; x++){
				obj.options[x].disabled=0;
				obj.options[x].style.color='#000000';
			}
		}
		else{
			window.status = 'Er wordt een lijst aangeboden om te legen maar de ID is niet gevonden.';
		}
	}
	
	function _nbinstellenenkel(id, geheugen, nest){
		if (document.getElementById(id)){
			var obj = document.getElementById(id);
			for (var x=0; x < obj.options.length; x++){
				if (_nbgenesterechteningroep[id][nest][0]==obj.options[x].value){
					if (obj.options[x].selected){
						obj.options[x].selected=0;
					}
					if (typeof(geheugen[id][x])=='undefined'){
						obj.options[x].disabled=1;
						obj.options[x].style.color='gray';
						
						// De rollen opslaan
						geheugen[id][x] = 1;
					}
				}
			}
		}
		return geheugen;
	}
	
	function _nbinstellendubbel(id, geheugen, nest){
		if (document.getElementById(id)){
			var obj = document.getElementById(id);
			for (var x=0; x < obj.options.length; x++){
				for (var y=0; y < _nbgenesterechteningroep[id][nest].length; y++){
					if (_nbgenesterechteningroep[id][nest][y][0]==obj.options[x].value){
						if (obj.options[x].selected){
							obj.options[x].selected=0;
						}
						if (typeof(geheugen[id][x])=='undefined'){
							obj.options[x].disabled=1;
							obj.options[x].style.color='gray';
							
							// De profielen opslaan
							geheugen[id][x] = 1;
						}
					}
				}
			}
		}
		return geheugen;
	}
	
	function _nbuitzettengenestgedrag(){
		var gobj = document.getElementById('groepen');
		var kinderen = new Array('rollen','profielen');
		var geheugen = new Array();
		for (var k=0;k < kinderen.length; k++){
			geheugen[kinderen[k]] = new Array();
			_nbresetlijst(kinderen[k]);
		}

		// Alle groepen uit de selector instellen
		for (var z=0; z < gobj.options.length; z++){
			if (gobj.options[z].selected){
				geheugen = _nbinstellenenkel(kinderen[0], geheugen, gobj.options[z].value);
				geheugen = _nbinstellendubbel(kinderen[1], geheugen, gobj.options[z].value);
			}
		}
	}
	
	/* Controleren of er wel checkboxes zijn geselecteerd */
	function nb_selectie_controle(bereik){
		var boxes = document.getElementsByTagName('INPUT');
		for(var i=0;i < boxes.length; i++){
			if (boxes[i].type == "checkbox"){
				if (boxes[i].name == bereik){
					if (boxes[i].checked == 1){
						return true;
					}
				}
			}
		}
		return false;
	}
	
	/* Een verzameling checkboxes aan/uit zetten */
	function nb_alles_selecteren(bereik, mode){
		var boxes = document.getElementsByTagName('INPUT');
		for(var i=0;i < boxes.length; i++){
			if (boxes[i].type == "checkbox"){
				if (boxes[i].name == bereik){
					if (mode == 2){
						if (boxes[i].checked == 1){
							boxes[i].checked = 0;
						}
						else{
							boxes[i].checked = 1;
						}
					}
					else{
						boxes[i].checked = mode;
					}
				}
			}
		}
	}
	
	/* Een multiselector met 1 klik alles (de)selecteren */
	function nbmultiselect_alles(elementid,modus){
		var obj = document.getElementById(elementid);
		if (modus=="all" || modus=="reverse"){
			for(var i=0;i< obj.options.length;i++){
				if (modus=="all"){
					if (obj.options[i].value!=''){
						obj.options[i].selected=true;
					}
					else{
						obj.options[i].selected=false;
					}
				}
				else if (modus=="reverse"){
					if (obj.options[i].selected==1){
						obj.options[i].selected=false;
					}
					else{
						obj.options[i].selected=true;
					}
					if (i==0){
						obj.options[i].selected=false;
					}
				}
			}
		}
		else if (modus=="none"){
			obj.selectedIndex=0;
		}
	}
	
	/* Als het nodig is de integriteit van de de ingevoerde data controleren */
	function nbcheck_controleerinvoer(nbcheck_v_formulierelement,nbcheck_v_formulieropmaak){
		var waarde = nbcheck_v_formulierelement.value;
		switch(nbcheck_v_formulieropmaak){
			case 'valuta':
				return nb_valuta(waarde)
			break;
			case 'e-mail':
				return nb_emailadres(waarde);
			break;
			case 'akkoord':
				return nb_akkoord(waarde);
			break;
			case 'nummer':
				if (!isNaN(waarde)){
					return true;
				}
			break;
			case 'postcode':
				return nb_postcode(waarde);
			break;
			case 'datum':
				return nb_datum(waarde);
			break;
			case 'vandaag':
				return nb_datumvandaag(waarde);
			break;
			case 'telefoon':
				return nb_telefoonnummer(waarde);
			break;
			case 'hoofdletters':
				nbcheck_v_formulierelement.value = waarde.toUpperCase();
				return true;
			break;
			case 'onderkasten':
				nbcheck_v_formulierelement.value = waarde.toLowerCase();
				return true;
			break;
			case 'geen-spaties':
				nbcheck_v_formulierelement.value = nb_spatiesverwijderen(waarde);
				return true;
			break;
			case 'default':
				return false;
		}
		return false;
	}
	
	/* Valuta invoer controleren */
	function nb_valuta(waarde){
		if (isNaN(waarde)){
			waarde = '';
			return false;
		}
		else{
			var nbnaarstring = waarde.toString();
			var nbvaluta = '';
			for(var i=1;i<(Math.floor(nbnaarstring.length/3)+1);i++){
				j=i*3;
				nbvaluta += '.'+nbnaarstring.substring(nbnaarstring.length-j,nbnaarstring.length-j+3);
			}
			nbcheck_v_formulierelement.value = nbnaarstring.substring(0,nbnaarstring.length-(Math.floor(nbnaarstring.length/3)*3) ) +''+ nbvaluta;
			return true;
		}
	}
	
	/* Integriteit van een e-mail adres controleren */
	function nb_emailadres(waarde){
		if (waarde.length < 6 || waarde.indexOf("@",0) == - 1 || waarde.indexOf(".",0) == - 1 || waarde.indexOf("@") != waarde.lastIndexOf("@")){
			return false;
		}
		return true;
	}
	
	/* Invoer het woord 'akkoord' controleren voor juridische kennisgevingen */
	function nb_akkoord(waarde){
		if (waarde=='akkoord'){
			return true;
		}
		return false;
	}
	
	/* Postcode format controleren XXXX$$ */
	function nb_postcode(waarde){
		var cijfers = _nbno(waarde.substr(0,4));
		if (isNaN(cijfers) || waarde.length != 6 || !isNaN(waarde.substr(3,2))){
			return false;
		}
		return true;
	}
	
	/* Regulieren datum dd-mm-jjjj controleren */
	function nb_datum(waarde){
		var cijfers1 = _nbno(waarde.substr(0,2));
		var cijfers2 = _nbno(waarde.substr(3,2));
		var cijfers3 = _nbno(waarde.substr(6,4));
		if (isNaN(cijfers1) || waarde.length != 10 || isNaN(cijfers2) || isNaN(cijfers3)){
			return false;
		}
		return true;
	}
	
	/* Datum van vandaag dd-mm-jjjj controleren */
	function nb_datumvandaag(waarde){
		waarde = nb_spatiesverwijderen(waarde);
		var datumobj = new Date();
		var vandaagdag = datumobj.getDate();
		if (datumobj.getDate() < 10){
			vandaagdag = '0' + datumobj.getDate();
		}
		var vandaagmaand = datumobj.getMonth() + 1;
		if (vandaagmaand < 10){
			vandaagmaand = '0' + vandaagmaand;
		}
		var datumcomp = vandaagdag + '-' + vandaagmaand + '-' + datumobj.getFullYear();
		if (datumcomp != waarde){
			return false;
		}
		return true;
	}

	/* Spaties verwijderen */
	function nb_spatiesverwijderen(waarde){
		return waarde.replace(/[ ]+/gi,'');
	}

	/* Telefoonnummer controleren */
	function nb_telefoonnummer(waarde){
		var lengtereeks = nb_spatiesverwijderen(waarde);
		if (waarde.indexOf('-')>-1){
			var telefoonreeks = waarde.split('-');
			lengtereeks = telefoonreeks[0] + telefoonreeks[1];
		}
		var cijfers = _nbno(lengtereeks);
		if (isNaN(cijfers) || lengtereeks.length < 10){
			return false;
		}
		return true;
	}
	
	/* Vaststellen of het element wel gecontroleerd hoeft te worden */
	function nbcheck_type(nb_type){
		if (nb_type=='hidden' || nb_type=='button' || nb_type=='reset' || nb_type=='submit' || nb_type==''){
			return false;
		}
		return true;
	}
	
	/* Opzoeken of en welke subformulieren er mogelijk actief zijn als er geen subs gevonden worden dan false teruggeven */
	function nbcheck_actievesubs(nb_zoeksubs){
		var gevonden_subs = new Array();
		var s=0;
		for (var i=0;i< nb_zoeksubs.length;i++){
			if (nb_zoeksubs[i].type=='checkbox' && (nb_zoeksubs[i].id.indexOf('actief_')==0) && nb_zoeksubs[i].checked==1 && nb_zoeksubs[i].value!=1){
				gevonden_subs[s] = nb_zoeksubs[i].value;
				s++;
			}
		}
		if (s==0){
			return false;
		}
		return gevonden_subs;
	}
	
	/* Hoofdfunctie voor het controleren van de elementen */
	function nbcheck_controleerformulier(nbcheck_v_formulierid){
		var nbcheck_v_formulierobj=document.getElementById(nbcheck_v_formulierid).elements;
		// Reeks met actieve subs en welke velden zij vervangen
		var nb_actievesubs = nbcheck_actievesubs(nbcheck_v_formulierobj);
		// Foutmelding initieren
		var nbcheck_v_foutmelding='';
		// Radioknop groepen initieren
		var nbcheck_v_radioapp=1;
		for (var i=0;i< nbcheck_v_formulierobj.length;i++){
			// Is het een vervangen veld door een sub dan de controle daarvoor opheffen
			var nb_nietvervangen = true;
			if (!nb_actievesubs){}
			else{
				var nb_t_naam = nbcheck_v_formulierobj[i].name;
				nb_t_naam = nb_t_naam.substring((nb_t_naam.lastIndexOf('[')+1),(nb_t_naam.length-1));
				if (nbdoorzoekreeks(nb_actievesubs,nb_t_naam)){
					nb_nietvervangen = false;
				}
			}
			// Alleen controleren als het veld niet vervangen is door een sub
			if (nb_nietvervangen){
				var nbcheck_v_alleenspaties = nbcheck_v_formulierobj[i].value.replace(/ /g,'');
				var nbcontrole_nodig = nbcheck_type(nbcheck_v_formulierobj[i].type);
				var nbgroepnaam = nbcheck_v_formulierobj[i].name.substring(0,nbcheck_v_formulierobj[i].name.indexOf('['));
				if (nbcheck_v_formulierobj[i].type=='file'){
					nbgroepnaam = nbcheck_v_formulierobj[i].id.substring(0,nbcheck_v_formulierobj[i].id.indexOf('_'));
				}
				if (nbcheck_v_formulierobj[i].name==''){
					nbcontrole_nodig=false;
				}
				if (nbcontrole_nodig){
					var nbsubformulier = 'actief_' + nbgroepnaam;
					var nbsubformulieractief = false;
					if (document.getElementById(nbsubformulier)){
						if (document.getElementById(nbsubformulier).checked==1){
							nbsubformulieractief = true;
						}
					}
					else{
						nbsubformulieractief = true;
					}
				}
				else{
					nbsubformulieractief = true;
				}
			}
			if (nbcheck_v_formulierobj[i].title!='' && nbcontrole_nodig && nbsubformulieractief && nb_nietvervangen){
				// De verplicht marker zoeken in het titel attribuut
				var nbcheck_v_verplichtreeks = nbcheck_v_formulierobj[i].title.split('[');
				var nbcheck_v_verplichtveld = nbcheck_v_verplichtreeks[1];
				// Overbodige spaties verwijderen
				nbcheck_v_verplichtveld = nbcheck_v_verplichtveld.replace(/[ ]+/gi,'');
				nbcheck_v_verplichtveld = nbcheck_v_verplichtveld.replace(/]/g,'');
				var nbcheck_v_verplichtopmaak = new Array('','');
				// Als het veld verplicht is zoeken of er een verplicht format is opgegeven
				if (nbcheck_v_verplichtveld != ''){
					if (nbcheck_v_verplichtveld.indexOf(',')>-1){
						var nbcheck_v_verplichtopmaak = nbcheck_v_verplichtveld.split(',');
					}
					else{
						nbcheck_v_verplichtopmaak[0] = nbcheck_v_verplichtveld;
					}
				}
				if (nbcheck_v_verplichtopmaak[0].toLowerCase()==nb_verplicht_marker.toLowerCase()){
					// Verplicht veld
					var nbcheck_v_verplichtmarkering=1;
					if (nbcheck_v_verplichtopmaak[1]){
						// Verplicht veld en format ook
						nbcheck_v_verplichtmarkering=2;
					}
				}
			}
			else{
				// Niet verplicht
				var nbcheck_v_verplichtmarkering=0;
			}
			if (nbcheck_v_verplichtmarkering>0){
				// Afhankelijk van het veldtype de juiste inhoudscontrole starten
				switch(nbcheck_v_formulierobj[i].type){
					case 'radio':
						var nbcheck_v_groepnaam = nbcheck_v_formulierobj[i].name;
						nbcheck_v_foutmelding += nb_inhoudradio(nbcheck_v_radioapp,nbcheck_v_formulierobj[i],nbcheck_v_formulierobj,nbcheck_v_verplichtreeks[0]);
						nbcheck_v_radioapp = 'element.name!=\''+nbcheck_v_groepnaam+'\'';
					break;
					case 'checkbox':
						if (!nbcheck_v_formulierobj[i].checked){
							nbcheck_v_foutmelding += '<li>'+ nbcheck_v_verplichtreeks[0];
						}
					break;
					case 'text':
						var nbcheck_v_aangevinkt = true;
						// Textvelden kunnen op inhoudsintegriteit gecontroleerd worden
						if (nbcheck_v_verplichtmarkering==2){
							nbcheck_v_aangevinkt = nbcheck_controleerinvoer(nbcheck_v_formulierobj[i],nbcheck_v_verplichtopmaak[1]);
						}
						if (nbcheck_v_formulierobj[i].value=='' || (!nbcheck_v_aangevinkt && nbcheck_v_formulierobj[i].value!='') || nbcheck_v_alleenspaties == ''){
							nbcheck_v_foutmelding += '<li>'+ nbcheck_v_verplichtreeks[0];
						}
					break;
					case 'textarea':
						nbcheck_v_foutmelding += nb_inhoudaanwezig(nbcheck_v_formulierobj[i].value,1,nbcheck_v_verplichtreeks[0]);
					break;
					case 'file':
						nbcheck_v_foutmelding += nb_inhoudaanwezig(nbcheck_v_formulierobj[i].value,1,nbcheck_v_verplichtreeks[0]);
					break;
					case 'password':
						var nb_t_foutmelding = nb_inhoudaanwezig(nbcheck_v_formulierobj[i].value,1,nbcheck_v_verplichtreeks[0]);
						if (nbcheck_v_formulierobj[i].value.length < 6 || nb_t_foutmelding!=''){
							nbcheck_v_foutmelding += '<li>'+ nbcheck_v_verplichtreeks[0];
						}
					break;
					case 'select-one':
						nbcheck_v_foutmelding += nb_inhoudaanwezig(nbcheck_v_formulierobj[i].value,0,nbcheck_v_verplichtreeks[0]);
					break;
					case 'select-multiple':
						nbcheck_v_foutmelding += nb_inhoudaanwezig(nbcheck_v_formulierobj[i].value,0,nbcheck_v_verplichtreeks[0]);
				}
			}					
		}
		
		// Indien de foutmelding niet leeg is de melding activeren
		if (nbcheck_v_foutmelding!=''){
			nbmelding_weergeven('Waarschuwing','<p>De volgende velden zijn niet (goed) ingevuld:</p><ul>'+ nbcheck_v_foutmelding +'</ul><p>Corrigeer de foutieve velden en probeer het opnieuw.</p>',-1);
			return false;
		}
		return true;
	}
	
	/* Radioknop groep controle */
	function nb_inhoudradio(radiogroep,element,formulier,melding){
		// Met eval zorgen we ervoor dat er voor de hele radiogroep maar een melding
		// gegenereerd kan worden
		if (eval(radiogroep)){
			var groepcontrole = false;
			for (var j=0;j< formulier[element.name].length;j++){
				if (formulier[element.name][j].checked){
					groepcontrole = true;
				}
			}
			// Als er geen enkele knop actief is dan melding
			if (!groepcontrole){
				return '<li>'+ melding;
			}
		}
		return '';
	}
	
	/* Oppervlakkige inhoud controle */
	function nb_inhoudaanwezig(waarde,alleenspaties,melding){
		if (alleenspaties){
			waarde = waarde.replace(/ /g,'');
		}
		if (waarde==''){
			return '<li>'+ melding;
		}
		return '';
	}
	
	/* Indien nodig een alarmbericht weergeven */
	function nbmelding_weergeven(titel, tekst, seconden){
		if (document.getElementById('info_ballon')){
			var objpos = document.getElementById('info_ballon');
			var objmelding = document.getElementById('info_ballon_melding');
			
			// Met de functie 'nbvensterafmetingen' krijgen we een object terug met
			// de breedte en hoogte van de pagina in het venster, als de gebruiker
			// gescrolled heeft wordt dit opgepikt en in de berekening meegenomen
			var afm = nbvensterafmetingen();
			
			// Als de functie is aangesproken met seconden dan het deactiveren timen
			if (seconden>-1){
				var timers = new Array();
				timers['weergave'] = setTimeout('document.getElementById(\'info_ballon\').style.display=\'none\'',(seconden*1000));
				timers['transparantie'] = setTimeout('nbantifocuslaag(\'nb_globaal_antifocus\',100)',(seconden*1000));
				timers['focus'] = setTimeout('nbcheck_focusinstellen()',(seconden*1000)+10);
			}
			
			// Positioneren
			objpos.style.left = ((afm.breedte/2)-175) + 'px';
			objpos.style.top = ((afm.hoogte/2)-170+nbbodypositie()) + 'px';
			
			// Starten met het invoeren van de titel
			document.getElementById('info_ballon_titel').innerHTML = '<h3>' + titel + '</h3>';
			
			// Vervolgens de tekst invoeren
			var meldingtekst = tekst;
			
			// Afhankelijk van de timer extra info invoeren
			if (seconden>0){
				meldingtekst += '<p>Deze melding sluit automatisch na ' + seconden + ' seconden of als er op geklikt wordt.</p>';
			}
			else{
				meldingtekst += '<table cellspacing="0" border="0"><tr style="height: 35px">';
				if (seconden==-2){
					meldingtekst += '<td width="160"><button class="nb_formulier_knop" onclick="nbmelding_verwijderen();"> Annuleren </button></td>';
					meldingtekst += '<td width="170" align="right"><button class="nb_formulier_knop" onclick="nbactiveer_formulier(\'nb_form_overzicht\',\'mutatie\',0);"> Ok </button></td>';
				}
				else{
					meldingtekst += '<td width="330" align="right"><button class="nb_formulier_knop" onclick="nbmelding_verwijderen();"> Ok </button></td>';
				}
				meldingtekst += '</tr></table>';
			}
			
			if (meldingtekst != ''){
				objmelding.innerHTML = meldingtekst;
			}
			else{
				objmelding.innerHTML = '<p>Er is een probleem ontstaan bij het samenstellen van deze melding, neem contact op met de beheerder.</p>';
			}
			
			// Melding weergeven
			objpos.style.display = 'block';
			
			// Het achterliggende document bedekken met een semi-transparante laag
			nbantifocuslaag('nb_globaal_antifocus',40);
		}
		
		// Als de div voor de melding niet gevonden wordt dan een melding met een alert
		else{
			tekst += '\n\n\tEr is een probleem ontstaan bij deze actie en de gedetailleerde foutmelding kan niet worden getoond. Wilt u direct hulp aanvragen?';
			if (confirm(titel + '\n\n\t' + tekst)){
				document.location.href='http://helpdesk.ninebits.nl/';
			}
		}
	}
	
	/* Waarschuwing verwijderen */
	function nbmelding_verwijderen(){
		nbannuleer_actie();
		// Eventuele timers uitschakelen
		if (typeof(timers) != 'undefined'){
			window.clearTimeout(timers['focus']);
		}
		document.getElementById('info_ballon').style.display='none';
		nbantifocuslaag('nb_globaal_antifocus',100);
		nbcheck_focusinstellen();
	}
	
	/* Indien een request lang lijkt te gaan duren een melding geven */
	function nbsysteem_bezig(){
		nbmelding_weergeven('Melding','<p>De gegevens die het systeem opvraagt vragen veel tijd, een moment aub...</p><br>',-1);
	}
	
	/* De timer uitschakelen en de melding verwijderen als de lange request klaar is */
	function nbsysteem_klaar(){
		if (document.getElementById('info_ballon')){
			if (document.getElementById('info_ballon').style.display=='block'){
				document.getElementById('info_ballon').style.display='none';
				nbantifocuslaag('nb_globaal_antifocus',100);
				nbcheck_focusinstellen();
				clearTimeout(nbx_timer);
			}
		}
	}
	
	/* Auto focus als een formulier is weergegeven */
	function nbcheck_focusinstellen(){
		if (document.forms[0]){
			var formulierobj=document.forms[0].elements;
			for (var f=0;f<formulierobj.length;f++){
				
				// Verborgen velden kunnen geen focus of select verwerken
				if (formulierobj[f].value == ''){
					if (formulierobj[f].type!='hidden' && formulierobj[f].type!='checkbox' && formulierobj[f].type!='radio'){
						formulierobj[f].focus();
						
						// Een selector wordt door ie geen select() gegund
						if (formulierobj[f].type.indexOf('select')==-1){
							formulierobj[f].select();
						}
						break;
					}
				}
			}
		}
	}
	
	/* Subformulieren activeren en het element dat vervangen wordt verbergen */
	function nbschakellaagreeks(reeksnaam){
		var reeks = new Array(reeksnaam + '_aan', reeksnaam + '_uit');
		for (var l=0;l<reeks.length;l++){
			var obj = document.getElementById(reeks[l]);
			if (obj.style.display=='none'){
				obj.style.display='block';
			}
			else{
				obj.style.display='none';
			}
		}
	}
	
	/* Formulieren die geen submit button hebben toch koppelen aan de enter toets */
	function nbdrukenter(e, form){
		var toetsnummer = (e.which || e.which==0)?e.which:window.event.keyCode;
		if (toetsnummer == 13){
			document.getElementById(form).submit();
		}
	}
	
	/* Enter toets geheel onderdrukken */
	function _nbverbiedenter(e){
		var toetsnummer = (e.which || e.which==0)?e.which:window.event.keyCode;
		if (toetsnummer == 13){
			return false;
		}
		return true;
	}
	
	/* Bestandvelden mooi opmaken */
	function nbaanpassen_bestandvelden(){
		if (!(document.createElement && document.getElementsByTagName)) return;
		
		// Een nieuwe div maken die als container gaat dienen
		var nb_nep_veld_div = document.createElement('div');
		
		// Klasse toewijzen
		nb_nep_veld_div.className = 'nb_formulier_nep_veld';
		
		// Een input text maken die de bestandsnaam gaat weergeven ipv het file element
		var nb_nep_veld = document.createElement('input');
		nb_nep_veld_div.appendChild(nb_nep_veld);
		nb_nep_veld_div.innerHTML += ' ';
		
		// De bladeren... knop maken
		var knop = document.createElement('span');
		knop.className = 'nb_formulier_invul_knop';
		knop.innerHTML = 'bladeren...';
		nb_nep_veld_div.appendChild(knop);
		
		// Formulier scannen op input elementen
		var el = document.getElementsByTagName('input');
		for (var i=0;i< el.length;i++){
			if (el[i].type != 'file'){
				continue;
			}
			if (el[i].parentNode.className != 'nb_formulier_bestand_containers'){
				continue;
			}
			
			// Als het bestand verplicht is de code toevoegen zodat de controle functie het op pikt
			if (el[i].title.indexOf('verplicht')>-1){
				var stijlel = nb_nep_veld_div.getElementsByTagName('input');
				stijlel[0].style.borderLeft='3px solid #c01919';
			}
			
			// Het originele file element verbergen met de klasse
			el[i].className = 'nb_formulier_bestand_invoercel hidden';
			var clone = nb_nep_veld_div.cloneNode(true);
			el[i].parentNode.appendChild(clone);
			el[i].relatedElement = clone.getElementsByTagName('input')[0];
			
			// Functie koppelen zodat de waarde naar de input wordt doorgegeven zodat deze
			// het gekozen bestand weergeeft voor de gebruiker
			el[i].onchange = el[i].onmouseout = function(){
				this.relatedElement.value = this.value;
			}
		}
	}
	
	/* Het formulier posten naar de gekozen url */
	function nbactiveer_formulier(form,url,modus){
		if (document.getElementById(form)){
			if (modus=='1'){
				var melding = '<p>Weet u zeker dat u de gekozen items wilt verwijderen?</p>';
				nbmelding_weergeven('Waarschuwing',melding,-2);
			}
			else{
				var fobj = document.getElementById(form);
				fobj.action = url;
				fobj.submit();
			}
		}
	}
	
	/* Een actie die onthouden is door het systeem controleren en uitvoeren als er geannuleerd wordt */
	function nbannuleer_actie(){
		if (nb_bevestiging_onthouden!=''){
			eval(nb_bevestiging_onthouden);
			nb_bevestiging_onthouden=='';
		}
	}
	
	/* Elementen controleren met ajax */
	function nbajax_formulier(formulier){
		nbx_nieuw_0(nbx.getFormValues(formulier));
		return false;
	}
	
	/* Als deze bibliotheek geladen wordt dan het document scannen */
	/* en de juiste formulieren activeren, opmaken en indien nodig acties */
	/* die vervallen bij het gebruik van de back button herstellen */
	function nbinit_formulieren(){
		var formulier = false;
		var bestandveld = false;
		for(var f=0;f<10;f++){
			if (document.forms[f]){
				
				// Als de ajax controle geactiveerd is dan die gereedmaken
				if (nbs_ajaxformulier){
					document.forms[f].onsubmit = function(){ return nbajax_formulier(this.id) }
					document.forms[f].action = 'javascript:void(0)';
				}
				
				// Traditionele js controle als er geen ajax geactiveerd is
				else{
					document.forms[f].onsubmit = function(){ return nbcheck_controleerformulier(this.id) }
				}
				
				// Formulier scannen
				var el = document.getElementsByTagName('input');
				for (var i=0;i< el.length;i++){
					
					// Als er een bestandveld wordt gevonden aangeven dat de opmaak daarvan
					// nodig is en de eventueel achtergebleven waarde wissen
					if (el[i].type == 'file'){
						el[i].value=='';
						bestandveld = true;
					}
					
					// Indien er subformulieren aanwezig zijn de bijbehorende statussen controleren
					// en eventuele resten van de back button herstellen
					if (el[i].type=='checkbox' && el[i].value!='1' && (el[i].name.indexOf('actief_')!=0)){
						if (el[i].checked==1){
							var laag = el[i].name.replace('[','_');
							laag = laag.replace(']','');
							nbschakellaagreeks(laag);
						}
					}
				}
				
				// Als er bestandvelden zijn gevonden de opmaak daarvan starten
				if (bestandveld){
					nbaanpassen_bestandvelden();
				}
				formulier=true;
			}
			else{
				break;
			}
		}
		
		// De focus instellen op het juiste element
		if (formulier){
			nbcheck_focusinstellen();
		}
	}
	
	/* Inlogformulier beschermen tegen auto aanvullen */
	function nbantiautoaanvullen(){
		var formulieren = new Array();
		var j = 0;
		if (document.forms){
			
			// Alle formulieren controleren op wachtwoord velden
			for (var i=0; i < forms.length; i++){
				if (document.forms[i]){
					var formulierobj = document.forms[0].elements;
					for (var f=0;f<formulierobj.length;f++){
						if (formulierobj[f].type == 'password'){							
							formulieren[j] = document.forms[i];
							j++;
						}
					}
				}
			}
			
			// Alle formulieren een id geven als ze die niet hebben
			for (var i=0; i < formulieren.length; i++){
				if (!formulieren[i].id){
					formulieren[i].id = formulieren[i].name;
				}
			}
		}
	}
	

	function nbaddOption(selectObject,optionText,optionValue) {
		var obj = document.getElementById(selectObject);
		var optionObject = new Option(optionText,optionValue);
		var optionRank = obj.options.length;
		obj.options[optionRank]=optionObject;
	}
	
	function nbremoveOption(selectObject,objectRank) {
		var obj = document.getElementById(selectObject);
		if (typeof(objectRank) == 'undefined'){
			for(x = obj.length; x >= 0; x = x - 1){
				obj.options[i] = null;
			}
		}
		else{
			obj.options[objectRank] = null;
		}
	}
