
// 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);
				if (objfield.type) {
					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", "form");
		return false;
	}
}
}

function form_init() {
	var aFlds = document.getElementsByTagName("textarea");
	for (var i = 0; i < aFlds.length; i++) { 
		aFlds[i].style.paddingRight = "20px";
		aFlds[i].supports_clear = true;
		lib_addEvent(aFlds[i], "focus", form_control_focus);
	}
	// 
	var aFlds = document.getElementsByTagName("input");
	for (var i = 0; i < aFlds.length; i++) { 
		// IE: empty defaults to edit field
		aFlds[i].supports_clear = false;
		if (aFlds[i].type=="text" || aFlds[i].type=="") {
			// 2do: skip fields in the hidden required field list
			if ( !( aFlds[i].className=='datefield' || aFlds[i].readOnly || aFlds[i].maxLength<5 || aFlds[i].name.substring(0,8).toLowerCase()=='required')) {
				aFlds[i].style.paddingRight = "20px";
				aFlds[i].supports_clear = true;
			}
		}
		lib_addEvent(aFlds[i], "focus", form_control_focus);
	}
	var aFlds = document.getElementsByTagName("select");
	for (var i = 0; i < aFlds.length; i++) { 
		aFlds[i].supports_clear = false;
		lib_addEvent(aFlds[i], "focus", form_control_focus);
	}	
}

//	Event handler for typing after validation went wrong..
//
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.");
			}
		}
	}
}

var lib_clear_elt_name = "lib_clear_editbutton"
//
// 2do: scrolling breaks link between control and clear button
//
function form_create_clearcontrol( elt ) {
	library_clear_control_elt = $(lib_clear_elt_name);
	if (!library_clear_control_elt) {
		library_clear_control_elt = document.getElementsByTagName("body")[0].appendChild(document.createElement("a"));
	}
	library_clear_control_elt.className = "lib_clear_editbutton";
	library_clear_control_elt.id = lib_clear_elt_name;
	library_clear_control_elt.style.top = (lib_getAbsoluteOffsetTop(elt) + 2).toString() + "px";
	library_clear_control_elt.style.left = (lib_getAbsoluteOffsetLeft(elt) + elt.offsetWidth - library_clear_control_elt.offsetWidth - 3).toString() + "px";
	library_clear_control_elt.title = "Maak veld leeg";
	library_clear_control_elt.edit_field = elt;
	lib_addEvent(library_clear_control_elt, "click", form_clear_fieldvalue);
}

// for now, creates the clear control, but named it general for future enhancements (popup help for instance)
// 
function form_control_focus( evt ) {
	var elt = document.activeElement ? document.activeElement : evt.currentTarget;
	if (elt.supports_clear) {
		form_create_clearcontrol( elt );
	} else {
		form_hide_clearcontrol( );
	}
}

function form_hide_clearcontrol( ) {
	var library_clear_control_elt = $(lib_clear_elt_name);
	if (library_clear_control_elt) {
		library_clear_control_elt.style.top="-30px";
	}
}
function form_clear_fieldvalue( elt ) {
	var library_clear_control_elt = $(lib_clear_elt_name);
	var edt = library_clear_control_elt.edit_field;
	if (edt) {	
		edt.value="";
		edt.focus();
	}	
}


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;
}

