{"version":3,"sources":["validation.js"],"names":["Vendd","Scripts","load","$","length","productlist","plBanner","pl","currentPage","parseInt","data","productsNum","position","addClass","clone","insertBefore","append","initBannerPl"],"mappings":"AAAAA,MAAAC,QAAAC,KAAA,WAEAC,EAAA,sBAAAC,QAAA,GAKA,WAEA,IAAAC,YAAAF,EAAA,sBACAG,SAAAH,EAAA,kCAAAE,aACAE,GAAAJ,EAAA,uBAAAE,aAEA,GAAAC,SAAAF,QAAA,GAAAG,GAAAH,QAAA,EACA,OAEA,IAAAI,YAAAC,SAAAN,EAAA,kBAAAE,aAAAK,KAAA,iBACAC,YAAAR,EAAA,iDAAAE,aAAAD,OACAQ,SAAAH,SAAAN,EAAA,yBAAAE,aAAAK,KAAA,aAEA,GAAAF,cACAL,EAAA,yBAAAE,aAAAQ,SAAA,SACAD,SAAAD,YACAL,SAAAQ,QAAAC,aAAAZ,EAAA,gCAAAS,SAAA,IAAAL,KAEAK,UAAAD,aACAJ,GAAAS,OAAAV,SAAAQ,UArBAG","file":"productList.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                /*\n                 * TODO: FIX THIS !!!!\n                 */\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        matchRegex: function () {\n            var value = arguments[0], config = arguments[1];\n\n            if (config && config.regex) {\n                var reg = new RegExp(config.regex);\n                return reg.test(value);\n            }\n\n            return false;\n\n        },\n        isTaxIdentifier: function () {\n            var value = arguments[0];\n            return LhApp.Function.validateTaxIdentifier(true, 'GR', value);\n\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);\n"]}