function updateFormCaption(id, formValueObject) {
	// note: formValueObject is an element of allFormValueObjects, defined and
	// set in form.js.tpl

	caption=$('.'+id+'-caption');
	caption.html(
			'<span class="errorprefix">'
			+
			formErrorMessage[id] + ' ' + formValueObject.Title + '. </span>'
					+ formValueObject.RegexErrMsg).addClass(
			'ui-state-highlight');
	
	setTimeout( function() {
		caption.removeClass('ui-state-highlight', 1500);
	}, 5000);
}

function validateFormValueObjectByIndex(id, i) {
	var formValueObject=allFormValueObjects[id][i];
	// note: formValueObject is an element of formValueObjects, defined and
	// set in ajaxForm.js.tpl
	var o = formValueObject.Element, regexp = formValueObject.Regex;
	//alert('validateFormValueObject: ' + id + ', i=' + i + '; ' );
	if (regexp && !(regexp.test(o.val()))) {
		o.addClass('ui-state-error');
		o.focus();
		updateFormCaption(id, formValueObject);
		return false;
	} else {
		return true;
	}

}

function formSubmitClick(id) {
	var ok = true;
	
	// Note: formValueObjects is set and defined in
	// form.js.tpl
	
	allFormFields[id].removeClass('ui-state-error');
	//alert('submitClick: '+ formValueObjects.length);
	for ( var i = 0; i < allFormValueObjects[id].length; i++) {
		
		ok = ok && validateFormValueObjectByIndex(id, i);
		// Note: using "&&" prevents the function from being called,
		// if ok is already false!
	}
	
	if(ok){
		$('#'+id+'-form .submitbutton').hide();
		$('#'+id+'-form .resetbutton').hide();
		$('.'+id+'-caption').hide();
		
		//call function defined in form.js.tpl
		$('#'+id+'-form').submit();
	}
}
