/*Example:
FormValid.init({
formId: 'FormFormularObsah', // id formulare
prvkyId:'.prvekFormulare', // obal prvku pro zobrazeni chyby
textChyby: {
required: 'Tato poloka 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