{"version":3,"sources":["validation.js"],"names":["Vendd","Scripts","load","$wrapper","$","length","LhApp","Context","MultipleWishlistsEnabled","model","wrapper","get","on","e","keyCode","trigger","preventDefault","stopPropagation","wishlistId","this","data","Name","val","DefaultListName","VisitorListId","MessageBus","publishAsync","UserWishlist","Messages","SaveWishlist","removeClass","toggleClass","listId","closest","qs","Function","QueryString","getValueOf","parseInt","visitorListId","DeleteWishlist","updateName","text","$item","updateMenu","$wishlistsMenuWrapper","addClass","selected","_","first","filter","Wishlists","x","Selected","WishlistId","window","location","href","Url","NewListPlaceHolder","html","Handlebars","parse","subscribe","SaveWishlistSuccess","SaveWishlistFailed","envelope","errorEl","message","GetModelSuccess","JSON","GetClientModel","currentListId","Wishlist","GetVisitorListByQueryString","match","grep","el","i","list"],"mappings":"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","file":"wishlist.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);"]}