{"version":3,"file":"sm.knockoutHandlers.min.js","names":["jQuery","undefined","sm","window","windowProxy","actionQueue","dictionaryItem","key","value","dictionary","observableKey","ko","observable","this","computed","read","write","newKey","remove","countDecimals","toString","split","length","getValue","items","found","utils","arrayFirst","item","format","i","arguments","str","Array","isArray","array","x","replace","RegExp","dateValidation","effectiveFrom","effectiveTo","dateFormat","resources","portalResource","toUpperCase","fromDate","moment","toDate","isMoment","isBefore","portal","extend","knockout","bindingHandlers","currency","update","element","valueAccessor","allBindingsAccessor","text","unwrapObservable","symbol","toFixed","currencyOrText","isNaN","bindIframe","init","iframedoc","contents","find","e","applyBindings","registerEventHandler","delayBind","viewModel","bindingContext","waitUntil","mydelayBindInit","applyBindingsToNode","bindingProvider","bind","trueFalseRadioButton","elementValue","val","parseJSON","observableValue","checked","iframeContent","parents","unwrap","contentWindow","document","close","subscribable","fn","subscribeChanged","callback","savedValue","peek","subscribe","latestValue","oldValue","ckeditor","allBindings","options","toolbar","removePlugins","get","modelValue","editor","CKEDITOR","on","getData","domNodeDisposal","addDisposeCallback","dom","getEditor","setData","date","valueUnwrapped","d","utility","formatDate","dateUtc","undefine","dateTime","dateTimeDay","dateTimeDayLong","decimal2","precision","defaultPrecision","formattedValue","decimal3","VerificationLetter","vm","setChange","doUpdate","edFormFile","goalsFile","formFile","writingFile","programPlanFile","ugMajorFile","teachingCertFile","retentionFile","interviewFile","resumeFile","recommendationFile","sevisFeeFile","cosFeeFile","sponsorLetterFile","petitionLetterFile","formI540File","formI539File","ds2019File","i20File","transferFormFile","legalStatusFile","residentCardFile","complianceFile","tuitionFormFile","bankFile","supportFile","passportCopyFile","visaCopyFile","i94CopyFile","codeOfConductFile","form48CFile","releaseFormFile","immunizationFile","collegeFile","highSchoolFile","admissionsDocFile","page","documentChecklist","currentModel","localize_Tooltip","obj","newValue","hasOwnProperty","getResourceValue","observables","isFunction","push","template","tooltip","addTitleToElement","err","console","log","message","localize_Text","innerText","showTitle","toLowerCase","localize_HTML","prefix","iconClass","innerHTML","attr_Localize_Text","params","param","att","createAttribute","attr","setAttributeNode","validation","rules","async","validator","otherVal","url","_baseApiUri","ajax","type","dataType","contentType","headers","processData","crossDomain","xhrFields","withCredentials","success","data","container","smapi","access","ApiContainerModel","Status","Payload","ValidationTitle","ValidationMessages","msg","PasswordRequirementMessage","regex","eval","formatString","PasswordRegexPattern","isValid","isNullOrEmpty","test","inputDate","isAfter","dateOfBirth","year","match","o","otherField","re","required","min","validate","start","end","startDate","endDate","isSame","selCountryUpper","SelectedCountryGID","constant","validate_MustBeNumeric_Key","isEmptyVal"],"sources":["assets/js/sm.knockoutHandlers.js"],"mappings":"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","ignoreList":[],"sourcesContent":["(function (jQuery, undefined) {\r\n var sm = window.sm = window.sm || {};\r\n var windowProxy;\r\n var actionQueue = [];\r\n\r\n if (typeof sm.portal === \"undefined\") {\r\n jQuery.extend(sm, { portal: {} });\r\n }\r\n if (typeof sm.portal.knockout === \"undefined\") {\r\n jQuery.extend(sm.portal, { knockout: {} });\r\n }\r\n\r\n // http://tech.pro/blog/1863/10-knockout-binding-handlers-i-don-t-want-to-live-without\r\n ko.bindingHandlers.currency = {\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n return ko.bindingHandlers.text.update(element, function () {\r\n var value = +(ko.utils.unwrapObservable(valueAccessor()) || 0),\r\n symbol = allBindingsAccessor().symbol || ''\r\n return symbol + value.toFixed(2).replace(/(\\d)(?=(\\d{3})+\\.)/g, \"$1,\");\r\n });\r\n }\r\n };\r\n\r\n ko.bindingHandlers.currencyOrText = {\r\n update: function(element, valueAccessor, allBindingsAccessor) {\r\n var value = +(ko.utils.unwrapObservable(valueAccessor()));\r\n if(isNaN(value)) {\r\n return ko.bindingHandlers.text.update(element, valueAccessor, allBindingsAccessor);\r\n }\r\n else return ko.bindingHandlers.currency.update(element,valueAccessor, allBindingsAccessor);\r\n }\r\n }\r\n\r\n // http://jsfiddle.net/karlhorky/MzwHQ/\r\n ko.bindingHandlers.bindIframe = {\r\n init: function (element, valueAccessor) {\r\n function bindIframe() {\r\n try {\r\n var iframedoc =\r\n jQuery(element).contents().find('body')[0];\r\n } catch (e) {\r\n // ignored\r\n }\r\n if (iframedoc)\r\n ko.applyBindings(valueAccessor(), iframedoc);\r\n };\r\n bindIframe();\r\n ko.utils.registerEventHandler(element, 'load', bindIframe);\r\n }\r\n };\r\n\r\n ko.bindingHandlers.delayBind = {\r\n 'update': function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n var value = valueAccessor(), waitUntil = ko.utils.unwrapObservable(value.waitUntil);\r\n if (waitUntil && !element.mydelayBindInit) {\r\n ko.applyBindingsToNode(element, function () { return ko.bindingProvider['instance']['parseBindingsString'](value.bind, bindingContext) }, bindingContext);\r\n element.mydelayBindInit = true;\r\n }\r\n }\r\n };\r\n\r\n // True/False Radio Button binding - allows you to bind a True/False or Yes/No radio pair to a single boolean observable\r\n /// ----------------------------------------------------------------------- /// This binding is used to bind a pair of radio buttons to a boolean observable\r\n ko.bindingHandlers.trueFalseRadioButton =\r\n {\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n // event handler for the element change event\r\n var changeHandler = function () {\r\n var elementValue = jQuery(element).val();\r\n var observable = valueAccessor(); // set the observable value to the boolean value of the element value\r\n observable(jQuery.parseJSON(elementValue));\r\n }; // register change handler for element\r\n ko.utils.registerEventHandler(element,\r\n \"change\",\r\n changeHandler);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n var elementValue = jQuery.parseJSON(jQuery(element).val());\r\n var observableValue = ko.utils.unwrapObservable(valueAccessor()); if (elementValue === observableValue) {\r\n element.checked = true;\r\n }\r\n else {\r\n element.checked = false;\r\n }\r\n }\r\n };\r\n\r\n ko.bindingHandlers.iframeContent = {\r\n update: function (element, valueAccessor) {\r\n //Prevent interference from cke iframe\r\n if (jQuery(element).parents(\"cke_contents\").length == 0) {\r\n var value = ko.unwrap(valueAccessor());\r\n element.contentWindow.document.close(); // Clear the content\r\n element.contentWindow.document.write(value);\r\n }\r\n }\r\n };\r\n\r\n ko.subscribable.fn.subscribeChanged = function (callback) {\r\n\r\n var that = this;\r\n // take the current value\r\n\r\n var savedValue = this.peek();\r\n return this.subscribe(function (latestValue) {\r\n var oldValue = savedValue;\r\n savedValue = latestValue;\r\n callback(latestValue, oldValue);\r\n });\r\n };\r\n\r\n ko.bindingHandlers.ckeditor = {\r\n init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n var options = ko.utils.extend({\r\n toolbar: 'basic',\r\n removePlugins: 'elementspath'\r\n }, allBindings.get('ckeditorOptions') || {\r\n });\r\n var modelValue = valueAccessor();\r\n var editor = CKEDITOR.replace(element, options);\r\n\r\n editor.on('change', function () {\r\n modelValue(editor.getData());\r\n });\r\n\r\n //handle disposal (if KO removes by the template binding)\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n if (editor) {\r\n CKEDITOR.remove(editor);\r\n };\r\n });\r\n },\r\n update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n var editor = new CKEDITOR.dom.element(element).getEditor();\r\n editor.setData(ko.unwrap(valueAccessor()), null, true);\r\n }\r\n };\r\n\r\n\r\n\r\n\r\n // customized binding handlers to help with formatting\r\n ko.bindingHandlers.date = {\r\n // format date to dd/mm/yyyy\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = valueAccessor(), allBindings = allBindingsAccessor();\r\n var valueUnwrapped = ko.utils.unwrapObservable(value);\r\n var d = sm.portal.utility.formatDate(valueUnwrapped, true);\r\n jQuery(element).text(d);\r\n }\r\n };\r\n\r\n ko.bindingHandlers.dateUtc = {\r\n // format date to dd/mm/yyyy\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = valueAccessor(), allBindings = allBindingsAccessor();\r\n var valueUnwrapped = ko.utils.unwrapObservable(value);\r\n var d = sm.portal.utility.formatDate(valueUnwrapped, true, undefined, undefined, undefine, true);\r\n jQuery(element).text(d);\r\n }\r\n };\r\n\r\n ko.bindingHandlers.dateTime = {\r\n // format date and time to dd/mm/yyyy hh:mm am/pm\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = valueAccessor(), allBindings = allBindingsAccessor();\r\n var valueUnwrapped = ko.utils.unwrapObservable(value);\r\n var d = sm.portal.utility.formatDate(valueUnwrapped, true, true);\r\n jQuery(element).text(d);\r\n }\r\n };\r\n ko.bindingHandlers.dateTimeDay = {\r\n // format date to dd/mm/yyyy hh:mm am/pm - mon\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = valueAccessor(), allBindings = allBindingsAccessor();\r\n var valueUnwrapped = ko.utils.unwrapObservable(value);\r\n var d = sm.portal.utility.formatDate(valueUnwrapped, true, true, true, false);\r\n jQuery(element).text(d);\r\n }\r\n };\r\n ko.bindingHandlers.dateTimeDayLong = {\r\n // format date to dd/mm/yyyy hh:mm am/pm - mon\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = valueAccessor(), allBindings = allBindingsAccessor();\r\n var valueUnwrapped = ko.utils.unwrapObservable(value);\r\n var d = sm.portal.utility.formatDate(valueUnwrapped, true, true, true, true);\r\n jQuery(element).text(d);\r\n }\r\n };\r\n\r\n ko.bindingHandlers.decimal2 = {\r\n // format value to two decimal places\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = ko.utils.unwrapObservable(valueAccessor()),\r\n precision = ko.utils.unwrapObservable(allBindingsAccessor().precision) || ko.bindingHandlers.decimal2.defaultPrecision,\r\n formattedValue = value.toFixed(precision);\r\n\r\n ko.bindingHandlers.text.update(element, function () { return formattedValue; });\r\n },\r\n defaultPrecision: 2\r\n };\r\n\r\n ko.bindingHandlers.decimal3 = {\r\n // format value to three decimal places\r\n update: function (element, valueAccessor, allBindingsAccessor) {\r\n var value = ko.utils.unwrapObservable(valueAccessor()),\r\n precision = ko.utils.unwrapObservable(allBindingsAccessor().precision) || ko.bindingHandlers.decimal3.defaultPrecision,\r\n formattedValue = value.toFixed(precision);\r\n\r\n ko.bindingHandlers.text.update(element, function () { return formattedValue; });\r\n },\r\n defaultPrecision: 3\r\n };\r\n\r\n ko.bindingHandlers.VerificationLetter =\r\n {\r\n init: function (element, valueAccessor) {\r\n sm.portal.vm.setChange(element, valueAccessor);\r\n },\r\n update: function (element, valueAccessor) {\r\n sm.portal.vm.doUpdate(element, valueAccessor);\r\n }\r\n };\r\n\r\n // Document Upload bindings\r\n ko.bindingHandlers.edFormFile =\r\n ko.bindingHandlers.goalsFile =\r\n ko.bindingHandlers.formFile =\r\n ko.bindingHandlers.writingFile =\r\n ko.bindingHandlers.programPlanFile =\r\n ko.bindingHandlers.ugMajorFile =\r\n ko.bindingHandlers.teachingCertFile =\r\n ko.bindingHandlers.retentionFile =\r\n ko.bindingHandlers.interviewFile =\r\n ko.bindingHandlers.resumeFile =\r\n ko.bindingHandlers.recommendationFile =\r\n ko.bindingHandlers.sevisFeeFile =\r\n ko.bindingHandlers.cosFeeFile =\r\n ko.bindingHandlers.sponsorLetterFile =\r\n ko.bindingHandlers.petitionLetterFile =\r\n ko.bindingHandlers.formI540File =\r\n ko.bindingHandlers.formI539File =\r\n ko.bindingHandlers.ds2019File =\r\n ko.bindingHandlers.i20File =\r\n ko.bindingHandlers.transferFormFile =\r\n ko.bindingHandlers.legalStatusFile =\r\n ko.bindingHandlers.residentCardFile =\r\n ko.bindingHandlers.complianceFile =\r\n ko.bindingHandlers.tuitionFormFile =\r\n ko.bindingHandlers.bankFile =\r\n ko.bindingHandlers.supportFile =\r\n ko.bindingHandlers.passportCopyFile =\r\n ko.bindingHandlers.visaCopyFile =\r\n ko.bindingHandlers.i94CopyFile =\r\n ko.bindingHandlers.codeOfConductFile =\r\n ko.bindingHandlers.form48CFile =\r\n ko.bindingHandlers.releaseFormFile =\r\n ko.bindingHandlers.immunizationFile =\r\n ko.bindingHandlers.collegeFile =\r\n ko.bindingHandlers.highSchoolFile =\r\n ko.bindingHandlers.admissionsDocFile = {\r\n init: function (element, valueAccessor) {\r\n sm.portal.page.documentChecklist.setChange(element, valueAccessor);\r\n },\r\n update: function (element, valueAccessor, allBindingsAccessor, currentModel, bindingContext) {\r\n sm.portal.page.documentChecklist.doUpdate(element, valueAccessor, allBindingsAccessor, currentModel, bindingContext);\r\n }\r\n }\r\n\r\n // Localization Handlers\r\n //-----------------------------------------------\r\n ko.bindingHandlers.localize_Tooltip = {\r\n\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n\r\n try {\r\n var obj = valueAccessor();\r\n\r\n if (obj) {\r\n var newValue;\r\n\r\n if (obj.hasOwnProperty('key') && obj.hasOwnProperty('observables')) {\r\n\r\n // Use globalized string with observable value in it\r\n var x = sm.portal.utility.getResourceValue(obj.key);\r\n var observables = [];\r\n for (i = 0; obj.observables.length > i; i++) {\r\n if (sm.portal.utility.isFunction(obj.observables[i])) {\r\n observables.push(ko.utils.unwrapObservable(obj.observables[i]()));\r\n }\r\n else {\r\n observables.push(obj.observables[i]);\r\n }\r\n }\r\n var template = sm.portal.knockout.format(x, observables);\r\n newValue = template;\r\n element.tooltip = template;\r\n }\r\n else {\r\n // Replace straight text in element\r\n var x = sm.portal.utility.getResourceValue(valueAccessor());\r\n newValue = x;\r\n element.tooltip = x;\r\n }\r\n sm.portal.utility.addTitleToElement(element, newValue);\r\n }\r\n }\r\n catch (err) {\r\n console.log(err.message);\r\n }\r\n },\r\n\r\n update: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n\r\n try {\r\n var obj = valueAccessor();\r\n\r\n if (obj) {\r\n var newValue;\r\n if (obj.hasOwnProperty('key') && obj.hasOwnProperty('observables')) {\r\n\r\n // Use globalized string with observable value in it\r\n var x = sm.portal.utility.getResourceValue(obj.key);\r\n var observables = [];\r\n for (i = 0; obj.observables.length > i; i++) {\r\n if (sm.portal.utility.isFunction(obj.observables[i])) {\r\n observables.push(ko.utils.unwrapObservable(obj.observables[i]()));\r\n }\r\n else {\r\n observables.push(obj.observables[i]);\r\n }\r\n }\r\n var template = sm.portal.knockout.format(x, observables);\r\n newValue = template;\r\n element.tooltip = template;\r\n }\r\n else {\r\n // Replace straight text in element\r\n var x = sm.portal.utility.getResourceValue(valueAccessor());\r\n newValue = x;\r\n element.tooltip = x;\r\n }\r\n sm.portal.utility.addTitleToElement(element, newValue);\r\n }\r\n }\r\n catch (err) {\r\n console.log(err.message);\r\n }\r\n }\r\n };\r\n\r\n ko.bindingHandlers.localize_Text = {\r\n\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n\r\n try {\r\n var obj = valueAccessor();\r\n\t\t\t\t\r\n\t\t\t\tif (obj){\r\n var newValue;\r\n\t\t\t\t\r\n if (obj.hasOwnProperty('key') && obj.hasOwnProperty('observables')) {\r\n\r\n // Use globalized string with observable value in it\r\n var x = sm.portal.utility.getResourceValue(obj.key);\r\n var observables = [];\r\n for (i = 0; obj.observables.length > i; i++) {\r\n if (sm.portal.utility.isFunction(obj.observables[i])) {\r\n observables.push(ko.utils.unwrapObservable(obj.observables[i]()));\r\n }\r\n else {\r\n observables.push(obj.observables[i]);\r\n }\r\n }\r\n var template = sm.portal.knockout.format(x, observables);\r\n newValue = template;\r\n element.innerText = template;\r\n }\r\n else {\r\n // Replace straight text in element\r\n var x = sm.portal.utility.getResourceValue(valueAccessor());\r\n newValue = x;\r\n element.innerText = x;\r\n }\r\n\r\n // If the element has specified NOT to do a title, then do not put one on\r\n // Otherwise, add a title element with the localized text\r\n if (obj.hasOwnProperty('showTitle') && obj.showTitle.toLowerCase() == \"true\") {\r\n sm.portal.utility.addTitleToElement(element, newValue);\r\n }\r\n\t\t\t\t}\r\n }\r\n catch (err) {\r\n console.log(err.message);\r\n }\r\n },\r\n\r\n update: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n\r\n try {\r\n var obj = valueAccessor();\r\n\t\t\t\t\r\n\t\t\t\tif (obj) {\r\n var newValue;\r\n if (obj.hasOwnProperty('key') && obj.hasOwnProperty('observables')) {\r\n\r\n // Use globalized string with observable value in it\r\n var x = sm.portal.utility.getResourceValue(obj.key);\r\n var observables = [];\r\n for (i = 0; obj.observables.length > i; i++) {\r\n if (sm.portal.utility.isFunction(obj.observables[i])) {\r\n observables.push(ko.utils.unwrapObservable(obj.observables[i]()));\r\n }\r\n else {\r\n observables.push(obj.observables[i]);\r\n }\r\n }\r\n var template = sm.portal.knockout.format(x, observables);\r\n newValue = template;\r\n element.innerText = template;\r\n }\r\n else {\r\n // Replace straight text in element\r\n var x = sm.portal.utility.getResourceValue(valueAccessor());\r\n newValue = x;\r\n element.innerText = x;\r\n }\r\n\r\n // If the element has specified NOT to do a title, then do not put one on\r\n // Otherwise, add a title element with the localized text\r\n if (obj.hasOwnProperty('showTitle') && obj.showTitle.toLowerCase() == \"true\") {\r\n sm.portal.utility.addTitleToElement(element, newValue, true);\r\n }\r\n\t\t\t\t}\r\n }\r\n catch (err) {\r\n console.log(err.message);\r\n }\r\n }\r\n };\r\n\r\n ko.bindingHandlers.localize_HTML = {\r\n\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n\r\n try {\r\n var obj = valueAccessor();\r\n var val = '';\r\n var prefix = '';\r\n\r\n if (obj.hasOwnProperty('iconClass')) {\r\n prefix = '';\r\n }\r\n\r\n if (obj.hasOwnProperty('key')) {\r\n val = sm.portal.utility.getResourceValue(obj.key);\r\n }\r\n else {\r\n val = sm.portal.utility.getResourceValue(valueAccessor());\r\n }\r\n\r\n if (obj.hasOwnProperty('observables')) {\r\n\r\n // Use globalized string with observable value in it\r\n var observables = [];\r\n for (i = 0; obj.observables.length > i; i++) {\r\n if (sm.portal.utility.isFunction(obj.observables[i])) {\r\n observables.push(ko.utils.unwrapObservable(obj.observables[i]()));\r\n }\r\n else {\r\n observables.push(obj.observables[i]);\r\n }\r\n }\r\n var template = sm.portal.knockout.format(val, observables);\r\n element.innerHTML = prefix + template;\r\n }\r\n else {\r\n // Replace straight text in element\r\n element.innerHTML = prefix + val;\r\n }\r\n }\r\n catch (err) {\r\n console.log(err.message);\r\n }\r\n },\r\n\r\n update: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n\r\n try {\r\n var obj = valueAccessor();\r\n var val = '';\r\n var prefix = '';\r\n\r\n if (obj.hasOwnProperty('iconClass')) {\r\n prefix = '';\r\n }\r\n\r\n if (obj.hasOwnProperty('key')) {\r\n val = sm.portal.utility.getResourceValue(obj.key);\r\n }\r\n else {\r\n val = sm.portal.utility.getResourceValue(valueAccessor());\r\n }\r\n\r\n if (obj.hasOwnProperty('observables')) {\r\n\r\n // Use globalized string with observable value in it\r\n var observables = [];\r\n for (i = 0; obj.observables.length > i; i++) {\r\n if (sm.portal.utility.isFunction(obj.observables[i])) {\r\n observables.push(ko.utils.unwrapObservable(obj.observables[i]()));\r\n }\r\n else {\r\n observables.push(obj.observables[i]);\r\n }\r\n }\r\n var template = sm.portal.knockout.format(val, observables);\r\n element.innerHTML = prefix + template;\r\n }\r\n else {\r\n // Replace straight text in element\r\n element.innerHTML = prefix + val;\r\n }\r\n }\r\n catch (err) {\r\n console.log(err.message);\r\n }\r\n }\r\n };\r\n\r\n ko.bindingHandlers.attr_Localize_Text = {\r\n\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n\r\n try {\r\n var obj = valueAccessor();\r\n if (obj.hasOwnProperty('key') && obj.hasOwnProperty('attr')) {\r\n if (obj.hasOwnProperty('param')) {\r\n //Convert Params to localized values\r\n var params = [];\r\n for (i = 0; obj.param.length > i; i++) {\r\n params.push(sm.portal.utility.getResourceValue(obj.param[i]));\r\n }\r\n // Complete the String.Format\r\n var x = sm.portal.utility.getResourceValue(obj.key);\r\n var template = sm.portal.knockout.format(x, obj.param);\r\n var att = document.createAttribute(obj.attr); // Create a attribute\r\n att.value = template; // Set the value of the attribute\r\n element.setAttributeNode(att);\r\n }\r\n else {\r\n var x = sm.portal.utility.getResourceValue(obj.key);\r\n var att = document.createAttribute(obj.attr); // Create a attribute\r\n att.value = x; // Set the value of the attribute\r\n element.setAttributeNode(att);\r\n }\r\n }\r\n }\r\n catch (err) {\r\n console.log(err.message);\r\n }\r\n },\r\n };\r\n\r\n // Custom Validation Rules\r\n ko.validation.rules['smPasswordPattern'] = {\r\n async: true,\r\n validator: function (val, otherVal, callback) {\r\n\r\n var url = _baseApiUri + 'api/studentportal/GetPasswordSchema?type=Pattern';\r\n jQuery.ajax({\r\n url: url,\r\n type: 'GET',\r\n dataType: 'json',\r\n contentType: 'application/json; charset=utf-8',\r\n headers: {\r\n \"x-api-version\": '1' //,\r\n },\r\n processData: false,\r\n crossDomain: true,\r\n\r\n xhrFields: {\r\n withCredentials: true\r\n },\r\n success: function (data) {\r\n var container = new smapi.access.ApiContainerModel(data.Status, data.Payload, data.ValidationTitle, data.ValidationMessages);\r\n if (data.Status == 'success') {\r\n var msg = container.Payload.PasswordRequirementMessage;\r\n var regex = eval(sm.portal.utility.formatString(\"/{0}/\", container.Payload.PasswordRegexPattern));\r\n }\r\n callback({ isValid: !sm.portal.utility.isNullOrEmpty(val) && regex.test(val), message: msg });\r\n }\r\n });\r\n },\r\n message: 'My default Password Message'\r\n };\r\n\r\n // locale dependent date validation\r\n ko.validation.rules['smLocalDate'] = {\r\n async: false,\r\n validator: function (val) {\r\n\r\n if (val) {\r\n var dateFormat = sm.resources.portalResource.getValue('DateFormatExample').toUpperCase();\r\n return moment(val, dateFormat, true).isValid();\r\n }\r\n\r\n // no validation neccesary\r\n return true;\r\n },\r\n message: 'Value must be a valid date'\r\n };\r\n\r\n ko.validation.rules['smValidateEffectiveFromDate'] = {\r\n async: false,\r\n validator: function (effectiveFrom, effectiveTo) {\r\n if (!sm.portal.utility.isNullOrEmpty(effectiveFrom) && !sm.portal.utility.isNullOrEmpty(effectiveTo)) {\r\n return dateValidation(effectiveFrom, effectiveTo);\r\n }\r\n return true;\r\n },\r\n message: \"Effective Begin date must occur before the Effective End date.\"\r\n };\r\n ko.validation.rules['smValidateEffectiveToDate'] = {\r\n async: false,\r\n validator: function (effectiveTo, effectiveFrom) {\r\n if (!sm.portal.utility.isNullOrEmpty(effectiveFrom) && !sm.portal.utility.isNullOrEmpty(effectiveTo)) {\r\n return dateValidation(effectiveFrom, effectiveTo);\r\n }\r\n return true;\r\n },\r\n message: \"Effective End date must occur after the Effective Begin date.\"\r\n };\r\n\r\n ko.validation.rules['smFutureDate'] = {\r\n async: false,\r\n validator: function (val) {\r\n if (val) {\r\n var dateFormat = sm.resources.portalResource.getValue('DateFormatExample').toUpperCase();\r\n var inputDate = moment(val, dateFormat, true);\r\n return !moment().isAfter(inputDate);\r\n }\r\n \r\n return true;\r\n },\r\n message: 'The date must be later than the current date'\r\n };\r\n \r\n // date of birth validation\r\n ko.validation.rules['smDateOfBirth'] = {\r\n async: false,\r\n validator: function (val) {\r\n\r\n if (val) {\r\n var dateFormat = sm.resources.portalResource.getValue('DateFormatExample').toUpperCase();\r\n var dateOfBirth = moment(val, dateFormat, true);\r\n var yearOfBirth = dateOfBirth.year();\r\n return yearOfBirth >= 1900 && moment().isAfter(dateOfBirth);\r\n }\r\n\r\n return true;\r\n },\r\n message: 'The date must be between 1900 and the current date'\r\n };\r\n\r\n // UK postcode validation\r\n ko.validation.rules['ukPostcode'] = {\r\n async: false,\r\n validator: function (val) {\r\n if (typeof val !== 'undefined') {\r\n\r\n var match = val.match(\r\n /([Gg][Ii][Rr] 0[Aa]{2})|((([A-Za-z][0-9]{1,2})|(([A-Za-z][A-Ha-hJ-Yj-y][0-9]{1,2})|(([A-Za-z][0-9][A-Za-z])|([A-Za-z][A-Ha-hJ-Yj-y][0-9]?[A-Za-z])))) [0-9][A-Za-z]{2})/\r\n );\r\n\r\n return match != null && val == match[0];\r\n }\r\n },\r\n message: 'Value must be a valid UK Postcode format: AA9 9AA or AA99 9AA or A9 9AA or A99 9AA or AA9A 9AA or A9A 9A'\r\n };\r\n\r\n // Irish postcode validation\r\n ko.validation.rules['iePostcode'] = {\r\n async: false,\r\n validator: function (val) {\r\n if (typeof val !== 'undefined') {\r\n\r\n var match = val.match(\r\n /^[ACDEFHKNPRTVWXY]{1}[0-9]{1}[0-9W]{1}[\\ \\-]?[0-9ACDEFHKNPRTVWXY]{4}$/\r\n );\r\n\r\n return match != null && val == match[0];\r\n }\r\n },\r\n message: 'Value must be a valid Eircode format e.g A65 F4E2'\r\n };\r\n\r\n // Irish postcode validation\r\n ko.validation.rules['caPostcode'] = {\r\n async: false,\r\n validator: function (val) {\r\n if (typeof val !== 'undefined') {\r\n\r\n var match = val.match(\r\n /^(?!.*[DFIOQU])[A-VXY][0-9][A-Z] ?[0-9][A-Z][0-9]$/\r\n );\r\n\r\n return match != null && val == match[0];\r\n }\r\n },\r\n message: 'Value must be a valid Canadian Postcode format e.g A1A 1A1'\r\n };\r\n\r\n ko.validation.rules['smMatchingValue'] = {\r\n getValue: function (o) {\r\n return (typeof o === 'function' ? o() : o);\r\n },\r\n validator: function (val, o) {\r\n var otherField = undefined;\r\n var data = undefined;\r\n if (!sm.portal.utility.isNullOrEmpty(o)) {\r\n data = o;\r\n }\r\n if (sm.portal.utility.isNullOrEmpty(data) && (!sm.portal.utility.isNullOrEmpty(o) && o.hasOwnProperty('params'))) {\r\n data = o.params;\r\n }\r\n if (data != null) {\r\n otherField = this.getValue(data);\r\n }\r\n if (!sm.portal.utility.isNullOrEmpty(otherField)) {\r\n otherField = otherField.toLowerCase();\r\n }\r\n if (!sm.portal.utility.isNullOrEmpty(val)) {\r\n val = val.toLowerCase();\r\n }\r\n return val == otherField;\r\n },\r\n message: 'Values do not match'\r\n };\r\n\r\n ko.validation.rules['smPasswordPattern'] = {\r\n getValue: function (o) {\r\n return (typeof o === 'function' ? o() : o);\r\n },\r\n validator: function (val, o) {\r\n if (o.length >= 2) {\r\n var re = this.getValue(o[0]);\r\n var msg = this.getValue(o[1]);\r\n var regex = sm.portal.utility.isNullOrEmpty(re) ? '' : eval(sm.portal.utility.formatString(\"/{0}/\", re));\r\n this.message = sm.portal.utility.isNullOrEmpty(msg) ? '' : msg;\r\n }\r\n\r\n var required = true;\r\n if (o.length == 3) {\r\n required = this.getValue(o[2]);\r\n }\r\n\r\n if (required || !sm.portal.utility.isNullOrEmpty(val)) {\r\n return regex.test(val);\r\n }\r\n return true;\r\n },\r\n message: 'Password do not match'\r\n };\r\n\r\n ko.validation.rules['smPasswordLength'] = {\r\n getValue: function (o) {\r\n return (typeof o === 'function' ? o() : o);\r\n },\r\n validator: function (val, o) {\r\n if (o.length >= 2) {\r\n var min = this.getValue(o[0]);\r\n var msg = this.getValue(o[1]);\r\n\r\n this.message = sm.portal.utility.isNullOrEmpty(msg) ? '' : msg;\r\n }\r\n var required = true;\r\n if (o.length == 3) {\r\n required = this.getValue(o[2]);\r\n }\r\n\r\n if (required || !sm.portal.utility.isNullOrEmpty(val)) {\r\n if (val === undefined) {\r\n val = \"\";\r\n }\r\n return val.length >= min;\r\n }\r\n return true;\r\n },\r\n message: 'Password do not match'\r\n };\r\n\r\n //Max Decimals Validator\r\n ko.validation.rules[\"maxDecimals\"] = {\r\n validator: function (val, validate) {\r\n if (!val || isNaN(val)) {\r\n return true;\r\n }\r\n\r\n return countDecimals(val) <= validate;\r\n }\r\n };\r\n\r\n /**\r\n * Date range validator\r\n * \r\n * Validates that supplied values are valid dates and that the 'from' date is earlier than\r\n * the 'to' date\r\n */\r\n ko.validation.rules['smDateRange'] = {\r\n validator: function (value, o) {\r\n\r\n // passing values?\r\n if (o.start() && o.end()) {\r\n\r\n var dateFormat = sm.resources.portalResource.getValue('DateFormatExample').toUpperCase();\r\n var startDate = moment(o.start(), dateFormat, true);\r\n var endDate = moment(o.end(), dateFormat, true);\r\n\r\n // any invalid dates?\r\n if (!moment.isMoment(startDate) || !moment.isMoment(endDate)) {\r\n // invalid\r\n return false;\r\n }\r\n\r\n // end later than start\r\n if (moment(startDate).isBefore(endDate)) {\r\n // valid\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n // validation not neccesary\r\n return true;\r\n }\r\n };\r\n /** Validate that supplied Dates are equal or not*/\r\n ko.validation.rules['isDatesAreEqual'] = {\r\n validator: function (value, o) {\r\n // passing values?\r\n if (o.start() && o.end()) {\r\n var dateFormat = sm.resources.portalResource.getValue('DateFormatExample').toUpperCase();\r\n var startDate = moment(o.start(), dateFormat, true);\r\n var endDate = moment(o.end(), dateFormat, true);\r\n // any invalid dates?\r\n if (!moment.isMoment(startDate) || !moment.isMoment(endDate)) {\r\n // invalid\r\n return false;\r\n }\r\n // start and end equal.\r\n if (!startDate.isSame(endDate)) {\r\n //valid\r\n return true;\r\n }\r\n return false;\r\n }\r\n // validation not neccesary\r\n return true;\r\n }\r\n };\r\n //input can be numeric or alphanumerica\r\n ko.validation.rules['numericOrAlphanumerica'] = {\r\n getValue: function (o) {\r\n return (typeof o === 'function' ? o() : o);\r\n },\r\n validator: function (value, o) {\r\n var selCountryUpper = this.getValue(o.params.SelectedCountryGID());\r\n if (selCountryUpper != null) {\r\n var selCountryGID = selCountryUpper.toLowerCase();\r\n if (selCountryGID === '80DDA1DB-A364-4874-A605-B9BFB34B9A4C'.toLowerCase()) {\r\n // This GID is for the United States which (we think) is the only country requiring numeric postal codes, so validate numeric only here ...\r\n //copied from the number rules\r\n this.message = sm.portal.utility.getResourceValue(smapi.constant.validate_MustBeNumeric_Key);\r\n return ko.validation.utils.isEmptyVal(value) || /^-?(?:\\d+|\\d{1,3}(?:,\\d{3})+)?(?:\\.\\d+)?$/.test(value);\r\n }\r\n else {\r\n //alphanumeric\r\n this.message = 'The field can be alphanumeric.'\r\n return true;\r\n }\r\n } else {\r\n this.message = \"\";\r\n }\r\n\r\n },\r\n\r\n };\r\n //-----------------------------------------------\r\n // GREAT ASYNC AJAX Validation Example\r\n //ko.validation.rules['smPasswordLength'] = {\r\n // async: true, \r\n // validator: function (val, otherVal, callback) { \r\n\r\n // var url = _baseApiUri + 'api/studentportal/GetPasswordSchema?type=MinLength';\r\n // jQuery.ajax({\r\n // url: url,\r\n // type: 'GET',\r\n // dataType: 'json',\r\n // contentType: 'application/json; charset=utf-8',\r\n // headers: {\r\n // \"x-api-version\": '1' //,\r\n // },\r\n // processData: false,\r\n // crossDomain: true,\r\n\r\n // xhrFields: {\r\n // withCredentials: true\r\n // },\r\n // success: function (data) {\r\n // var container = new smapi.access.ApiContainerModel(data.Status, data.Payload, data.ValidationTitle, data.ValidationMessages);\r\n // if (data.Status == 'success') {\r\n // var msg = container.Payload.PasswordRequirementMessage;\r\n // var lngth = container.Payload.PasswordMinLength;\r\n // }\r\n // callback({ isValid: !sm.portal.utility.isNullOrEmpty(val) && val.length >= lngth, message: msg });\r\n // }\r\n // });\r\n // },\r\n // message: 'My default Password Message'\r\n //};\r\n\r\n // below was an attempt to get the datpicker to work... still not holding the value as you move through the steps\r\n // USAGE - data-bind=\"datepicker: DateOfBirth, datepickerOptions: { minDate: new Date('1/1/1900') }\"\r\n // http://stackoverflow.com/questions/6612705/jquery-ui-datepicker-change-event-not-caught-by-knockoutjs\r\n //ko.bindingHandlers.datepicker = {\r\n // init: function (element, valueAccessor, allBindingsAccessor) {\r\n // //initialize datepicker with some optional options\r\n // var options = allBindingsAccessor().datepickerOptions || {};\r\n\r\n // var funcOnSelectdate = function () {\r\n // var observable = valueAccessor();\r\n // var d = $(element).datepicker(\"getDate\");\r\n // var timeInTicks = d.getTime() + (-1 * (d.getTimezoneOffset() * 60 * 1000));\r\n\r\n // observable(\"/Date(\" + timeInTicks + \")/\");\r\n // }\r\n // options.onSelect = funcOnSelectdate;\r\n\r\n // $(element).datepicker(\"option\", \"onSelect\", funcOnSelectdate);\r\n\r\n // //handle the field changing\r\n // ko.utils.registerEventHandler(element, \"change\", funcOnSelectdate);\r\n\r\n // //handle disposal (if KO removes by the template binding)\r\n // ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n // $(element).datepicker(\"destroy\");\r\n // });\r\n\r\n // },\r\n // update: function (element, valueAccessor) {\r\n // var value = ko.utils.unwrapObservable(valueAccessor());\r\n\r\n // //handle date data coming via json from Microsoft\r\n // if (String(value).indexOf('/Date(') == 0) {\r\n // value = new Date(parseInt(value.replace(/\\/Date\\((.*?)\\)\\//gi, \"$1\")));\r\n // }\r\n\r\n // current = $(element).datepicker(\"getDate\");\r\n\r\n // if (value - current !== 0) {\r\n // $(element).datepicker(\"setDate\", value);\r\n // }\r\n // }\r\n //};\r\n\r\n function dictionaryItem(key, value, dictionary) {\r\n var observableKey = new ko.observable(key);\r\n\r\n this.value = new ko.observable(value);\r\n this.key = new ko.computed({\r\n read: observableKey,\r\n write: function (newKey) {\r\n var current = observableKey();\r\n\r\n if (current == newKey) return;\r\n\r\n // no two items are allowed to share the same key.\r\n dictionary.remove(newKey);\r\n\r\n observableKey(newKey);\r\n }\r\n });\r\n }\r\n\r\n function countDecimals(value) {\r\n if ((value % 1) !== 0) {\r\n return value.toString().split(\".\")[1].length || 0;\r\n }\r\n return 0;\r\n }\r\n \t\t\r\n function getValue(key, items) {\r\n var found = ko.utils.arrayFirst(items, function (item) {\r\n return item.key() == key;\r\n });\r\n return found ? found.value : null;\r\n }\r\n\r\n function format() {\r\n var i = arguments.length;\r\n if (i == 0)\r\n return;\r\n if (i == 1) {\r\n return arguments[0];\r\n }\r\n var str = arguments[0];\r\n\r\n if (i > 1 && Array.isArray(arguments[1])) {\r\n // Assume second argument is parameters\r\n var array = arguments[1];\r\n for (x = 0; x < array.length; x++) {\r\n str = str.replace(new RegExp('\\\\{' + (x) + '\\\\}', 'gm'), array[x]);\r\n }\r\n }\r\n else {\r\n while (i-- && i > 0) {\r\n str = str.replace(new RegExp('\\\\{' + (i - 1) + '\\\\}', 'gm'), arguments[i]);\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n function dateValidation(effectiveFrom, effectiveTo) {\r\n const dateFormat = sm.resources.portalResource.getValue('DateFormatExample').toUpperCase();\r\n let fromDate = moment(effectiveFrom, dateFormat, true);\r\n let toDate = moment(effectiveTo, dateFormat, true);\r\n if (!moment.isMoment(fromDate) || !moment.isMoment(toDate)) {\r\n return false;\r\n }\r\n return !!(moment(fromDate).isBefore(toDate));\r\n }\r\n\r\n jQuery.extend(true, sm.portal.knockout, {\r\n getValue: getValue,\r\n dictionaryItem: dictionaryItem,\r\n format: format,\r\n });\r\n})(jQuery);"]}