Form.focusFirstElement(form);
}
+function form_elem_error(elem,text)
+{
+ elem.style.borderColor = 'red';
+ elem.style.borderWidth = '1px';
+ elem.style.borderStyle = 'solid';
+ error(text);
+}
+
+function form_elem_ok(elem)
+{
+ elem.style.borderColor = '';
+ elem.style.borderWidth = '';
+ elem.style.borderStyle = '';
+}
+
+var form_check_regexp = {
+ number: /^\d+$/,
+ decimal: /^\d*([,\.]\d+)?$/,
+ date: /^(\d\d?\.\d\d?\.[1-9]\d\d\d)|([1-9]\d\d\d-\d\d?-\d\d?)$/
+};
+
+function form_elem_check(elem,check)
+{
+ var checks = check.split(',');
+
+ for (var i=0; i < checks.length; i++) {
+ var tagName = elem.tagName.toLowerCase();
+ var label = document.getElementById('label_' + elem.name);
+ if (checks[i] == 'required') {
+ if ((tagName == 'input' ||
+ tagName == 'textarea') &&
+ elem.value.length == 0)
+ return label.innerHTML + ' muss ausgefüllt werden';
+
+ if (tagName == 'select' && elem.value.length == 0)
+ return label.innerHTML + ' muss ausgewählt werden';
+ } else if (form_check_regexp[checks[i]]) {
+ if (!form_check_regexp[checks[i]].test(elem.value))
+ return 'Ungültiger Wert für ' + label.innerHTML;
+ }
+ }
+ form_elem_ok(elem);
+ return '';
+}
+
+function form_elem_onblur(e)
+{
+ if (form_check[e.originalTarget.name]) {
+ var error = form_elem_check(e.originalTarget, form_check[e.originalTarget.name]);
+ if (error.length)
+ form_elem_error(e.originalTarget, error);
+ }
+}
+
+function form_checks(form)
+{
+ var errors = '';
+ for (name in form_check) {
+ var elem = document.getElementById('edit_' + name);
+ var error = form_elem_check(elem, form_check[name]);
+ if (error.length) {
+ form_elem_error(elem, error);
+ errors += '. ' + error + "\n";
+ }
+ }
+
+ if (errors.length) {
+ alert("Fehler im Formular:\n" + errors);
+ return false;
+ }
+
+ return true;
+}
+
function select_update(id, options, empty)
{
var obj = document.getElementById(id);
if (!id.value.length)
return form_insert(obj);
+ if (!form_checks(obj.form))
+ return false;
+
info('');
if (typeof pre_save == 'function')
function form_insert(obj)
{
+ if (!form_checks(obj.form))
+ return false;
+
info('');
if (typeof pre_insert == 'function')
$jscode[] = 'Rico.onLoad( function() {';
$jscode[] = "form_init();";
$jscode[] = '});';
+ $jscode[] = "var form_check = {};";
$ret[] = '<div class="form">';
if (empty($mask['edit_title']))
elseif ($info['type'] == 'html')
$ret[] = $info['code'];
else {
- $ret[] = sprintf('<label for="edit_%s">%s</label><br>', $id, $info['name']);
+ $ret[] = sprintf('<label id="label_%s" for="edit_%s">%s</label><br>', $id, $id, $info['name']);
$v = array('id="edit_'.$id.'"',
'name="'.$id.'"');
+ $checks = array();
+
+ if ($info['required'] === true) {
+ $checks[] = 'required';
+ $v[] = 'onblur="form_elem_onblur(event)"';
+ }
if ($info['type'] == 'text' || $info['type'] == 'passwd' ||
$info['type'] == 'decimal' || $info['type'] == 'number') {
$v[] = 'type="'.($info['type']=='passwd'?'password':'text').'"';
$v[] = 'value="'.(empty($info['default'])?'':$info['default']).'"';
$ret[] = sprintf('<input %s>', implode(' ', $v));
+
+ if ($info['type'] == 'decimal') $checks[] = 'decimal';
+ if ($info['type'] == 'number') $checks[] = 'number';
} elseif ($info['type'] == 'date') {
$v[] = 'size="8"';
$ret[] = sprintf('<input %s> ', implode(' ', $v));
$ret[] = sprintf('<img class="calendar" src="images/icons/calendar.gif" onclick="calendar(\'edit_%s\',event)" />',
$id, $id, $id);
+
+ $checks[] = 'date';
} elseif ($info['type'] == 'boolean' || $info['type'] == 'file') {
$v[] = 'type="'.($info['type']=='boolean'?'checkbox':'file').'"';
$ret[] = sprintf('<input %s>', implode(' ', $v));
if (array_key_exists('comment',$info))
$ret[] = sprintf('<span class="comment">%s</span>', $info['comment']);
$ret[] = '<br>';
+
+ if (count($checks))
+ $jscode[] = sprintf('form_check["%s"] = "%s";', $id, implode(',', $checks));
}
}