/// /// /// /// /** * Version: 1.0.0.6 * Build Date: January 20 2015 * Copyright (c) 2006-2015 * License: Licensed under The MIT License. */ var sabis = this.sabis ? this.sabis : {}; sabis.validator = { version: "1.0.0.9", createDate: "May 01 2012", modifiedDate: "June 06 2016", groups: {}, resources: {}, fields: {}, init: function () { var _ = sabis.validator; for (i in _.groups) { var group = _.groups[i]; var form = $("#" + group.Form); var d = form.data("groups"); if (!defined(d)) { d = {}; } d[group.id] = group; form.data("groups", d); form.data("_validate", true); var form = $("#" + group["Form"]); if (!form.attr("ajax")) form.bind("submit", _.validateForm); group.fields = []; } $(".lw-validate").each(function () { _.initField($(this)); }); }, disableFutureSubmittion: function (form) { form.data("submitted", true); form.find("input[type=submit]").addClass("submitted"); form.find("button[type=submit]").addClass("submitted"); }, enableFutureSubmittion: function (form) { form.data("submitted", null); form.find("input[type=submit]").removeClass("submitted"); form.find("button[type=submit]").removeClass("submitted"); }, validateForm: function (e, form, group) { var _ = sabis.validator; var form = form ? form : $(this); form.data("validated", null); /* if (isOk(form.data("submitted")) && form.data("submitted") == true) return false; else { _.disableFutureSubmittion(form); } */ try { var cKeditors = form.find("textarea.ckeditor"); cKeditors.each(function () { this.value = CKEDITOR.instances[this.id].getSnapshot(); }); } catch (e) { } var groups = form.data("groups"); var summary = [_.resources.PleaseFix]; var validated = true; for (i in groups) { if (isOk(group)) { var temp = i.split(":"); if (temp[temp.length - 1] != group) continue; } var group = groups[i]; var fields = group.fields; for (var j in fields) { var temp = _.validate(fields[j]); _.downlightField(fields[j]); if (!temp.validated) { summary.push(temp.message); validated = false; _.hilightField(fields[j], temp.message, false); } } var html = _.getHtmlMessage(summary); if (!validated && group["SummaryMessageClientID"]) { $("#" + group["SummaryMessageClientID"]).html(html); } if (!validated && group["AlertErrorSummary"]) { sabis.alert(html, sabis.siteName, "OK", "validation-error", function () { _.enableFutureSubmittion(form); }); } } form.data("validated", validated); return validated; }, validateGroup: function (e, form, groupId) { var _ = sabis.validator; var form = form ? form : $(this); form.data("validated", null); try { var cKeditors = form.find("textarea.ckeditor"); cKeditors.each(function () { this.value = CKEDITOR.instances[this.id].getSnapshot(); }); } catch (e) { } var groups = form.data("groups"); var summary = new Array(); summary[0] = [_.resources.PleaseFix]; var validated = true; var thisGroup = groups[groupId]; if (!thisGroup) { var arr = form.attr("name").split(":"); arr.pop(); arr.push(groupId); thisGroup = groups[arr.join(":")]; } var gV = _.groupValidation(thisGroup, summary, validated, form); validated = gV[0]; var message = gV[1]; form.data("validated", validated); form.data("message", message); return validated; }, groupValidation: function (group, summary, validated, form) { var _ = sabis.validator; var fields = group.fields; $.each(fields, function (j) { var temp = _.validate(fields[j]); _.downlightField(fields[j]); if (!temp.validated) { summary.push(temp.message); validated = false; _.hilightField(fields[j], temp.message, false); } }); var html = _.getHtmlMessage(summary); if (!validated && group["SummaryMessageID"]) { $("#" + group["SummaryMessageID"]).html(html); } if (!validated && group["AlertErrorSummary"]) { sabis.alert(html, sabis.siteName, "OK", "validation-error", function () { _.enableFutureSubmittion(form); }); } return [validated, html]; }, getHtmlMessage: function (summary) { return "
" + summary.shift() + "
  • " + summary.join("
  • ") + "
"; }, checkEmptyField: function (field) { var _ = sabis.validator; var data = field.data("d"); var val = field.val(); if (isOk(val)) { return; } if (($.browser.msie) && ($.browser.version < 10)) { switch (field[0].type) { case "text": case "textarea": if (data["EmptyText"]) { field.val(data["EmptyText"]); field.addClass(data["EmptyClass"]); } break; case "password": var input; if (field.data("maskinput")) input = field.data("maskinput"); else { input = $(""); input.addClass(field[0].className); field.data("maskinput", input); input.val(data["EmptyText"]); input[0].className = field[0].className; input.addClass(data["EmptyClass"]); input.css("position", "absolute"); input.bind("focus click mousedown keydown", function () { input.css("display", "none"); setTimeout(function () { field[0].focus(); }, 50); }); $(field[0].parentNode).append(input); } input.css({ display: "block", width: field.width(), height: field.height(), top: field.position().top, left: field.position().left }); break; default: break; } } else { switch (field[0].type) { case "text": case "textarea": case "password": if (data["EmptyText"]) { field.addClass(data["EmptyClass"]); } break; default: break; } } }, initField: function (field) { var _ = sabis.validator; var data = {}; var attr = field.attr("data-lw-validate"); if (!isOk(attr)) attr = field.attr("validate"); if (!isOk(attr)) return; var arr = attr.split("&"); for (var i = 0; i < arr.length; i++) { if (arr[i].Trim() != "") { var temp = arr[i].Trim().split("="); if (temp.length == 2) { data[temp[0].Trim()] = temp[1].Trim(); } } } field.data("d", data); _.checkEmptyField(field); field.bind("focus click mousedown keydown", function () { field.removeClass(data["EmptyClass"]); var input = field.data("maskinput"); if (isOk(input)) { input.css("display", "none"); } }); field.bind("change blur", function () { var ret = sabis.validator.validate(field); if (!ret.validated) { _.hilightField(field, ret.message, true); } else { _.downlightField(field); } }); field.bind("blur", function () { _.checkEmptyField(field); }); _.fields[field.attr("id")] = field; if (_.groups[data["Group"]]) _.groups[data["Group"]].fields.push(field); }, hilightField: function (field, message, bubble) { var _ = sabis.validator; field.addClass("lw-not-validated"); if (_.groups[field.data("d")["Group"]] && _.groups[field.data("d")["Group"]].Bubble) { field.addClass("lw-bubble"); //if (bubble) // sabis.showTooltip(field, "red", message, 1500); //else // sabis.showTooltip(field, "red", message, 0, null, true); if (field.data("maskinput")) { field.data("maskinput").css("display", "none"); } } field.data("title", field.attr("title")); //field.attr("title", message); }, downlightField: function (field, message, bubble) { var _ = sabis.validator; field.removeClass("lw-not-validated"); field.removeClass("lw-bubble"); field.attr("title", field.data("title")); //sabis.deleteTooltip(field); }, validate: function (field, data) { var _ = sabis.validator; var data = data ? data : field.data("d"); var value = field.val(); if (typeof value == "string") value = value.trim(); if (isOk(data["ValidateWith"])) { var validateWith = $(field[0].form).find("#" + data["ValidateWith"]); var compareVal = validateWith.val(); if (validateWith[0].type == "checkbox" || validateWith[0].type == "radio") { compareVal = validateWith[0].checked ? compareVal : null; } var validateWithValue = data["ValidateWithValue"]; if (!data["ValidateWithCondition"]) data["ValidateWithCondition"] = "="; switch (data["ValidateWithCondition"]) { case ".": if (!isOk(compareVal)) return { validated: true }; break; case "<>": if (compareVal == validateWithValue) return { validated: true }; break; default: if (compare(compareVal, validateWithValue, data["DataType"]) != data["ValidateWithCondition"]) return { validated: true }; break; } } if (isOk(data.Required) && data.Required.toLowerCase() == "true") { var validated = false; switch (data["DataType"]) { case "CheckBox": validated = field[0].checked; break; case "RadioList": var name = field.attr("name"); var radios = $("input[name='" + name + "']"); radios.each(function () { if (this.checked) { validated = true; return false; } }); break; case "HTMLSelect": validated = (field[0].selectedIndex == 0 && field[0].options[0].value.trim() != "") || field[0].selectedIndex > 0; break; default: validated = value.length > 0; break; } if (!validated) return new _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources.Required.Format(data.DisplayName)); } if (isOk(value) || isOk(data["Min"]) || isOk(data["Max"])) { switch (data["DataType"]) { case "Number": case "Decimal": case "Integer": var pat = /^-?\d*(\.\d+)?$/; if (pat.test(value)) { if ((isOk(data["Min"]) && parseFloat(value) < parseFloat(data["Min"])) || (isOk(data["Max"]) && parseFloat(value) > parseFloat(data["Max"]))) { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Range_Number"].Format(data.DisplayName, data["Min"], data["Max"])); } } else { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources[data["DataType"]].Format(data.DisplayName)); } break; case "Integer": var pat = /^\d*$/; if (pat.test(value)) { if ((isOk(data["Min"]) && parseFloat(value) < parseFloat(data["Min"])) || (isOk(data["Max"]) && parseFloat(value) > parseFloat(data["Max"]))) { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Range_Number"].Format(data.DisplayName, data["Min"], data["Max"])); } } else { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources[data["DataType"]].Format(data.DisplayName)); } break; case "Date": var dateValue = Date.parse(value); if (!isNaN(dateValue)) { if (isOk(data["Min"]) && dateValue < Date.parse(data["Min"])) { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Range_Date"].Format(data.DisplayName, data["Min"], data["Max"])); } if (isOk(data["Max"]) && dateValue > Date.parse(data["Max"])) { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Range_Date"].Format(data.DisplayName, data["Min"], data["Max"])); } } else { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources[data["DataType"]].Format(data.DisplayName)); } break; case "Email": //var pat = /^[a-z]([\.\-\_]{0,}([a-z_0-9]|[a-z_0-9]\.[a-z_0-9])*)+@([a-z0-9]|[a-z0-9][\.\-][a-z0-9])+\.[a-z]{2,}$/i; var pat = /^[a-z0-9]([\.\-\_]{0,}([a-z_0-9]|[a-z_0-9]\.[a-z_0-9])*)+@([a-z0-9]|[a-z0-9][\.\-][a-z0-9])+\.[a-z]{2,}$/i; if (!pat.test(value)) { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources[data["DataType"]].Format(data.DisplayName)); } break; case "Image": var pat = /\.((jpg)|(jpeg)|(bmp)|(gif)|(png))$/i; if (!pat.test(value)) { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources[data["DataType"]].Format(data.DisplayName)); } break; case "String": if (isOk(data["Min"]) && value.length < parseFloat(data["Min"])) { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Range_String"].Format(data.DisplayName, data["Min"], data["Max"])); } if (isOk(data["Max"]) && value.length > parseFloat(data["Max"])) { return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Range_String"].Format(data.DisplayName, data["Min"], data["Max"])); } break; default: break; } if (isOk(data["CompareTo"])) { var compareTo = $(field[0].form).find("#" + data["CompareTo"]); var compareVal = compareTo.val(); switch (data["CompareCondition"]) { case ">": if (compare(value, compareVal, data["DataType"]) != ">") return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Compare_GreaterThan"].Format(data.DisplayName, data.CompareToDisplayName)); break; case "<": if (compare(value, compareVal, data["DataType"]) != "<") return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Compare_LessThan"].Format(data.DisplayName, data.CompareToDisplayName)); break; default: if (compare(value, compareVal, data["DataType"]) != "=") return _.validateMessage(false, data.CustomMessage ? data.CustomMessage : _.resources["Compare_Equal"].Format(data.DisplayName, data.CompareToDisplayName)); break; } } } return { validated: true }; }, validateMessage: function (validated, message) { return { validated: validated, message: message }; } }; sabis.ajaxForms = { selector: "form[ajax=true]", forms: {}, init: function () { var _ = sabis.ajaxForms; _.forms = $(_.selector); _.forms.each(function () { var $this = $(this); if ($this.data("ajaxInit")) return; $this.data("ajaxInit", true); $this.bind("submit", _.submit); }); }, submit: function (e) { var form = $(this); if (form.data("alreadysubmitted")) { e.stopPropagation(); return false; } form.data("alreadysubmitted", true); //if (form.data("_validate") == true) sabis.validator.validateForm(e, form); var validated = form.data("validated"); if (isOk(validated)) { if (validated == false) { form.data("alreadysubmitted", false); return false; } } sabis.loader(form); var ajaxForm; function abort(e) { if (e.keyCode == 27) { ajaxForm.abort(); $(document.body).unbind("keyup", abort); } } // //alert(form.attr("AjaxCallback")); var callBack = form.attr("AjaxCallback"); var dataType = "json" || form.attr("DataType"); ajaxForm = form.ajaxSubmit({ data: { ajax: true }, cache: false, dataType: dataType, success: function (e) { //sabis.hideLoader(form); var ajaxCallBack = e.callBack && typeof [e.callBack] == "function" ? e.callBack : callBack; if (isOk(ajaxCallBack) && typeof window[ajaxCallBack] == "function") { window[ajaxCallBack](e); } }, error: function (e) { //sabis.hideLoader(form); if (e.status == 0) return; sabis.alert(e.responseText, sabis.siteName, "OK", "validation-error"); }, complete: function (e) { sabis.hideLoader(form); $(document.body).unbind("keyup", abort); form.data("alreadysubmitted", null); if (dataType != "json") { var ajaxCallBack = e.callBack && typeof [e.callBack] == "function" ? e.callBack : callBack; if (isOk(ajaxCallBack) && typeof window[ajaxCallBack] == "function") { window[ajaxCallBack](e); } } } }); $(document.body).bind("keyup", abort); return false; } };