
// Eenvoudige validatie, velden die met 'required-' beginnen zijn verplicht (of velden die in het veld Required staan, gescheiden door ; of ,)
// aanroep in form definitie => onsubmit="return form_valid(this)"
function form_valid(form, pClassname, pSubmit) {
var tel;
var objfield;
var strfieldname;
var strerror='';
var blnFirst=true;
var blnCheckField;
var flds_arr;
var req_fld = form["required"];
var elt;

if (pSubmit == null)     pSubmit    = 'Verstuur';
if (pClassname == null)  pClassname = 'forgotten';

if (form){
	if (req_fld) flds_arr=lib_array_split( req_fld.value );

	for (tel=0;tel<form.length;tel++) {
		objfield = form.elements[tel];
		blnCheckField = false;
		if (objfield.name) {
			strfieldname=objfield.name;
			if (strfieldname.substring(0,8).toLowerCase()=='required') {
				blnCheckField = true;
			} else {
				if (flds_arr) blnCheckField = ( lib_array_find(flds_arr, strfieldname) != -1 )
			} 
			if ( blnCheckField) {
				var sNiceField = '';
				var lbl_elt = form[strfieldname+'__label'];
				if (lbl_elt) {
					sNiceField = lbl_elt.value;
				} 
				if (sNiceField=='') {
					var sNiceField = strfieldname;
					if (strfieldname.substring(0,8).toLowerCase()=='required') {
						sNiceField = sNiceField.substring(8);
					}
					sNiceField=sNiceField.replace(/_/gi, " ");
					sNiceField=sNiceField.replace(/-/gi, "");
				}
				sNiceField = sNiceField.substring(0,1).toUpperCase() + sNiceField.substring(1);
				switch (objfield.type) {
					case 'checkbox':
					case 'radio':
						elt = form_find_suitable_parent(form[tel]);
						if (!form_check_required_radio_checkbox(form,strfieldname)) {
							strerror += (' - <strong>' + sNiceField + '</strong> is niet ' + (objfield.type=='checkbox'?'aangevinkt':'geselecteerd') + '.\n');
							form_field_set_forgotten( elt, true, pClassname );
						} else {
							form_field_set_forgotten( elt, false, pClassname );
						}
						// skip all other instances of this element
						if (tel+1<form.length) 
							while (form[tel].name.toLowerCase()==strfieldname.toLowerCase() && tel+1<form.length) tel++;
							// skip back; als het niet de laatste is...
							if (!(form[tel].name.toLowerCase()==strfieldname.toLowerCase() && tel+1==form.length)) tel--;
						break; 
						
					default:
						if (objfield.type!='hidden') {
							if (objfield.value=='') {
								if (blnFirst) {
									try { 
										objfield.focus();
										blnFirst=false;
									}
									catch(e){}
								}
								strerror+=(' - <strong>'+sNiceField+'</strong> is niet ingevuld.\n');
							}
							form_field_set_forgotten( form[tel], (objfield.value==''), pClassname );
						}
						break;
				}
			}
		}
	}

	if (strerror=='') {
		if (document.all){
			for (tel=0;tel<form.length;tel++) {
				objfield=form[tel];
				if (objfield.type=="submit"||objfield.type=="button")  
					objfield.disabled = true;
			} 
		}
		return true;
	} else {
		strerror='De volgende gegevens ontbreken of zijn niet correct\n\n'+strerror+'\nHerstel de fout(en) en druk opnieuw op '+pSubmit+'.';
		lib_alertbox(strerror, "Het formulier is niet correct of niet volledig ingevuld", "error");
		return false;
	}
}
}


//	Event handler fot typing after 
//
function form_field_check_entry( event ) {
	var fld = isIE ? this.event.srcElement : this;
	var bEmpty;
	var elt;
	
	// form_field_set_forgotten (this, (fld.value==''), "forgotten");
	if (fld.type=='checkbox' || fld.type=='radio') {
		// Firefox: werkt niet?!
		bEmpty = !form_check_required_radio_checkbox( form_find_form(fld), fld.name);
		elt = form_find_suitable_parent(fld);
		elt.className = (bEmpty ? fld.className + ' forgotten' : fld.saved_validation_className);
	} else {
		bEmpty = (fld.value=='');
		fld.className = (bEmpty ? fld.className + ' forgotten' : fld.saved_validation_className);
	}
	return true;
}


function form_field_set_forgotten (item, bForgotten, pClassname) {
	if (item) {
		// new: change style of input field
		if (!item.validation_className_saved) {
			item.saved_validation_className = item.className;
			item.validation_className_saved = true;
		}	
		if (pClassname!='') {
			if (bForgotten) {
				item.className = item.className + ' ' + pClassname;
			} else {
				// new: change style of input field, reset (2nd validation request)
				if (item.validation_className_saved) {
					item.className = item.saved_validation_className;
				}
			}
			if  (addEvent) {
				addEvent(item, "keyup", form_field_check_entry);
				addEvent(item, "click", form_field_check_entry);
				addEvent(item, "change", form_field_check_entry);
			} else {
				alert("Neem library.js op in uw HTML header.");
			}
		}
	}
}

function form_init() {}

function form_check_required_radio_checkbox( frm, rad_name ) {
	var bRet=false;

	for (var t=0;t<frm.length;t++) {
		if (frm[t].name) {
		    if (frm[t].name.toLowerCase()==rad_name.toLowerCase()) {
			    if (frm[t].checked) bRet=true;
			}
		}
	}
	return bRet; 
}

//	Zoekt het formulier bij een invoerveld
//
function form_find_form( elt ) {
	var cur_elt = elt;
	var the_form = null;
	while (cur_elt.parentNode && !the_form ) {
		if (cur_elt.tagName.toLowerCase()=="form") the_form = cur_elt;
		cur_elt = cur_elt.parentNode;
	}
	return the_form;
}

//	Zoekt een parent van een checkbox/radiobutton waarin de layout kan vallen
//
function form_find_suitable_parent( elt ) {
	var the_elt = null;
	var cur_elt = elt;
	while (cur_elt.parentNode && !the_elt ) {
		if (cur_elt.tagName.toLowerCase()=="td" || cur_elt.tagName.toLowerCase()=="div" || cur_elt.tagName.toLowerCase()=="span") the_elt = cur_elt;
		cur_elt = cur_elt.parentNode;
	}
	return the_elt;
}
