/*js for ALL new fields validation, best of valid8/mvregA */ /* change log: 18082004 new 25082004 full support for mult select/radio/checkbox 21102004 added type=hidden */ /* functions list: getType(htmlelem){ Field(name,mand,regexp,descr,prereq,prereg,min,max,msgerr,tab) { isMand() { isValid() { getValue() { validateFields(tab) {//template only genMessage(field) { setFocus(fieldname) { dateFormat(string) { toString( date ) { isValidDate( val ) { setBGColor(field) { resetBGColor(field) { blurfield() { */ /* var doBGColor == true: do errmsg input field bg color change var doOKCheck == true: do onblur ok/nok gif switching */ /*arry of Fields is "Fields"*/ var Fields = new Array(); var valueSep = '~';/*multi-value separator*/ var errmsg = ''; var num4 = /\d{4}/; var num5 = /\d{5}/; var num6 = /\d{6}/; var num11 = /\d{11}/; var alfaname = /^[a-zäöüß \.\-\']{2,}$/i; var alfanameaccent = /^[a-zäöüß\u00E1-\u0236 \.\-\']{2,}$/i; var alfaort = /^[a-zäöüß0-9 \.\-\/]{2,}$/i; var email = /^[a-z0-9\.\-\+_]+@[a-z0-9\.\-\+_]+\.[a-z0-9\.\-\+_]+$/i; var telefon = /^[0-9 \+\-\/\,]{5,}$/; var nonblank = /\S{3,}/; var egal = /.*/; var ancd = /[MW]\d{6}/; var scsn = /\d{16}|(\d{12}\*)/; var regexptime = /^(\d|[ 01]\d|2[0123]):[0-5][0-9]$/; function getType(htmlelem){/*helper function*/ var type = 'dummy'; with (htmlelem) { switch (type) { case 'text' : case 'textarea' : case 'hidden' : /*21102004*/ case 'file' : return type; case 'select-one' : case 'select-multiple' : return 'select'; case 'radio' : /*1-option radio/checkbox*/ case 'checkbox' : return '1'+type; case 'dummy' : /*n-options radio/checkbox*/ if (length>0) return htmlelem[0].type; else return ''; default : return ''; }/*switch*/ }/*with*/ } function Field(name,mand,regexp,descr,prereq,prereg,min,max,msgerr,tab) {/*constructor*/ this.name = name;/*HTML field name*/ this.mand = mand;/*true/false*/ this.regexp = regexp;/*RegExp,/pz/,/date/*/ this.descr = descr;/*String, short description(field label)*/ this.prereq = prereq;/*String, name of prereq Field*/ this.prereg = prereg;/*RegExp for prereq, isMand only if satisfied*/ this.min = min; this.max = max; this.msgerr = msgerr;/*String, long error msg*/ this.tab = tab;/*String, name of tab if tabbed form, fi '03'*/ var htmlelement = self.document.forms[0].elements[name]; this.type = getType(htmlelement); this.elem = new Array(); switch (this.type) {/*put array -> array, non-array -> [0]*/ case 'text' : case 'textarea' : case 'hidden' : /*21102004*/ case 'select' : case 'file' : this.elem[0] = htmlelement; break; case '1radio' : case '1checkbox' : this.elem[0] = htmlelement; this.type = this.type.substr(1);/*remove 1*/ break; case 'radio' : case 'checkbox' : this.elem = htmlelement; break; default : this.elem[0] = null; break; }/*switch*/ this.isMand = isMand; this.isValid = isValid; this.getValue = getValue; } function isMand() {/*if prereq&&prereg exist, test*/ with (this){ var pre = (prereq&&prereg) ? prereg.test(Fields[prereq].getValue()) : true; return mand && pre; }/*with*/ } function isValid() {/*doesn't check prereq/prereg!*/ with (this){ var value = getValue(); if (regexp.source=='pz') { if (name=='PZ') return (value==calcPrufZeichen()); else return (value==calcPrufZeichen(null,'1')); } if (regexp.source=='date') { if (dateFormat.isValid(value)) { if (min || max) { var match = dateFormat.regexp.exec(value); var dvalue = new Date(match[dateFormat.yearix],match[dateFormat.monthix]-1,match[dateFormat.dayix]); if ((min ? 0<=dvalue-min : true) && (max ? 0>=dvalue-max : true)) return true; }/*if min||max*/ else return true; }/*if isValid*/ }/*date*/ else if (regexp.test(value)) { if (min || max) { if ((min ? min<=value : true) && (max ? max>=value : true)) return true} else return true; }/*if test*/ return false;/*all possib's*/ }/*with*/ } function getValue() { with (this) { switch (type) { case 'text' : case 'textarea' : case 'hidden' : /*21102004*/ case 'file' : return elem[0].value; case 'select' : var val = ''; for (var i=0;i0) ? valueSep : '') + elem[0].options[i].value; }/*for*/ return val; case 'radio' : case 'checkbox' : val = ''; for (var i=0;i0) ? valueSep : '') + elem[i].value; }/*for*/ return val; default : return ''; }/*switch*/ }/*with*/ } //function validateFields(tab) {/*only a template*/ ///* may be used by calling=application JS library */ // errmsg = ''; // for (var i in Fields) { // if (tab && tab!=Fields[i].tab) continue;/*field not on current tab*/ // if (Fields[i].isMand()) { // if (! Fields[i].isValid()) { // if (errmsg.length==0) var focus = Fields[i];/*remember 1st field in error*/ // genMessage(Fields[i]); // }/*if !Fields*/ // }/*if Fields[i]*/ // }/*for*/ // if (errmsg.length>0) {/*at least 1 error*/ // setHtml( 'msgtext2', errmsg, true); // if (focus.tab!=null) setTab(focus.tab);/*show tab of rememb'd field*/ // focus.elem[0].focus();/*set focus to field*/ // return false; // }/*if*/ // return true; //} function genMessage(field) {/*Field*/ with (field) { var msg = ''+descr +': '; if (msgerr) msg += msgerr; else msg += 'Einen gültigen Wert eingeben!'; var mintf = min==null ? false : true; if (mintf || max) { if (mintf) var mint = dateFormat.toString(min); /*works also for string*/ if (max) var maxt = dateFormat.toString(max); if (mintf && max) msg+=' (Minimum '+mint+', Maximum '+maxt+')'; else if (mintf) msg+=' (Minimum '+mint+')'; else if (max) msg+=' (Maximum '+maxt+')'; }/*if*/ if (doBGColor) { setBGColor(elem[0]); elem[0].onchange = resetBGColor; } errmsg += msg + '
'; }/*with*/ } function setFocus(fieldname) { /* can be called by form onLoad event or tab switching */ /* form.elements[0].focus(); don't work for hidden!*/ if (self.document.forms.length==0) return; var elem = self.document.forms[0].elements; if (fieldname) {elem[fieldname].focus();return;} for (var i=0; i 12) || (day < 1 || day > 31)) return false; if ((month==4 || month==6 || month==9 || month==11) && day==31) return false; if (month == 2) { var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); if (day>29 || (day==29 && !isleap)) return false; } return true; }/*this*/ } function setBGColor(field) {/*set bg color for invalid input field*/ if (!field) field = this; if (field.style) field.style.backgroundColor = '#ffcccc';/*dull pink*/ } function resetBGColor(field) {/*reset bg color for invalid input field*/ if (!field) field = this; if (field.style) field.style.backgroundColor = '#ffffff'; } function blurfield() { /* can be used as HTML field onBlur event; reset background color and image */ /* must be set like: elem['fld'].onblur = blurfield;*/ /* e ? e.target : event.srcElement; NS:IE*/ if (doBGColor) resetBGColor(this); var img = self.document.images[this.name]; /*alert(Fields[this.name].getValue()+' : '+Fields[this.name].isValid());*/ if (Fields[this.name].isValid()) { if (img) img.src = okgif.src; } else { if (img) img.src = nokgif.src; } }