/*Example: FormValid.init({ formId: 'FormFormularObsah', // id formulare prvkyId:'.prvekFormulare', // obal prvku pro zobrazeni chyby textChyby: { required: 'Tato položka je povinná.', email: 'Byl špatně zadán email.', url: 'Byla špatně zadána adresa.', number: 'Bylo špatně zadáno číslo.', date: 'Bylo špatně zadáno datum.', time: 'Byl špatně zadán čas.' }, e: event // povinny parametr priklady class pro validaci: valid-r-ema -> povinny prvek s kontrolou emailu valid-url -> nepovinny prvek s kontrolou url valid-r -> povinny prvek }); */ (function(){ var FormValid = this.FormValid = {}; var args = {}, fields = []; var init = FormValid.init = function (obj){ core.zkopirujObjekt(obj, args); $('#'+obj.formId).find('.errmsg').remove(); fields = core.getElem(); fields = core.getClasses(); control.vyberKontroly(); }; var view = { zobrazChybu: function(hlaska, element){ var chyby = $(element).parents(args.prvkyId).children(".errmsg"); if($(chyby[0]).text() != hlaska) { // zobrazi chybu pouze pokud uz nebyla zobrazena $(element).parents(args.prvkyId).append('
'+hlaska+'
'); } var idElement = $(element).attr('id'); if(idElement != "") { document.getElementById(idElement).scrollIntoView(); } if(args.e.preventDefault) { args.e.preventDefault(); } else { // ie args.e.returnValue = false; } FormValid.error = true; } }; var control = { vyberKontroly: function(){ var nameTag; for(var param in fields) { nameTag = fields[param]['obj'].tagName; if(nameTag == 'INPUT') { var typeTag = $(fields[param]['obj']).attr('type'); if(typeTag == 'text') { // // variables - rozbiti validace do pole, hodnota prvku a kontrola jestli ma validovat var validita = fields[param]['class'].split("-"), value = $(fields[param]['obj']).val(), kontrolaValid = true, required; // Zjisti jestli je required, pokud ano, tak ho zkontroluj, pokud ne, tak proved validitu. // Pokud je required i validita, tak proved prvni required. // Pokud je pouze validita, neni required a nic nevyplnil, tak nedelej validitu. if(validita.length == 3) { // valid-r-xxx var kontroluj = validita[2]; if(kontroluj == 'tim') { var valueHod = $(fields[param]['obj']).val(); var valueMin = $(fields[param]['obj']).next().next().val(); required = this.required.time(valueHod, valueMin); // volani required } else { required = this.required.text(value); // volani required } if(!required) { view.zobrazChybu(args.textChyby.required, fields[param]['obj']); } } else { // valid-xxx if(validita[1] == 'r') { // valid-r required = this.required.text(value); // volani required if(!required) { view.zobrazChybu(args.textChyby.required, fields[param]['obj']); } } else { // valid-xxx var kontroluj = validita[1]; if(kontroluj == 'tim') { var valueHod = $(fields[param]['obj']).val(); var valueMin = $(fields[param]['obj']).next().next().val(); if(valueHod.length == 0 && valueMin.length == 0) { kontrolaValid = false; } } else { if(value.length == 0){ // jestlize je delka 0, tak nekontroluj validitu prvku kontrolaValid = false; } } } } // validita if(kontroluj && kontrolaValid) { switch(kontroluj) { case 'ema': if (this.validita.email(value) == false) { view.zobrazChybu(args.textChyby.email, fields[param]['obj']); } break; case 'url': if (this.validita.url(value) == false) { view.zobrazChybu(args.textChyby.url, fields[param]['obj']); } break; case 'num': if (this.validita.number(value) == false) { view.zobrazChybu(args.textChyby.number, fields[param]['obj']); } break; case 'dat': if (this.validita.date(value) == false) { view.zobrazChybu(args.textChyby.date, fields[param]['obj']); } break; case 'tim': value = valueHod+':'+valueMin; if (this.validita.time(value) == false) { view.zobrazChybu(args.textChyby.time, fields[param]['obj']); } break; } } kontroluj = ""; // vycisti promennou "kontroluj" pro inputy v radku } else if(typeTag == 'radio'||typeTag == 'checkbox') { // || var nameAttr = $(fields[param]['obj']).attr('name'); var required = this.required.radioCheckbox( $('input[name="'+nameAttr+'"]') ); if(!required) { view.zobrazChybu(args.textChyby.required, fields[param]['obj']); } } } else if(nameTag == 'SELECT') { // var option = fields[param]['obj'].getElementsByTagName('option'), value; for(var i = 0; i var required = this.required.text($(fields[param]['obj']).val()); // volani required if(!required) { view.zobrazChybu(args.textChyby.required, fields[param]['obj']); } } } }, validita: { email: function(value) { var regObj = new RegExp('^([a-zA-Z0-9_-]+[.])*[a-zA-Z0-9_-]+@([a-zA-Z0-9_-]+[.])*[a-zA-Z0-9_-]+[.][a-zA-Z0-9]{2,9}$'); return value.match(regObj) ? true : false; }, url: function(value) { var regObj = new RegExp('^(((h|H)(t|T))(t|T)(p|P)((s|S)?)\\:\\/\\/)?((www|WWW)+\\.)+(([0-9]{1,3}){3}[0-9]{1,3}\\.|([\\w!~*\'()-]+\\.)*([\\w^-][\\w-]{0,61})?[\\w]\\.[a-zA-Z]{2,6})(:[0-9]{1,4})?((\\/*)|(\\/+[\\w!~*\'().;?:@&=+$,%#-]+)+\\/*)$'); return value.match(regObj) ? true : false; }, number: function(value) { var regObj = new RegExp('^[0-9]+$'); return value.match(regObj) ? true : false; }, date: function(value) { var regObj = new RegExp('^(0?[1-9]|[12][0-9]|3[01])[\.](0?[1-9]{1}|1[0-2])[\.]((2)\\d\\d\\d)$'); return value.match(regObj) ? true : false; }, time: function(value) { var regObj = new RegExp('^(0?[0-9]|[1][0-9]|2[0-3])[\:](0?[0-9]|[1-5][0-9])$'); return value.match(regObj) ? true : false; } }, required: { text: function(value) { // text + textarea if(value.length == 0) { return false; } else { return true; } }, radioCheckbox: function(arr) { for(var i = 0; i