{"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","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_Text","obj","newValue","hasOwnProperty","getResourceValue","observables","isFunction","push","template","innerText","showTitle","toLowerCase","addTitleToElement","err","console","log","message","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","dateFormat","resources","portalResource","toUpperCase","moment","inputDate","isAfter","dateOfBirth","year","match","o","otherField","re","required","min","validate","start","end","startDate","endDate","isMoment","isBefore","isSame","selCountryUpper","SelectedCountryGID","constant","validate_MustBeNumeric_Key","isEmptyVal"],"sources":["assets/js/sm.knockoutHandlers.js"],"mappings":"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","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_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['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\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 jQuery.extend(true, sm.portal.knockout, {\r\n getValue: getValue,\r\n dictionaryItem: dictionaryItem,\r\n format: format,\r\n });\r\n})(jQuery);"]}