{"version":3,"sources":["validation.js"],"names":["topLayerPromo","$wrapper","$","length","get","initialized","code","data","cookie","addClass","on","e","preventDefault","expires","removeClass","stickyHeader","header","headerHeight","height","regionHeaderHeight","spacer","lastScrollTop","delta","window","scroll","_","throttle","st","this","scrollTop","Math","abs","menuEffect","didScroll","setInterval","document","initCanvasMenu","isTouch","resize","width","isMoved","detach","prependTo","show","insertAfter","appendTo","hide","toggleMobileMenu","setTimeout","fadeIn","initCallMeBack","click","url","fancybox","open","src","type","toolbar","smallBtn","hash","baseClass","afterShow","contents","find","Vendd","Scripts","load","debounce"],"mappings":"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","file":"header.js","sourcesContent":["(function ($) {\n 'use strict';\n\n var ValidationEngine = (function () {\n var self = this, base,\n field, validation, fields = [],\n firstTime = true;\n\n self.processFields = function (options) {\n\n $.each(options, function (k, v) {\n field = {};\n\n if (typeof (v) === 'object') {\n field.selector = k;\n field.enabled = v.enabled !== undefined ? v.enabled : true\n\n delete v.enabled; // could be done better :(\n\n self.processValidations(v);\n self.bindValidations(field);\n fields.push(field);\n } else {\n console.error('ValidationEngine: ' + k + ' must be of type object. Not ' + typeof (v) + '.');\n };\n });\n };\n\n self.processValidations = function (validations) {\n field.validations = {};\n\n $.each(validations, function (k, v) {\n field.validations[k] = {};\n\n if (typeof (v) === 'object') {\n $.each(v, function (key, value) {\n field.validations[k][key] = value;\n });\n } else {\n field.validations[k].validator = v;\n };\n });\n };\n\n self.bindValidations = function (f) {\n f.$elem = $('*[name=\"' + f.selector + '\"]', base.$elem);\n\n if (f.$elem.length !== 1) {\n console.error('ValidationEngine: None or multiple results for selector: \"' + f.selector + '\".');\n };\n };\n\n self.getValue = function (f) {\n var tag = self.getTagName(f);\n\n return tag === 'select' || tag === 'textarea'\n ? f.$elem.val()\n : tag === 'input'\n ? f.$elem.attr('type') === 'text' || f.$elem.attr('type') === 'password' || f.$elem.attr('type') === 'date' || f.$elem.attr('type') === 'tel'\n ? f.$elem.val()\n : f.$elem.attr('type') === 'radio'\n ? $('input[name=' + f.$elem.attr('name') + ']:checked').val()\n : f.$elem.attr('type') === 'checkbox'\n ? f.$elem.is(':checked')\n : null\n : null;\n };\n\n self.getTagName = function (f) {\n return f.$elem.prop(\"tagName\").toLowerCase();\n };\n\n self.searchField = function (selector) {\n var field;\n\n $.each(fields, function (i, f) {\n if (f.selector === selector) {\n field = f;\n\n return false;\n };\n });\n\n return field;\n };\n\n self.validateField = function (f) {\n var result = true;\n\n $.each(f.validations, function (fn, opts) {\n if (fn === 'match') {\n var matchField = self.searchField(opts.matchField);\n\n if (matchField) {\n if (typeof (opts.beforeValidation) === 'function')\n opts.beforeValidation(f.$elem);\n\n if (opts.optional) {\n if ($.fn.validationEngine.validations.optional(self.getValue(f))) {\n if (!$.fn.validationEngine.validations[fn]\n .call(self, self.getValue(f), self.getValue(matchField), opts.config)) {\n\n result = opts.validator;\n };\n };\n } else {\n if (!$.fn.validationEngine.validations[fn]\n .call(self, self.getValue(f), self.getValue(matchField), opts.config)) {\n\n result = opts.validator;\n };\n };\n } else {\n console.error('ValidationEngine: MatchField was not found for match key : \"' + opts.matchField + '\".');\n };\n\n } else {\n if (typeof (opts.beforeValidation) === 'function')\n opts.beforeValidation(f.$elem);\n\n if (opts.optional) {\n if ($.fn.validationEngine.validations.optional(self.getValue(f))) {\n if (!$.fn.validationEngine.validations[fn]\n .call(self, self.getValue(f), opts.config)) {\n\n result = opts.validator;\n };\n };\n } else {\n if (!$.fn.validationEngine.validations[fn]\n .call(self, self.getValue(f), opts.config, f.$elem.get(0))) {\n\n result = opts.validator;\n };\n };\n };\n\n if (result !== true) {\n $.each(f.validations, function (f, o) {\n $('.' + o.validator, base.$elem).removeClass('error');\n if ($('.' + o.validator, base.$elem).closest('.form-row').length > 0) {\n $('.' + o.validator, base.$elem).closest('.form-row').removeClass('with-error');\n }\n });\n\n $('.' + result, base.$elem).addClass('error');\n\n if ($('.' + result, base.$elem).closest('.form-row').length > 0) {\n $('.' + result, base.$elem).closest('.form-row').addClass('with-error');\n }\n if (typeof (opts.afterValidation) === 'function')\n opts.afterValidation(f.$elem, result);\n\n return false;\n };\n });\n\n if (result === true) {\n $.each(f.validations, function (fn, opts) {\n $('.' + opts.validator, base.$elem).removeClass('error');\n\n if ($('.' + opts.validator, base.$elem).closest('.form-row').length > 0) {\n $('.' + opts.validator, base.$elem).closest('.form-row').removeClass('with-error');\n }\n if (typeof (opts.afterValidation) === 'function')\n opts.afterValidation(f.$elem, result);\n });\n }\n\n return result;\n };\n\n self.validateAll = function () {\n var result = true;\n\n $.each(fields, function (i, f) {\n if (f.enabled === false)\n return true;\n\n if (self.validateField(f) !== true)\n result = false;\n });\n\n return result;\n };\n\n return {\n init: function (options, elem) {\n base = this;\n\n base.$elem = $(elem);\n base.options = options;\n\n self.processFields(base.options);\n },\n\n reset: function () {\n firstTime = true;\n\n $.each(fields, function (i, f) {\n $.each(f.validations, function (j, v) {\n $('.' + v.validator, base.$elem).removeClass('error');\n if ($('.' + v.validator, base.$elem).closest('.form-row').length > 0) {\n $('.' + v.validator, base.$elem).closest('.form-row').removeClass('with-error');\n }\n });\n });\n },\n\n destroy: function () {\n base.$elem.removeData();\n\n\t\t\t\t/*\n\t\t\t\t * TODO: FIX THIS !!!!\n\t\t\t\t */\n\n base = undefined;\n self = undefined;\n },\n\n addField: function (options) {\n self.processFields(options);\n },\n\n addFields: function (options) {\n self.processFields(options);\n },\n\n removeField: function (f) {\n $.each(fields, function (i, item) {\n if (item.selector === f) {\n fields.splice(i, 1);\n\n return false;\n };\n });\n },\n\n removeFields: function (array) {\n $.each(array, function (i, f) {\n base.removeField(f);\n });\n },\n\n validateField: function (f) {\n if (f) {\n var field = self.searchField(f);\n\n if (field) {\n if (field.enabled)\n self.validateField(field);\n }\n }\n },\n\n enable: function (array) {\n $.each(array, function (i, key) {\n var f = self.searchField(key);\n\n if (f)\n f.enabled = true;\n else\n console.error('ValidationEngine: None fields found for key: \"' + key + '\".');\n });\n },\n\n disable: function (array) {\n $.each(array, function (i, key) {\n var f = self.searchField(key);\n\n if (f) {\n f.enabled = false;\n\n $.each(f.validations, function (f, o) {\n $('.' + o.validator, base.$elem).removeClass('error');\n if ($('.' + o.validator, base.$elem).closest('.form-row').length > 0) {\n $('.' + o.validator, base.$elem).closest('.form-row').removeClass('with-error');\n }\n });\n } else {\n console.error('ValidationEngine: None fields found for key: \"' + key + '\".');\n };\n });\n },\n\n validate: function (f) {\n if (f) {\n if (firstTime)\n return;\n\n var field = self.searchField(f);\n\n if (field) {\n if (field.enabled)\n self.validateField(field);\n };\n } else {\n if (firstTime)\n firstTime = false;\n\n return self.validateAll();\n };\n }\n };\n });\n\n $.fn.validationEngine = function (options) {\n return this.each(function () {\n var va;\n\n if ($(this).data(\"va-init\") === true) {\n return false;\n }\n\n $(this).data(\"va-init\", true);\n\n va = new ValidationEngine();\n va.init(options, this);\n\n $.data(this, \"validationEngine\", va);\n });\n };\n\n $.fn.validationEngine.validations = {\n optional: function (value) {\n if ($.trim(value).length === 0)\n return false;\n\n return true;\n },\n\n required: function (value) {\n if ($.trim(value).length > 0)\n return true;\n\n return false;\n },\n\n checkboxRequired: function (value) {\n\n return value;\n },\n\n isEmail: function (value) {\n var reg = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,20}|^$/i;\n\n return reg.test(value);\n },\n\n isNumeric: function (value) {\n var reg = /^\\d+$/;\n\n return reg.test(value);\n\n },\n\n isAlphaNumeric: function (value) {\n\n return true;\n },\n\n match: function (value1, value2) {\n\n return value1 === value2;\n },\n\n length: function () {\n var value = arguments[0], config = arguments[1], score;\n\n if (config && config.limit !== 'undefined')\n return value.length === config.limit;\n\n return false;\n },\n\n maxLength: function () {\n var value = arguments[0], config = arguments[1], score;\n\n if (config && config.limit !== 'undefined')\n return value.length <= config.limit;\n\n return false;\n },\n\n minLength: function () {\n var value = arguments[0], config = arguments[1], score;\n\n if (config && config.limit !== 'undefined')\n return value.length >= config.limit;\n\n return false;\n },\n\n validIBAN: function (value) {\n\n if ($.trim(value).length > 0) {\n\n var CODE_LENGTHS = {\n GR: 27\n\n //AD: 24, AE: 23, AT: 20, AZ: 28, BA: 20, BE: 16, BG: 22, BH: 22, BR: 29,\n //CH: 21, CR: 21, CY: 28, CZ: 24, DE: 22, DK: 18, DO: 28, EE: 20, ES: 24,\n //FI: 18, FO: 18, FR: 27, GB: 22, GI: 23, GL: 18, GR: 27, GT: 28, HR: 21,\n //HU: 28, IE: 22, IL: 23, IS: 26, IT: 27, JO: 30, KW: 30, KZ: 20, LB: 28,\n //LI: 21, LT: 20, LU: 20, LV: 21, MC: 27, MD: 24, ME: 22, MK: 19, MR: 27,\n //MT: 31, MU: 30, NL: 18, NO: 15, PK: 24, PL: 28, PS: 29, PT: 25, QA: 29,\n //RO: 24, RS: 22, SA: 24, SE: 24, SI: 19, SK: 24, SM: 27, TN: 24, TR: 26\n };\n\n var iban = String(value).toUpperCase().replace(/[^A-Z0-9]/g, ''), // keep only alphanumeric characters\n code = iban.match(/^([A-Z]{2})(\\d{2})([A-Z\\d]+)$/), // match and capture (1) the country code, (2) the check digits, and (3) the rest\n digits;\n\n // check syntax and length\n if (!code || iban.length !== CODE_LENGTHS[code[1]]) {\n return false;\n }\n\n // rearrange country code and check digits, and convert chars to ints\n digits = (code[3] + code[1] + code[2]).replace(/[A-Z]/g, function (letter) {\n return letter.charCodeAt(0) - 55;\n });\n\n var checksum = digits.slice(0, 2), fragment;\n for (var offset = 2; offset < digits.length; offset += 7) {\n fragment = String(checksum) + digits.substring(offset, offset + 7);\n checksum = parseInt(fragment, 10) % 97;\n }\n\n if (checksum == 1)\n return true;\n }\n\n return false;\n },\n\n isSocialSecurityNumber: function (value, parameters) {\n if (value.length === 0)\n return true;\n\n var isEleven = /^[0-9]{11}$/.test(value);\n var totalX = 0;\n for (var i = 0; i < 10; i++) {\n totalX += Number(value.substr(i, 1));\n }\n var isRuleX = totalX % 10 == value.substr(10, 1);\n var totalY1 = 0;\n var totalY2 = 0;\n for (var i = 0; i < 10; i += 2) {\n totalY1 += Number(value.substr(i, 1));\n }\n for (var i = 1; i < 10; i += 2) {\n totalY2 += Number(value.substr(i, 1));\n }\n var isRuleY = ((totalY1 * 7) - totalY2) % 10 == value.substr(9, 0);\n var isRuleFirstDigit = value.substr(0, 1) != '0';\n\n return isEleven && isRuleX && isRuleY && isRuleFirstDigit;\n },\n\n isGreekTaxIdentifier: function (taxIdentifier) {\n\n if (taxIdentifier.length === 0)\n return true;\n\n if (!isNaN(parseInt(taxIdentifier)) && taxIdentifier.length === 9) {\n var result = 0;\n var arrTaxId = taxIdentifier.split(\"\").map(function (item) {\n return parseInt(item);\n });\n\n for (var i = arrTaxId.length - 2; i >= 0; i--) {\n result = result + arrTaxId[i] * Math.pow(2, (8 - i));\n }\n\n if ((result % 11) % 10 === arrTaxId[8]) {\n return true;\n } else {\n return false;\n }\n } else {\n return false;\n }\n\n },\n\n isPhoneNumber: function (value) {\n if (value.length === 0)\n return true;\n\n var reg = /^\\+?\\d{10,14}$/;\n\n return reg.test(value);\n },\n\n isGreekPhone: function (value) {\n if (value.length === 0)\n return true;\n\n var reg = /^2[0-9]{9}$/;\n\n return reg.test(value);\n },\n\n isGreekMobile: function (value) {\n if (value.length === 0)\n return true;\n\n var reg = /^69[0-9]{8}$/;\n\n return reg.test(value);\n },\n\n isValidPhoneLocalized: function (value, paremeters, elem) {\n if (value.length === 0)\n return true;\n\n var iti = window.intlTelInputGlobals.getInstance(elem);\n var type = paremeters.type;\n var numberType = iti.getNumberType();\n var numberTypeIsValid = false;\n\n var regex = /^\\+{0,1}[0-9]+$/g;\n\n if (type == \"phone\") {\n numberTypeIsValid = (numberType === intlTelInputUtils.numberType.FIXED_LINE || numberType === intlTelInputUtils.numberType.FIXED_LINE_OR_MOBILE) ? true : false;\n } else if (type == \"mobile\") {\n numberTypeIsValid = (numberType === intlTelInputUtils.numberType.MOBILE || numberType === intlTelInputUtils.numberType.FIXED_LINE_OR_MOBILE) ? true : false;\n } else if (type == \"both\") {\n numberTypeIsValid = (numberType === intlTelInputUtils.numberType.FIXED_LINE || numberType === intlTelInputUtils.numberType.MOBILE || numberType === intlTelInputUtils.numberType.FIXED_LINE_OR_MOBILE) ? true : false;\n }\n\n return iti.isValidNumber() && numberTypeIsValid && regex.test(value);\n },\n\n isValidPostalCode: function () {\n var value = arguments[0], config = arguments[1], digits;\n\n switch (config.country) {\n case 'GR':\n digits = 5\n break;\n case 'CY':\n digits = 4\n break;\n case 'CL':\n digits = 7\n break;\n case 'HU':\n digits = 4\n break;\n }\n\n if (!digits) return true;\n\n if (value.length === digits && config.areas.length > 0) {\n return true;\n } else if (value.length < 1) {\n return true;\n } else {\n return false;\n }\n }\n\n };\n\n})(jQuery);"]}