PageSourceSearch

https://www.eahotelvictoria.cz/cms/js/check_form.js?1519809261

js eahotelvictoria.cz collected 2026-10-08 22:55:29 UTC 21,181 bytes, 629 lines download raw bytes

1/*
2checkForm (version 3.3) by Riki "Fczbkk" Fridrich, 2003 - 2004
3http://www.fczbkk.com/, mailto:[email protected]
4
5Tento skript mozes volne pouzit a modifikovat bez povolenia.
6Budem rad, ak mi o tom das vediet, pripadne mi posles URL stranky, kde
7ho pouzivas. Ak sa ti podari ho nejako vylepsit, rozsirit alebo v nom
8najdes a opravis nejaku chybu, budem ti vdacny, ak ma o tom budes informovat.
9
10Aktualnu verziu tohto skriptu vzdy najdes na adrese:
11http://www.fczbkk.com/js/check_form/
12
13Pozadovane kniznice:
14- dom                        http://www.fczbkk.com/js/dom/
15
16Dakujem PPl za pomoc pri testovani, ladeni a hlavne za regExp-y pre e-mail a url.
17
18*/
19
20checkForm = {
21    invalidMsg            : "",
22    errorMsg            : "\n- %err",
23    errors                : [],
24
25    invalidClass        : "invalid",
26    requiredClass        : "required",
27    outsideInvalidClass    : "outsideInvalid",
28
29    fieldType            : [],
30    defaultValue        : [],
31
32    extChckObj: {}, // jmeno objektu s externi testovaci funkci, ktera muze otestovat logicnost zadanych dat
33
34    // inicializacia skriptu
35    init : function () {
36    if (lang) {
37      switch (lang) {
38        case 'cz':
39          checkForm.invalidMsg = 'Formulář není vyplněn správně.\n\nProsím opravte:%err';
40          break;
41        case 'sk':
42          checkForm.invalidMsg = 'Formulár nie je správne vyplnený.\n\nProsím, opravte:%err';
43          break;
44        case 'pl':
45          checkForm.invalidMsg = 'Przepraszamy, przed wysłaniem należy wypełnić wymagane pola oznaczone gwiazdką:%err';
46          break;
47        case 'hu':
48          checkForm.invalidMsg = 'Elnézést, az adatok nem lettek elmentve, kérem a hiányzó mezők kitöltését:%err';
49          break;
50        case 'at':
51        case 'de':
52          checkForm.invalidMsg = 'Das Formular wurde inkorrekt ausgefüllt\n\nBitte korrigieren Sie:%err';
53          break;
54        case 'es':
55          checkForm.invalidMsg = 'Lo sentimos pero este registro no puede ser guardado antes que sean rellenados los datos obligatorios:%err';
56          break;
57        case 'fr':
58          checkForm.invalidMsg = 'Remplissez le formulaire correctement, s\'il vous plaît:%err';
59          break;
60        case 'lt':
61          checkForm.invalidMsg = 'Forma užpildyta neteisingai:%err';
62          break;
63        case 'uk':
64          checkForm.invalidMsg = 'Анкета заполнена неправильно.\n\nПросьба исправить:%err';
65          break;
66        case 'ru':
67          checkForm.invalidMsg = 'форма была выполнена неправильно:%err';
68          break;
69        default:
70          checkForm.invalidMsg = 'The form was not filled in correctly\n\nPlease, correct:%err';
71      }
72    } else {
73      checkForm.invalidMsg = '%err';
74    }
75
76        // ak mame k dispozicii kniznice evt a cls a browser je standards-compliant, mozeme zacat
77        if (evt && cls && document.getElementById) {
78            // prejdeme vsetky formulare a najdeme v nich vsetky fieldy, zavesime potrebne eventy
79            var forms = document.getElementsByTagName("form");
80            for (var i = 0; i < forms.length; i++) {
81                evt.add(forms[i], "submit", checkForm.checkForm);
82                evt.add(forms[i], "reset", checkForm.checkForm);
83
84                var fields = checkForm.getFields(forms[i]);
85                for (var j = 0; j < fields.length; j++) {
86                    evt.add(fields[j], "blur", checkForm.checkField);
87                    evt.add(fields[j], "focus", checkForm.checkField);
88                    evt.add(fields[j], "change", checkForm.checkField);
89                    // kontrola pri onkeyup sposobuje problemy s nepristupnostou policka v niektorych prehliadacoch, ak obsahuje nespravnu hodnotu
90                    /*
91                    if ((fields[j].tagName.toLowerCase() == "input") && ((fields[j].type == "text") || (fields[j].type == "password"))) {
92                        evt.add(fields[j], "keyup", checkForm.checkField);
93                    }
94                    */
95                }
96
97                checkForm.checkForm(forms[i]);
98            }
99            return true;
100        }
101        return false;
102    },
103
104    // vrati pole obsahujuce vsetky polia, ktore budeme kontrolovat
105    getFields : function(frm) {
106        if (frm && frm.getElementsByTagName) {
107            var fields = [];
108
109            var inputs = frm.getElementsByTagName("input");
110            for (var i = 0; i < inputs.length; i++) {
111                if (
112                    inputs[i].type == "text" ||
113                    inputs[i].type == "hidden" ||
114                    inputs[i].type == "password" ||
115                    inputs[i].type == "file"
116                ) {
117                    fields[fields.length] = inputs[i];
118                }
119            }
120
121            var textareas = frm.getElementsByTagName("textarea");
122            for (var i = 0; i < textareas.length; i++) {
123                fields[fields.length] = textareas[i];
124            }
125
126            var selects = frm.getElementsByTagName("select");
127            for (var i = 0; i < selects.length; i++) {
128                fields[fields.length] = selects[i];
129            }
130            return fields;
131        }
132        return false;
133    },
134
135    // proveri validitu vsech policek a povoli nebo nepovoli submit
136    checkForm : function(frm) {
137        if (!frm || !frm.tagName || frm.tagName.toLowerCase() != "form") {
138            e = evt.fix(frm);
139            frm = e.target;
140        } else {
141            var e = false;
142        }
143
144        checkForm.errors = [];
145
146        var fields = checkForm.getFields(frm);
147        var fieldsOK = true;
148
149        for (var i = 0; i < fields.length; i++) {
150            fieldsOK = ((checkForm.checkField(fields[i]) == "valid") && fieldsOK) ? true : false;
151        }
152
153        // validita radio a checkboxu
154        fieldsOK = checkForm.checkPickFields(frm) && fieldsOK;
155
156        var formName = (typeof frm.attributes['name'] == 'undefined') ? null : (frm.attributes['name'] == null ? null: frm.attributes['name'].nodeValue);
157        if (fieldsOK) {
158            if (typeof checkForm.extChckObj[formName] != 'undefined' && checkForm.extChckObj[formName].init) { // pokud probehl init formulare, muze dojit k jeho otestovani
159                eval('var chckObj = ' + checkForm.extChckObj[formName].chck_function +';');
160                if (chckObj.chckFrm(frm)) {
161                    return true;
162                } else {
163                    if (e.preventDefault) {
164                        e.preventDefault();
165                    }
166                }
167            } else {
168                if (typeof checkForm.extChckObj[formName] != 'undefined' && !checkForm.extChckObj[formName].init) checkForm.extChckObj[formName].init = true; // nastavit priznak probehnuteho initu formulare
169                return true;
170            }
171        } else {
172            if (e && (e.type == "reset")) {
173                return;
174            }
175            if (e && (e.type == "submit")) {
176                var err = "";
177                for (var i = 0; i < checkForm.errors.length; i++) {
178                    err += checkForm.errorMsg.replace("%err", checkForm.errors[i]);
179                }
180                alert(checkForm.invalidMsg.replace("%err", err));
181                if (e.preventDefault) {
182                    e.preventDefault();
183                }
184            }
185        }
186        if (typeof checkForm.extChckObj[formName] != 'undefined' && !checkForm.extChckObj[formName].init) checkForm.extChckObj[formName].init = true; // nastavit priznak probehnuteho initu formulare
187
188        return false;
189    },
190
191    // preveri validitu policka a vrati "valid" alebo "invalid"
192    checkField : function(elm) {
193
194        if (!elm || !elm.tagName) {
195            var e = evt.fix(elm);
196            elm = e.target;
197        }
198
199        if (
200            elm &&
201            (
202                (elm.tagName.toLowerCase() == "input") ||
203                (elm.tagName.toLowerCase() == "select") ||
204                (elm.tagName.toLowerCase() == "textarea")
205            )
206        ) {
207            var fieldOK = true;
208            var outsideValidationOK = true;
209            var elmClasses = cls.get(elm);
210
211            // proiteruje jen elementy s tridou
212            for (var i = 0; i < elmClasses.length; i++) {
213
214                if (checkForm.fieldType[elmClasses[i]]) {
215
216                    var rule = checkForm.fieldType[elmClasses[i]];
217                    if (fieldOK && typeof(rule) == "string") {
218
219                        // pravidlo je string
220                        if (elm.value != "") {
221                            fieldOK = (elm.value.search(new RegExp("^([" + rule + "]){1,}$")) < 0) ? false : true;
222                        }
223
224                    } else if (fieldOK && ((typeof(rule) == "function") || (typeof(rule) == "object")) && rule.source) {
225                        // Mozilla vracia RegExpu typ "function", zatial co ostatne browsery "object"
226
227                        // pravidlo je regExp
228                        if (elm.value != "") {
229                            fieldOK = (elm.value.search(rule) < 0) ? false : true;
230                        }
231
232                    } else if (fieldOK && (typeof(rule) == "function") && rule.prototype) {
233
234                        // pravidlo je funkcia
235                        fieldOK = rule(e, elm);
236
237                    }
238                }
239
240                /* default value
241                if (e && checkForm.defaultValue[elmClasses[i]]) {
242                    var val = checkForm.defaultValue[elmClasses[i]];
243                    if ((e.type == "focus") && (elm.value == "")) {
244                        elm.value = val;
245                    }
246                    if ((e.type == "blur") && (elm.value == val)) {
247                        elm.value = "";
248                    }
249                }
250                */
251            }
252
253
254            var outsideValidationOK = !cls.has(elm, checkForm.outsideInvalidClass);
255
256
257            if (fieldOK && outsideValidationOK) {
258                cls.remove(elm, "invalid");
259            } else {
260                cls.add(elm, "invalid");
261                checkForm.errors[checkForm.errors.length] = checkForm.getFieldErrorMsg(elm);
262                //(elm.checkFormErr) ? elm.checkFormErr : (elm.title) ? elm.title : (elm.name) ? elm.name : elm.toString();
263            }
264
265            return (fieldOK && outsideValidationOK) ? "valid" : "invali
265d";
266        }
267        return false;
268    },
269
270    // proveri validitu policek typu radio a checkbox a vrati "valid" nebo "invalid"
271    checkPickFields : function(frm) {
272    var result = true;
273        if (frm && frm.getElementsByTagName) {
274            var fields = [];
275            var requireds = {};
276
277        // nacteni
278            var inputs = frm.getElementsByTagName("input");
279
280            for (var i = 0; i < inputs.length; i++) {
281                var elm = inputs[i];
282
283                if (elm.type == "radio" || elm.type == "checkbox") {
284                    var elmClasses = cls.get(elm);
285                    for (var j = 0; j < elmClasses.length; j++) {
286                        if (elmClasses[j] != 'required') continue;
287                        fields[fields.length] = elm;
288                        var title = elm.name;
289                        if (elm.title) {
290                          title = elm.title;
291                        }
292                        requireds[elm.name] = [false, title];
293                    }
294                }
295            }
296
297      // kontrola
298      if (fields.length) {
299
300        for(name in requireds) {
301          for (var i = 0; i < fields.length; i++) {
302            if (fields[i].name != name) continue;
303            if (fields[i].checked && !requireds[name][0]) {
304              requireds[name][0] = true;
305              break;
306            }
307          }
308          if (!requireds[name][0]) {
309            result = false;
310            checkForm.errors[checkForm.errors.length] = requireds[name][1];
311            //break;
312          }
313        }
314      }
315    }
316        return result;
317  },
318
319    // prida novy typ policka
320    addFieldType : function(cls, rule, defaultValue) {
321        if (cls && (rule || defaultValue)) {
322            if (rule) {
323                checkForm.fieldType[cls] = rule;
324            }
325            if (defaultValue) {
326                checkForm.defaultValue[cls] = defaultValue;
327            }
328            return true;
329        }
330        return false;
331    },
332
333    getFieldErrorMsg : function(elm) {
334        if (elm) {
335            if (elm.checkFormErrorMsg) {
336                return elm.checkFormErrorMsg;
337            }
338            if (elm.title) {
339                return elm.title;
340            }
341            if (elm.id) {
342                var labels = document.getElementsByTagName("label");
343                for (var i = 0; i < labels.length; i++) {
344                    if (labels[i].attributes["for"] && (labels[i].attributes["for"].value == elm.id)) {
345                        // Opera nezvlada atribut "for"
346                        var str = checkForm.getNodeText(labels[i]);
347                        return str;
348                    }
349                }
350                return elm.id;
351            }
352            if (elm.name) {
353                return elm.name;
354            }
355            return elm.toString();
356        }
357        return false;
358    },
359
360    getNodeText : function(node) {
361        var str = "";
362        if (node && node.hasChildNodes()) {
363            for (var i = 0; i < node.childNodes.length; i++) {
364                // TODO: skladanie toho stringu treba urobit nejak systemovejsie a prehladnejsie
365                str += (node.childNodes[i].nodeType == 3) ? node.childNodes[i].nodeValue : checkForm.getNodeText(node.childNodes[i]);
366                if ((node.childNodes[i].nodeType == 1) && (node.childNodes[i].tagName.toLowerCase() == "img") && (node.childNodes[i].attributes["alt"])) {
367                    str += node.childNodes[i].attributes["alt"].value;
368                }
369            }
370        }
371        return str;
372    }
373
374}
375
376/* basic field types */
377
378// required field
379checkForm.addFieldType(
380    "required",
381    function(evt, elm) {
382        if (elm) {
383            if (elm.tagName.toLowerCase() == "select") {
384                return elm.selectedIndex ? true : false;
385            } else {
386                return (elm.value.search(/\S/) < 0) ? false : true;
387            }
388        }
389        return false;
390    }
391);
392
393// numbers only
394checkForm.addFieldType(
395    "numbers",
396    "0123456789"
397);
398
399// float numbers
400checkForm.addFieldType(
401    "floatnumbers",
402    new RegExp("^[0-9]+[,\.]{0,1}[0-9]*$")
403);
404
405// IDs - numbers divided by space
406checkForm.addFieldType(
407    "ids",
408    new RegExp("^[0-9 ]{1,}$")
409);
410
411// safe characters (alphanumeric, numbers and underscore)
412checkForm.addFieldType(
413    "safeChars",
414    new RegExp("^[a-zA-Z0-9_]{1,}$")
415);
416
417// safe characters (alphanumeric, numbers, underscore, dash and point)
418checkForm.addFieldType(
419    "safeFilename",
420    new RegExp("^[a-z0-9_\.-]+$")
421);
422
423// date
424
425// jednoducha kontrola pomocou regExp
426/*
427checkForm.addFieldType(
428    "date",                        // in format (D)D.(M)M.YYYY
429    new RegExp("^[0-9]{1,2}[.][0-9]{1,2}[.][0-9]{4}$")
430);
431*/
432
433// komplexnejsia kontrola pomocou funkcie (pocty dni v mesiaci, prestupne roky a pod.)
434checkForm.addFieldType(
435    "date",
436    function (evt, elm) {
437        if (!elm.value) {return true;}
438
439        var date_format = null;
440        if (elm.value.indexOf('.') != -1) {
441            var date_format = new RegExp("^[0-9]{1,2}[.][0-9]{1,2}[.][0-9]{4}$")
442            var date = elm.value.split(".");
443
444        } else if (elm.value.indexOf('-') != -1) {
445            var date_format = new RegExp("^[0-9]{4}[\-][0-9]{1,2}[\-][0-9]{1,2}$")
446            var date = elm.value.split("-");
447            date.reverse();
448        }
449
450        if (!date_format) { return false; }
451        if (!date_format.test(elm.value)) { return false; }
452
453        var day = date[0];
454        var month = date[1];
455        var year = date[2];
456        if (!isNaN(day) && !isNaN(month) && !isNaN(year)) {
457            // mesiac
458            if ((month > 12) || (month < 1)) {return false;}
459
460            // dni
461            if (day < 1) {return false;}
462
463            var maxDays = 31;
464            if (month == 2) {maxDays = (year%4 == 0) ? 29 : 28;} // kontrola prestupneho roku
465            if ((month == 4) || (month == 6) || (month == 9) || (month == 11)) {maxDays = 30;}
466
467            if (day > maxDays) {return false;}
468
469            return true;
470        }
471        return false;
472    }
473);
474
475// URL
476checkForm.addFieldType(
477    "url",
478    new RegExp("^\\w+://(([\\w\\+\\.\\-]+\\b)(:\\w+)@)?([/\\w\\+\\.\\-]+\\b)(\/{1})?(\\?[\\w\\+\\.\\-/;\\&@=]+\\b)?(#[\\w\\-%]+\\b)?$"),
479    //   protokol^      ^user       password^       ^server   konc. slash^       ^parametry (?)                 ^relativni odkaz (#)
480    //new RegExp("^[http|https|ftp]:\/\/[a-zA-Z0-9]+([-_\.]?[a-zA-Z0-9])*\.[a-zA-Z]{2,4}(\/{1}[-_~&=\?\.a-z0-9]*)*$"),
481    "http://"
482);
483
484// e-mail
485checkForm.addFieldType(
486    "email",
487    new RegExp("^([\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\{\\}\\|\\~]+)((\\.){1}[\\w\\!\\#\\$\\%\\&\\'\\*\\+\\-\\/\\=\\?\\^\\{\\}\\|\\~]+)*@[\\w\\!\\#\\$\\%\\&\\*\\+\\-\\/\\=\\?\\^\\{\\}\\|\\~]+((\\.){1}[\\w\\!\\#\\$\\%\\&\\*\\+\\-\\/\\=\\?\\^\\{\\}\\|\\~]+)+$")
488    //new RegExp("^[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+@[a-z0-9]+[a-z0-9\._-]*[a-z0-9]+\.[a-z]{2,4}$")
489    //new RegExp("^[a-zA-Z0-9]+[a-zA-Z0-9\._-]*[a-zA-Z0-9]+@[a-zA-Z0-9]+[a-zA-Z0-9\._-]*[a-zA-Z0-9]+\.[a-zA-Z]{2,4}$")
490);
491
492// zipcode
493checkForm.addFieldType(
494    "zipcode",
495    new RegExp("^[0-9]{3}( )*[0-9]{2}$")
496);
497
498// zipcode
499checkForm.addFieldType(
500    "zipcodeSpaces",
501  function (evt, elm) {
502        var v = elm.value;
503        if (!v) return true;
504        v = v.replace(/[ \t]/g, '');
505        var format = new RegExp("^[0-9]{5}$");
506        if (format.test(v)) {
507          return true;
508        }
509        return false;
510    }
511);
512
513// dic EU
514checkForm.addFieldType(
515    "dicEU",
516    function (evt, elm) {
517        var v = elm.value.replace(' ', '');
518        if (!v) {return true;}
519        var dic = [
520          '^ATU[0-9]{8}$',
521          '^BE[01][0-9]{9}$',
522          '^BG[0-9]{9,10}$',
523          '^CY[0-9]{8}[A-Z]$',
524          '^CZ[0-9]{8,10}$',
525          '^DE[0-9]{9}$',
526          '^DK[0-9]{2} [0-9]{2} [0-9]{2} [0-9]{2}$',
527          '^DK[0-9]{8}$',  // pro jistotu, kdyby to Danove nepsali jen s mezerami (viz vyse)
528          '^EE[0-9]{9}$',
529          '^EL[0-9]{9}$',
530          '^ES[A-Z0-9][0-9]{8}$', '^ES[0-9]{8}[A-Z0-9]$', '^ES[A-Z][0-9]{7}[A-Z]$',
531          '^FI[0-9]{8}$',
532          '^FR[A-Z0-9]{2} [0-9]{9}$',
533          '^FR[A-Z0-9]{2}[0-9]{9}$', // pro jistotu, kdyby to Francouzi nepsali jen s mezerou (viz vyse)
534          '^GB[0-9]{3} [0-9]{4} [0-9]{2}$', '^GB[0-9]{3} [0-9]{4} [0-9]{2} [0-9]{3}$', '^GBGD[0-9]{3}$', '^GBHA[5-9][0-9]{2}$',
535          '^GB[0-9]{9}$', '^GB[0-9]{12}$',   // pro jistotu, kdyby to Britove nepsali jen s mezerami (viz vyse)
536          '^HR[0-9]{11}$',
537          '^HU[0-9]{8}$',
538          '^IE[0-9]{7}[A-Z][W]{0,1}$', '^IE[0-9][0-9A-Z][0-9]{5}[A-Z]$',
539          '^IT[0-9]{11}$',
540          '^LT[0-9]{9}$', '^LT[0-9]{12}$',
541          '^LU[0-9]{8}$',
542          '^LV[0-9]{11}$',
543          '^MT[0-9]{8}$',
544          '^NL[0-9]{9}B[0-9]{2}$',
545          '^PL[0-9]{10}$',
546          '^PT[0-9]{9}$',
547          '^RO[0-9]{2,10}$',
548          '^SE[0-9]{12}$',
549          '^SI[0-9]{8}$',
550          '^SK[0-9]{10}$'
551        ];
552        for (var i = 0; i < dic.length; i++) {
553          var dic_format = new RegExp(dic[i]);
554          if (dic_format.test(v)) {
555            return true;
556          }
557        }
558        return false;
559    }
560);
561
562// obecne telefonni cislo
563checkForm.addFieldType(
564    "phoneGeneral",
565    function (evt, elm) {
566        var v = elm.value;
567            if (!v) return true;
568        v = v.replace(/ /g, '');
569        var format = new RegExp("^\\+[0-9]{2,15}$");
570        if (format.test(v)) {
571          return true;
572        }
573        return false;
574    }
575);
576
577// regular expression
578checkForm.addFieldType(
579    "checkRegexp",
580    function (evt, elm) {
581      var v = elm.value;
582      if (!v) return true;
583      var reg_exp = elm.getAttribute("data-regexp");
584      if (!reg_exp) return true;
585      var format = new RegExp(reg_exp);
586      if (format.test(v)) {
587        return true;
588      }
589      return false;
590    }
591);
592
593// Luhnův algoritmus pro kontrolu čísla platební karty
594checkForm.addFieldType(
595    "cardNumber",
596    function (evt, elm) {
597        var v = elm.value;
598            if (!v) return true;
599
600        if (/[^\d\- ]+/.test(v)) return false;
601
602        var nCheck = 0, nDigit = 0, bEven = false;
603        v = v.replace(/\D/g, "");
604
605        for (var n = v.length - 1; n >= 0; n--) {
606          var cDigit = v.charAt(n),
607              nDigit = parseInt(cDigit, 10);
608
609          if (bEven) {
610            if ((nDigit *= 2) > 9) nDigit -= 9;
611          }
612
613          nCheck += nDigit;
614          bEven = !bEven;
615        }
616
617        return (nCheck % 10) == 0;
618    }
619);
620
621// zavolanie inicializacie checkForm-u pri zavedeni dokumentu
622if (typeof jQuery == 'undefined') {
623  evt.add(window, "load", checkForm.init);
624}
625else {
626  $(document).ready(function() {
627    checkForm.init();
628  });
629}

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.