{"version":3,"file":"sm.portal.ui.min.js","names":["_baseApiUri","_currentPersonId","_currentStudentId","_currentAdvisorId","_themeRelativePath","_uploadPath","_customerUploadPath","_ajaxUri","_isLogout","_registrationUri","_wpLocale","$","undefined","sm","window","initPage","scriptParams","CurrentPersonId","CurrentStudentId","CurrentAdvisorId","BaseApiUrl","ThemeRelativePath","UploadPath","CustomerUploadPath","AjaxUrl","IsLogout","RegistrationUrl","Locale","portal","utility","isNullEmptyOrNothing","substr","length","smapi","constant","accountDebugFlag","console","log","access","logout","document","ready","ajaxSend","event","jqxhr","settings","url","toLowerCase","indexOf","setRequestHeader","val","trigger","blockUI","defaults","message","getResourceValue","ui","hideElements","ko","validation","init","messageTemplate","readyPage","optionalFeatureToggle","flagMobile","tabs","itemMenu","detailedList","detailedTable","comboBox","loginWidgetOverride","toggleSessionStartDate","toggleSectionVisibility","keywordSearch","unobtrusiveScrollTop","simpleContainerToggle","displayU4AboutDialog","keyboardNav","widget","aria","ariaLabel","resizePage","tableOverflow","resizeLightbox","createProfileImageEditor","not","click","bodyContent","buttonContent","lightBox","validateUploadedFile","uploadFile","attr","on","extension","replace","size","files","inArray","hideInformationMessage","showErrorMessage","showInformationMessage","hideErrorMessage","jQuery","e","file","form","FormData","append","ajax","type","contentType","data","headers","processData","crossDomain","xhrFields","withCredentials","success","result","setProfilePhoto","removeLightbox","error","xhr","responseJSON","input","reader","FileReader","onload","target","readAsDataURL","addClass","removeClass","errorMessage","text","loadingIndicator","element","main","closest","control","find","successIndicator","reenrollment","finalFile","statusHidden","updateStatus","Payload","elementID","documentStatus","page","documentChecklist","doApplicationUpdate","clearUpload","each","that","this","mySet","myTab","keyboardControl","css","stopPropagation","removeAttr","hide","fadeIn","first","show","is","responsiveTabs","tabSet","tabWrapper","resizeTimeout","actualTabWidth","getTotalTabWidth","checkTabOverflow","clearTimeout","setTimeout","tabset","totalTabWidth","getHiddenDimensions","outerWidth","tabBar","innerWidth","responsiveTabMenu","children","tabMenuBtn","tabDropMenu","hasClass","responsiveTabSync","activeTab","tabDropMenuTabs","title","content","baseClass","callback","hideContentOnClose","footerContent","closeCallback","noModalHeight","noModalContentHeight","id","focusableElement","originalPosition","scrollTop","base","setModalHeight","setModalContentHeight","overlay","modal","after","theme","freezeContent","appendTo","height","html","last","closeLightbox","isNullOrEmpty","eval","modalNav","lightBoxLogout","sponsorLightBox","closeSponsorLightbox","which","cb","originalPos","one","keyCode","remove","unfreezeContent","restorePosition","executeFunctionByName","loadOrCreateLightbox","matches","focus","giveContentFocus","syntaxHighlight","json","match","cls","test","RecordPagingViewModel","Page","observable","PageNumber","computed","parseInt","PageCount","PageSize","RecordCount","CounterDisplay","DataSourceUrl","DataResponseFunc","container","pagingContent","FirstPageNavDisabled","LastPageNavDisabled","PreviousPageNavDisabled","NextPageNavDisabled","BindNavigation","self","closeButton","GetData","PageReady","dataType","textStatus","jqXHR","ApiContainerModel","Status","ValidationTitle","ValidationMessages","PagingData","temp","applyBindingsToNode","template","name","HandleError","unblockUI","exception","viewModel","messages","IsError","ErrorMessages","ErrorHeader","observableArray","mainParent","myWidth","parentWidth","phoneView","defaultView","isAPASFeatureEnabled","isEUFeatureEnabled","isUKFeatureEnabled","myButton","myMenu","uploadDocument","preventDefault","renderDetailedListItem","myList","itemDetails","hasDetails","childButtons","childLinks","otherClickExclusions","isSingleOpen","hasTabs","childCheckbox","off","stopImmediatePropagation","hasAttribute","innerButton","next","renderDetailedTableItem","myDetailsItem","allButtons","hideAction","combobox","scrollTo","el","animate","offset","top","destination","slidepane","closeAllSlideups","selected","statusIcon","mySection","getAdvancedSearchElements","o","basicSearchBox","basicSearchBtn","advSearchActivation","expansionIcon","searchArea","siblings","se","advanceSearchActivate","openAdvancedSearch","closeAdvancedSearch","slideDown","slideUp","functionName","context","args","slice","call","arguments","splice","namespaces","split","func","pop","i","apply","setThirdPartyNotice","setCookie","cname","cvalue","exdays","d","Date","setTime","getTime","expires","toUTCString","cookie","setSessionCookie","getCookie","ca","decodeURIComponent","c","charAt","substring","clickable","icon","relatedContainer","ColumnDefinition","displayName","fieldName","isSortable","dataFormatter","htmlElement","onClickHandler","customClass","staticContent","DisplayName","FieldName","IsSortable","DataFormatter","ColumnDataFormatters","Simple","HtmlElement","OnClickHandler","CustomClass","StaticContent","TableConfiguration","tableId","header","dataLoadHandler","columnDefinitions","paginationEnabled","pageSize","defaultSorting","filterTemplateId","filterViewModel","settingsTemplateId","settingsViewModel","TableId","Header","DataLoadHandler","ColumnDefinitions","PaginationEnabled","DefaultSorting","FilteringEnabled","FilterTemplateId","FilterViewModel","SettingsEnabled","SettingsTemplateId","SettingsViewModel","TableData","rows","totalRowsCount","Rows","TotalRowsCount","TableDataLoadParameters","Top","Skip","Sorting","Filters","FilterViewModelBase","TableHeader","ApplyFiltersTrigger","ClearFiltersTrigger","IsInitialized","Initialize","tableHeader","applyFiltersTrigger","clearFiltersTrigger","subscribe","ApplyFiltersClick","elem","filters","Configuration","_","config","value","ObservableFieldName","push","FilterDefinition","FilterFieldName","FilterOperator","ClearFiltersClick","OnOpen","appliedFilters","grep","f","Operator","filterValue","Value","SettingsViewModelBase","ApplySettingsTrigger","ClearSettingsTrigger","applySettingsTrigger","clearSettingsTrigger","ApplySettingsClick","ClearSettingsClick","appliedSettings","TableViewModel","configuration","AppliedFilters","FilterVisible","AppliedSettings","SettingsVisible","InitializeFiltering","InitializeSettings","LoadData","pageNumber","sorting","dataLoadParameters","Settings","BlockTable","tableData","UnblockTable","SortBy","columnDefinition","SortingDirection","Asc","invertedDirection","Direction","Desc","ResetSorting","UIPresentedRowsFrom","pureComputed","PresentedRowsFrom","PresentedRowsTo","CanGoToNextPage","GoToNextPage","nextPageNumber","CanGoToPreviousPage","GoToPreviousPage","previousPageNumber","CanGoToFirstPage","GoToFirstPage","CanGoToLastPage","GoToLastPage","lastPageNumber","Math","ceil","OnClick","rowData","$Table","block","unblock","ApplyFilter","ClearFilter","ToggleFilter","modalTabbing","currentTarget","needRefresh","FilterButtonStyle","ApplySettings","ClearSettings","Object","keys","ToggleSettings","SettingsButtonStyle","InformationMessageViewModel","Messages","ShowMessages","extend","Money","parseFloat","toFixed","LocaleDate","u4sm_canada_enabled","moment","format","toLocaleDateString","LocaleDateTime","date","toLocaleTimeString","Percent","Translation","onDelayed","fn","eventName","delayInMs","_timeout","cleanWhitespace","contents","filter","nodeType","nodeValue","includeMargin","$item","props","position","visibility","display","dim","width","innerHeight","outerHeight","$hiddenParents","parents","andSelf","oldProps","old","style"],"sources":["assets/js/ui/sm.portal.ui.js"],"mappings":"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","ignoreList":[],"sourcesContent":["// NEW PLACEHOLDER FOR BASE API URI - Not the final place, but it's unique across the Portal Pages.\r\nvar _baseApiUri = ''; // The Base URI for the API Service Calls - Loaded from Wordpress or sm.portal.local.js\r\nvar _currentPersonId = 0; // The Currently Logged in Person ID - Loaded from WordPress or sm.portal.local.js\r\nvar _currentStudentId = 0; // The Currently Logged in Student ID - Loaded from WordPress or sm.portal.local.js (will be 0 for a valid person that is not a student)\r\nvar _currentAdvisorId = 0; // The Currently Logged in Student ID - Loaded from WordPress or sm.portal.local.js (will be 0 for a valid person that is not a student)\r\nvar _themeRelativePath = '';\r\nvar _uploadPath = ''; // Plugin folder\r\nvar _customerUploadPath = ''; // Uploads folder\r\nvar _ajaxUri = '';\r\nvar _isLogout = 'false';\r\nvar _registrationUri = '';\r\nvar _wpLocale = '';\r\n\r\n(function ($, undefined) {\r\n var sm = window.sm = window.sm || {};\r\n\r\n if (typeof sm.portal === \"undefined\") {\r\n $.extend(sm, { portal: {} });\r\n }\r\n if (typeof sm.portal.ui === \"undefined\") {\r\n $.extend(sm.portal, { ui: {} });\r\n }\r\n\r\n function initPage() {\r\n\r\n // bring in the WordPress parameters\r\n _currentPersonId = scriptParams.CurrentPersonId;\r\n _currentStudentId = scriptParams.CurrentStudentId;\r\n _currentAdvisorId = scriptParams.CurrentAdvisorId;\r\n _baseApiUri = scriptParams.BaseApiUrl;\r\n _themeRelativePath = scriptParams.ThemeRelativePath;\r\n _uploadPath = scriptParams.UploadPath;\r\n _customerUploadPath = scriptParams.CustomerUploadPath;\r\n _ajaxUri = scriptParams.AjaxUrl;\r\n _isLogout = scriptParams.IsLogout;\r\n _registrationUri = scriptParams.RegistrationUrl;\r\n _wpLocale = scriptParams.Locale;\r\n\r\n // Check for trailing / in the API URL\r\n if (!sm.portal.utility.isNullEmptyOrNothing(_baseApiUri)) {\r\n var lastChar = _baseApiUri.substr(_baseApiUri.length - 1);\r\n if (lastChar != '/') {\r\n _baseApiUri = _baseApiUri + '/';\r\n }\r\n }\r\n\r\n if (smapi.constant.accountDebugFlag) {\r\n console.log('Got WP Params, PersonId: ' + _currentPersonId + ', StudentId: ' + _currentStudentId + ', AdvisorId: ' + _currentAdvisorId + ', API: ' + _baseApiUri + ', RelThemePath: ' + _themeRelativePath + ', UploadPath: ' + _uploadPath + ', CustomerUploadPath: ' + _customerUploadPath + ', Registration: ' + _registrationUri + ', Locale: ' + _wpLocale);\r\n console.log('Got WP Params (2), IsLogout: ' + _isLogout);\r\n console.log('_ajaxUri: ' + _ajaxUri);\r\n }\r\n\r\n if (_isLogout == 'true') {\r\n // Call the Logout\r\n smapi.access.logout(_baseApiUri, function () { console.log('Logged Out!'); });\r\n\r\n // Clear the flag (reverse it)\r\n _isLogout = 'false';\r\n }\r\n\r\n $(document).ready(function () {\r\n $(document).ajaxSend(function (event, jqxhr, settings) {\r\n if (settings.url.toLowerCase().indexOf(_baseApiUri.toLowerCase()) === 0) {\r\n jqxhr.setRequestHeader('__RequestVerificationToken', $('input[name=__RequestVerificationToken]').val());\r\n }\r\n });\r\n });\r\n\r\n // custom pre-event\r\n $(document).trigger('beforeSMInitPage');\r\n\r\n // Set localizalize Block UI Message\r\n $.blockUI.defaults.message = '

' + sm.portal.utility.getResourceValue('PleaseWait') + '

';\r\n\r\n // flag elements to hide\r\n sm.portal.ui.hideElements();\r\n\r\n //Set Knockout validations defaults\r\n // THIS REALLY SLOWED EVERYTHING DOWN, it would stall every now and then on validation\r\n //ko.validation.configuration.grouping.deep = true;\r\n var knockoutValidationSettings = {\r\n messageTemplate: 'smFieldError'\r\n };\r\n\r\n // VERY IMPORTANT - TRUE, otherwise some custom validation may not be initialized\r\n ko.validation.init(knockoutValidationSettings, true);\r\n\r\n // any init page work goes here\r\n sm.portal.ui.readyPage();\r\n\r\n // custom post-event\r\n $(document).trigger('afterSMInitPage');\r\n }\r\n\r\n function readyPage() {\r\n\r\n // custom pre-event\r\n $(document).trigger('beforeSMReadyPage');\r\n\r\n // any ready page work goes here\r\n sm.portal.ui.optionalFeatureToggle();\r\n sm.portal.utility.flagMobile();\r\n sm.portal.ui.tabs();\r\n sm.portal.ui.itemMenu();\r\n sm.portal.ui.detailedList();\r\n sm.portal.ui.detailedTable();\r\n sm.portal.ui.comboBox();\r\n sm.portal.ui.loginWidgetOverride();\r\n sm.portal.ui.toggleSessionStartDate();\r\n sm.portal.ui.toggleSectionVisibility();\r\n sm.portal.ui.keywordSearch();\r\n //sm.portal.ui.createProfileImageEditor();\r\n unobtrusiveScrollTop();\r\n sm.portal.ui.simpleContainerToggle();\r\n sm.portal.utility.displayU4AboutDialog();\r\n\r\n // custom post-event\r\n $(document).trigger('afterSMReadyPage');\r\n\r\n /*\r\n * Accessibility\r\n * See sm.keyboardnav.js \r\n */\r\n sm.portal.keyboardNav.widget();\r\n sm.portal.keyboardNav.aria(); // If this is placed in initPage, ul.detailedList > li will not receive attr('aria-...');\r\n sm.portal.keyboardNav.ariaLabel();\r\n }\r\n\r\n function resizePage() {\r\n\r\n // custom pre-event\r\n $(document).trigger('beforeSMResizePage');\r\n\r\n // any resize page work goes here\r\n sm.portal.ui.tableOverflow();\r\n sm.portal.ui.resizeLightbox();\r\n\r\n // custom post-event\r\n $(document).trigger('afterSMResizePage');\r\n\r\n }\r\n\r\n /*********************************************************************************/\r\n /* Edit Profile Image Window */\r\n /*********************************************************************************/\r\n function createProfileImageEditor() {\r\n $('#profilePhoto, .work-text-content').not('[data-processed=\"true\"]').click(function () {\r\n var bodyContent ='

' + sm.portal.utility.getResourceValue('ImageInformationMessage') + '

' +\r\n '

' +\r\n '
' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
';\r\n var buttonContent = '';\r\n\r\n // show dialog\r\n sm.portal.ui.lightBox(sm.portal.utility.getResourceValue('AddFile'), bodyContent, ' smallDialog', null, null, buttonContent);\r\n validateUploadedFile();\r\n uploadFile();\r\n });\r\n $('#profilePhoto').attr('data-processed', true);\r\n $('.work-text-content').attr('data-processed', true);\r\n }\r\n function validateUploadedFile() {\r\n $(document).on('change', '#uploadedProfilePhoto', function () {\r\n var extension = $('#uploadedProfilePhoto').val().replace(/^.*\\./, '').toLowerCase();\r\n var allowedFileExtensions = ['jpeg', 'jpg', 'png', 'bmp'];\r\n var size = $('#uploadedProfilePhoto')[0].files[0].size;\r\n var allowedSize = 2097152; //2MB\r\n\r\n if ($.inArray(extension, allowedFileExtensions) == -1) {\r\n hideInformationMessage();\r\n showErrorMessage(sm.portal.utility.getResourceValue('ImageExtensionErrorMessage'));\r\n }\r\n else if (size > allowedSize) {\r\n hideInformationMessage();\r\n showErrorMessage(sm.portal.utility.getResourceValue('ImageSizeErrorMessage'));\r\n }\r\n else {\r\n showInformationMessage();\r\n hideErrorMessage();\r\n }\r\n });\r\n }\r\n function uploadFile() {\r\n jQuery('.confirmBtn').click(function (e) {\r\n var url = _baseApiUri + 'api/studentprofile/UploadProfilePhoto';\r\n var file = $('#uploadedProfilePhoto')[0].files[0];\r\n var form = new FormData();\r\n form.append('uploadedProfilePhoto', file);\r\n\r\n $.ajax({\r\n type: \"POST\",\r\n url: url,\r\n contentType: false,\r\n data: form,\r\n headers: {\r\n \"x-api-version\": '1'\r\n },\r\n processData: false,\r\n crossDomain: true,\r\n xhrFields: {\r\n withCredentials: true\r\n },\r\n success: function (result) {\r\n setProfilePhoto($('#uploadedProfilePhoto')[0]);\r\n sm.portal.ui.removeLightbox();\r\n },\r\n error: function (xhr) {\r\n showErrorMessage(xhr.responseJSON.error);\r\n }\r\n });\r\n });\r\n }\r\n\r\n function setProfilePhoto(input) {\r\n if (input.files && input.files[0]) {\r\n var reader = new FileReader();\r\n reader.onload = function (e) {\r\n $('#profilePhoto').attr('src', e.target.result);\r\n }\r\n reader.readAsDataURL(input.files[0]);\r\n }\r\n }\r\n\r\n function showInformationMessage() {\r\n $('#informationMessage').addClass('active');\r\n }\r\n\r\n function hideInformationMessage() {\r\n $('#informationMessage').removeClass('active');\r\n }\r\n\r\n function showErrorMessage(errorMessage) {\r\n $('#errorMessage').addClass('active');\r\n $('#errorMessage').text(errorMessage);\r\n $('.confirmBtn').attr(\"disabled\", true);\r\n }\r\n\r\n function hideErrorMessage() {\r\n $('#errorMessage').removeClass('active');\r\n $('.confirmBtn').attr(\"disabled\", false);\r\n }\r\n\r\n /*********************************************************************************/\r\n /* Upload UI Methods */\r\n /*********************************************************************************/\r\n function loadingIndicator(element) {\r\n\r\n var that = $(element);\r\n var main = that.closest('.uploadArea');\r\n var control = main.find('.uploadBox');\r\n var loadingIndicator = main.find('.loadingIndicator');\r\n var finalFile = main.find('div.fileThumb');\r\n\r\n // Hide upload control\r\n control.addClass('hidden');\r\n loadingIndicator.addClass('active');\r\n }\r\n\r\n function successIndicator(element, data, reenrollment) {\r\n var that = $(element);\r\n var main = that.closest('.uploadArea');\r\n var control = main.find('.uploadBox');\r\n var loadingIndicator = main.find('.loadingIndicator');\r\n var finalFile = main.find('div.fileThumb');\r\n var clearButton = main.find('button.resetUpload');\r\n var statusHidden = main.find('[name=\"DocStatus\"]');\r\n var updateStatus = \"#Status\" + data.Payload.elementID;\r\n\r\n statusHidden.val(data.Payload.documentStatus);\r\n $(updateStatus).text(data.Payload.documentStatus);\r\n\r\n // Hide Loading Indicator\r\n loadingIndicator.removeClass('active');\r\n finalFile.addClass('active');\r\n\r\n if (reenrollment === undefined) {\r\n sm.portal.page.documentChecklist.doApplicationUpdate();\r\n }\r\n }\r\n\r\n function clearUpload(element) {\r\n var that = $(element);\r\n var main = that.closest('.uploadArea');\r\n var control = main.find('.uploadBox');\r\n var finalFile = main.find('div.fileThumb');\r\n var clearButton = main.find('button.resetUpload');\r\n\r\n clearButton.on('click', function () {\r\n finalFile.removeClass('active');\r\n control.removeClass('hidden');\r\n });\r\n } \r\n\r\n /*********************************************************************************/\r\n /* Tabs UI & Responsive Tab Methods */\r\n /*********************************************************************************/\r\n function tabs() {\r\n $('[data-activate-tab]').not('[data-processed=\"true\"]').each(function () {\r\n var that = $(this);\r\n var mySet = that.closest('.tabSet');\r\n var myTab = that.attr('data-activate-tab');\r\n\r\n // accessibility\r\n sm.portal.keyboardNav.keyboardControl(that);\r\n\r\n // Wire Up Show/Hide\r\n that.on('click', function (e) {\r\n\r\n // get rid of accessibility outline on click\r\n that.css('outline', 'none');\r\n\r\n e.stopPropagation();\r\n // Hide others\r\n mySet.find('.activeTab').removeAttr('active-tab').removeClass('activeTab');\r\n mySet.find('[data-tab-content]').removeAttr('active-tab').removeClass('activeTab').hide();\r\n\r\n // Show current\r\n that.addClass('activeTab').attr('active-tab', 'true');\r\n mySet.find('[data-tab-content=\"' + myTab + '\"]').attr('active-tab', 'true').addClass('activeTab').fadeIn();\r\n }).attr('data-processed', true);\r\n\r\n // reset when leaving\r\n that.on('blur', function () {\r\n that.css('outline', '');\r\n });\r\n\r\n // Show Default or First Tab\r\n $('.tabSet').not('[data-processed=\"true\"]').each(function () {\r\n var that = $(this);\r\n\r\n that.find('[data-tab-content]').first().addClass('activeTab').attr('active-tab', 'true').show();\r\n that.find('[data-activate-tab]').first().addClass('activeTab').attr('active-tab', 'true');\r\n\r\n that.attr('data-processed', true);\r\n });\r\n\r\n // might as well do responsive tab init here\r\n // This isn't ready for portal primetime yet. Working in Admin, but needs to be tweaked for portal\r\n // eventually merge back to this file\r\n // until then - do it in prototype.widget first\r\n //sm.portal.ui.responsiveTabs(mySet);\r\n\r\n if (!mySet.is('[data-not-responsive]')) {\r\n sm.portal.ui.responsiveTabs(mySet);\r\n }\r\n });\r\n }\r\n\r\n function responsiveTabs(tabSet) {\r\n\r\n // gather elements\r\n var that = tabSet.length > 0 ? $(tabSet) : $('.tabSet');\r\n var tabWrapper = that.find('.tabWrapper');\r\n var tabs = tabWrapper.find('[data-activate-tab]');\r\n\r\n // Ensure we have all we need, otherwise, just log it\r\n if (that.length == 0 || tabWrapper.length == 0 || tabs.length == 0) {\r\n //console.log('Something wrong with responsive tab wiring');\r\n return false;\r\n }\r\n\r\n else {\r\n var actualTabWidth = sm.portal.ui.getTotalTabWidth(that);\r\n var totalWidth = 0;\r\n var resizeTimeout;\r\n\r\n // check overflow on readyPage\r\n sm.portal.ui.checkTabOverflow(that, tabWrapper, actualTabWidth);\r\n\r\n // on each resize\r\n $(window).on('resize', function () {\r\n clearTimeout(resizeTimeout);\r\n resizeTimeout = setTimeout(function () {\r\n sm.portal.ui.checkTabOverflow(that, tabWrapper, actualTabWidth);\r\n }, 50);\r\n });\r\n }\r\n }\r\n\r\n function getTotalTabWidth(tabset) {\r\n var that = tabset.length > 0 ? $(tabset) : $('.tabSet');\r\n var tabWrapper = that.find('.tabWrapper');\r\n var tabs = tabWrapper.find('[data-activate-tab]');\r\n var totalTabWidth = 0;\r\n\r\n tabs.each(function () {\r\n //totalTabWidth += $(this).css('display', 'inline-block').outerWidth(true);\r\n totalTabWidth += $(this).getHiddenDimensions(true).outerWidth; // better method for getting width of hidden items\r\n })\r\n return totalTabWidth;\r\n }\r\n\r\n function checkTabOverflow(tabBar, tabWrapper, actualTabWidth) {\r\n if (tabWrapper.getHiddenDimensions(true).innerWidth < actualTabWidth) {\r\n tabBar.addClass('responsiveTabs');\r\n // wire up tab menu - pass in top level tabBar\r\n sm.portal.ui.responsiveTabMenu(tabBar, tabWrapper);\r\n }\r\n else {\r\n tabBar.removeClass('responsiveTabs');\r\n }\r\n }\r\n\r\n function responsiveTabMenu(tabBar, tabWrapper) {\r\n var inactiveTabs = tabWrapper.children('[data-activate-tab]').not('.activeTab');\r\n var tabMenuBtn = tabBar.find('.tabMenuBtn');\r\n var tabDropMenu = tabBar.find('.tabDropMenu');\r\n\r\n tabMenuBtn.not('[data-tabmenubtn-processed=\"true\"]').on('click', function () {\r\n if (!$(this).hasClass('active')) {\r\n tabDropMenu.find(\"[data-activate-tab].activeTab\").removeClass(\"activeTab\");\r\n $(this).addClass('active');\r\n\r\n // just to prevent theme footer from cutting off menu (portal block registration)\r\n $(this).closest('section').css('overflow', 'visible');\r\n\r\n sm.portal.ui.responsiveTabSync(tabBar, $(this));\r\n tabDropMenu.show();\r\n\r\n }\r\n else {\r\n $(this).removeClass('active');\r\n tabDropMenu.hide();\r\n\r\n // just to prevent theme footer from cutting off menu (portal block registration)\r\n $(this).closest('section').removeAttr('style');\r\n }\r\n });\r\n tabMenuBtn.attr('data-tabmenubtn-processed', true);\r\n }\r\n\r\n function responsiveTabSync(tabBar, tabMenuBtn) {\r\n var activeTab = tabBar.find('[data-activate-tab].activeTab').attr('data-activate-tab'); // this should always be fresh to check for newly added tabs\r\n var tabDropMenu = tabBar.find('.tabDropMenu');\r\n var tabDropMenuTabs = tabDropMenu.find('[data-activate-tab]');\r\n\r\n // sync active tab into dropdown\r\n $('.tabDropMenu [data-activate-tab=\"' + activeTab + '\"]').addClass('activeTab');\r\n\r\n\r\n tabDropMenuTabs.not('[drop-tab-wired=\"true\"]').each(function () {\r\n $(this).on('click', function () {\r\n activeTab = $(this).attr('data-activate-tab');\r\n // update droptabs\r\n tabDropMenuTabs.removeClass('activeTab');\r\n $(this).addClass('activeTab');\r\n\r\n //update core tabbar\r\n tabBar.find('[data-activate-tab].activeTab').removeClass('activeTab');\r\n tabBar.find('[data-activate-tab=\"' + activeTab + '\"]').addClass('activeTab');\r\n\r\n tabDropMenu.hide();\r\n tabMenuBtn.removeClass('active');\r\n\r\n });\r\n\r\n $(this).attr('drop-tab-wired', true);\r\n });\r\n }\r\n\r\n\r\n\r\n /*********************************************************************************/\r\n /* API Lightbox Model Dialog Methods */\r\n /*********************************************************************************/\r\n function lightBox(title, content, baseClass, callback, hideContentOnClose, footerContent, closeCallback, noModalHeight, noModalContentHeight, id, focusableElement) {\r\n // Portal Responsive Lightbox Custom Code\r\n // Generic Portal Lightbox - Pass in Title/Content\r\n\r\n var originalPosition = $('[data-original-position]').length > 0 ? $('[data-original-position]').attr('data-original-position') : $(window).scrollTop();\r\n var base = baseClass == null ? \"\" : baseClass;\r\n var setModalHeight = (noModalHeight == 'true' || noModalHeight == true) ? 'data-no-auto-height' : '';\r\n var setModalContentHeight = (noModalContentHeight == 'true' || noModalContentHeight == true) ? 'data-no-auto-height' : '';\r\n var overlay = $('
');\r\n //we always want the About Box to be at the top\r\n if (!sm.portal.utility.isNullEmptyOrNothing(id) && id == \"AboutBox\") {\r\n overlay.attr(\"style\", \"z-index: 1000\");\r\n }\r\n\r\n //dummy anchor to get focus\r\n var modal = $('

' + title + '


' + title + ' Dialog ');\r\n\r\n // set or re-set the original position value\r\n $('body').attr('data-original-position', originalPosition);\r\n\r\n // only create footer if we have footer content\r\n if (!sm.portal.utility.isNullEmptyOrNothing(footerContent)) {\r\n footerContent = $('
)').append(footerContent);\r\n $(modal).find('.smModalContent').after(footerContent);\r\n }\r\n\r\n\r\n\r\n // freeze the dom\r\n sm.portal.theme.freezeContent();\r\n\r\n // Append overlay and grow\r\n overlay.appendTo('body').height($(window).height() + 'px');\r\n // Add the content\r\n modal.find('.smModalContent').html(content);\r\n // Append and set heights\r\n //some cases there can be two divs so calling last picks the correct one\r\n modal.appendTo('.smOverlay').last().addClass('active');\r\n // wire up closing\r\n //if there is an id we need to pass it in, if two lightboxes are up it will close both\r\n sm.portal.ui.closeLightbox(id, closeCallback, originalPosition, focusableElement);\r\n\r\n // execute callback if exists\r\n if (!sm.portal.utility.isNullOrEmpty(callback) && typeof callback === 'function') {\r\n eval(callback());\r\n }\r\n\r\n sm.portal.ui.resizeLightbox();\r\n /*\r\n * Accessibility\r\n * See sm.keyboardnav.js\r\n\r\n * modalNav()\r\n * Give first tabbable element in modal focus and keep tabbing focus within modal.\r\n */\r\n sm.portal.keyboardNav.modalNav();\r\n }\r\n function lightBoxLogout(title, content, baseClass, callback, hideContentOnClose, footerContent, closeCallback, noModalHeight, noModalContentHeight, id, focusableElement) {\r\n // Portal Responsive Lightbox Custom Code\r\n // Generic Portal Lightbox - Pass in Title/Content\r\n\r\n var originalPosition = $('[data-original-position]').length > 0 ? $('[data-original-position]').attr('data-original-position') : $(window).scrollTop();\r\n var base = baseClass == null ? \"\" : baseClass;\r\n var setModalHeight = (noModalHeight == 'true' || noModalHeight == true) ? 'data-no-auto-height' : '';\r\n var setModalContentHeight = (noModalContentHeight == 'true' || noModalContentHeight == true) ? 'data-no-auto-height' : '';\r\n var overlay = $('
');\r\n //we always want the About Box to be at the top\r\n if (!sm.portal.utility.isNullEmptyOrNothing(id) && id == \"AboutBox\") {\r\n overlay.attr(\"style\", \"z-index: 1000\");\r\n }\r\n\r\n //dummy anchor to get focus\r\n var modal = $('

' + title + '


' + title + ' Dialog ');\r\n\r\n // set or re-set the original position value\r\n $('body').attr('data-original-position', originalPosition);\r\n\r\n // only create footer if we have footer content\r\n if (!sm.portal.utility.isNullEmptyOrNothing(footerContent)) {\r\n footerContent = $('
)').append(footerContent);\r\n $(modal).find('.smModalContent').after(footerContent);\r\n }\r\n\r\n // freeze the dom\r\n sm.portal.theme.freezeContent();\r\n // Append overlay and grow\r\n overlay.appendTo('body').height($(window).height() + 'px');\r\n // Add the content\r\n modal.find('.smModalContent').html(content);\r\n // Append and set heights\r\n //some cases there can be two divs so calling last picks the correct one\r\n modal.appendTo('.smOverlay').last().addClass('active');\r\n // wire up closing\r\n //if there is an id we need to pass it in, if two lightboxes are up it will close both\r\n sm.portal.ui.closeLightbox(id, closeCallback, originalPosition, focusableElement);\r\n\r\n // execute callback if exists\r\n if (!sm.portal.utility.isNullOrEmpty(callback) && typeof callback === 'function') {\r\n eval(callback());\r\n }\r\n\r\n sm.portal.ui.resizeLightbox();\r\n /*\r\n * Accessibility\r\n * See sm.keyboardnav.js\r\n\r\n * modalNav()\r\n * Give first tabbable element in modal focus and keep tabbing focus within modal.\r\n */\r\n sm.portal.keyboardNav.modalNav();\r\n }\r\n\r\n function sponsorLightBox(title, content, baseClass, callback, hideContentOnClose, footerContent, closeCallback, noModalHeight, noModalContentHeight, id, focusableElement) {\r\n // Portal Responsive Lightbox Custom Code\r\n // Generic Portal Lightbox - Pass in Title/Content\r\n\r\n var originalPosition = $('[data-original-position]').length > 0 ? $('[data-original-position]').attr('data-original-position') : $(window).scrollTop();\r\n var base = baseClass == null ? \"\" : baseClass;\r\n var setModalHeight = (noModalHeight == 'true' || noModalHeight == true) ? 'data-no-auto-height' : '';\r\n var setModalContentHeight = (noModalContentHeight == 'true' || noModalContentHeight == true) ? 'data-no-auto-height' : '';\r\n var overlay = $('
');\r\n //we always want the About Box to be at the top\r\n if (!sm.portal.utility.isNullEmptyOrNothing(id) && id == \"AboutBox\") {\r\n overlay.attr(\"style\", \"z-index: 1000\");\r\n }\r\n\r\n //dummy anchor to get focus\r\n var modal = $('

' + title + '


' + title + ' Dialog ');\r\n\r\n // set or re-set the original position value\r\n $('body').attr('data-original-position', originalPosition);\r\n\r\n // only create footer if we have footer content\r\n if (!sm.portal.utility.isNullEmptyOrNothing(footerContent)) {\r\n footerContent = $('
)').append(footerContent);\r\n $(modal).find('.smModalContent').after(footerContent);\r\n }\r\n\r\n\r\n\r\n // freeze the dom\r\n sm.portal.theme.freezeContent();\r\n\r\n // Append overlay and grow\r\n overlay.appendTo('body').height($(window).height() + 'px');\r\n // Add the content\r\n modal.find('.smModalContent').html(content);\r\n // Append and set heights\r\n //some cases there can be two divs so calling last picks the correct one\r\n modal.appendTo('.smOverlay').last().addClass('active');\r\n // wire up closing\r\n //if there is an id we need to pass it in, if two lightboxes are up it will close both\r\n sm.portal.ui.closeSponsorLightbox(id, closeCallback, originalPosition, focusableElement);\r\n\r\n // execute callback if exists\r\n if (!sm.portal.utility.isNullOrEmpty(callback) && typeof callback === 'function') {\r\n eval(callback());\r\n }\r\n\r\n sm.portal.ui.resizeLightbox();\r\n /*\r\n * Accessibility\r\n * See sm.keyboardnav.js\r\n\r\n * modalNav()\r\n * Give first tabbable element in modal focus and keep tabbing focus within modal.\r\n */\r\n sm.portal.keyboardNav.modalNav();\r\n }\r\n\r\n // Lightbox Closing by 'Esc' or 'Close' button within overlay\r\n function closeSponsorLightbox(which, cb, originalPos, focusableElement) {\r\n\r\n which = ($('#' + which).length > 0 && $('#' + which).is('.smModal')) ? $('#' + which) : $('.smModal.active');\r\n\r\n originalPos = (typeof originalPos == 'number') ? originalPos : $('[data-original-position]').attr('data-original-position');\r\n\r\n // with escape key\r\n $(document).one('keyup', function (e) {\r\n if (e.keyCode == 27) {\r\n which.closest('.smOverlay').remove();\r\n\r\n sm.portal.theme.unfreezeContent();\r\n sm.portal.theme.restorePosition(originalPos);\r\n }\r\n\r\n // execute callback if exists\r\n if (cb != null && cb != '' && cb != 'undefined') {\r\n sm.portal.ui.executeFunctionByName(cb, window, null);\r\n }\r\n });\r\n\r\n // with close button\r\n which.find(\".smModalClose,[data-close-lightbox]\").on('click keypress', function (cb) {\r\n\r\n if (event.type === \"click\" || (event.type === \"keypress\" && (event.which == 13 || event.which == 32))) {\r\n which.closest('.smOverlay').remove();\r\n\r\n sm.portal.theme.unfreezeContent();\r\n sm.portal.theme.restorePosition(originalPos);\r\n\r\n // execute close callback\r\n if (cb != null && cb != '' && cb != 'undefined') {\r\n sm.portal.ui.executeFunctionByName(cb, window, null);\r\n }\r\n \r\n }\r\n });\r\n\r\n }\r\n\r\n // Lightbox reset content\r\n function loadOrCreateLightbox(title, content, baseClass, callback, hideContentOnClose, footerContent, closeCallback, noModalHeight, noModalContentHeight, id) {\r\n\r\n // Check for existing lightbox\r\n var matches = $(\"div.smModal.active\");\r\n if (matches.length == 0) {\r\n\r\n // Generate a new lightbox\r\n return lightBox(title, content, baseClass, callback, hideContentOnClose, footerContent, closeCallback, noModalHeight, noModalContentHeight, id);\r\n }\r\n\r\n // replace the content\r\n $(matches[0]).find(\"div.smModalContent\").html(content);\r\n\r\n // replace the footer\r\n if (!sm.portal.utility.isNullOrEmpty(footerContent)) {\r\n $(matches[0]).find(\"div.smModalFooter\").html(footerContent);\r\n }\r\n }\r\n\r\n // Lightbox resizing\r\n function resizeLightbox() {\r\n $('.smOverlay').height($(window).height() + 'px');\r\n $('.smModal').not('[data-no-auto-height]').height(($(window).height() /* - 60 */) + 'px');\r\n $('.smModalContent').not('[data-no-auto-height]').height($(window).height() - $('.smModalHeader').height() + 'px');\r\n }\r\n\r\n // Lightbox Closing by 'Esc' or 'Close' button within overlay\r\n function closeLightbox(which, cb, originalPos, focusableElement) {\r\n\r\n which = ($('#' + which).length > 0 && $('#' + which).is('.smModal')) ? $('#' + which) : $('.smModal.active');\r\n\r\n originalPos = (typeof originalPos == 'number') ? originalPos : $('[data-original-position]').attr('data-original-position');\r\n\r\n // with escape key\r\n $(document).one('keyup', function (e) {\r\n if (e.keyCode == 27) {\r\n which.closest('.smOverlay').remove();\r\n\r\n sm.portal.theme.unfreezeContent();\r\n sm.portal.theme.restorePosition(originalPos);\r\n }\r\n\r\n // execute callback if exists\r\n if (cb != null && cb != '' && cb != 'undefined') {\r\n sm.portal.ui.executeFunctionByName(cb, window, null);\r\n }\r\n });\r\n\r\n // with close button\r\n which.find(\".smModalClose,[data-close-lightbox]\").on('click keypress', function (cb) {\r\n\r\n if (event.type === \"click\" || (event.type === \"keypress\" && (event.which == 13 || event.which == 32))) {\r\n which.closest('.smOverlay').remove();\r\n\r\n sm.portal.theme.unfreezeContent();\r\n sm.portal.theme.restorePosition(originalPos);\r\n\r\n // execute close callback\r\n if (cb != null && cb != '' && cb != 'undefined') {\r\n sm.portal.ui.executeFunctionByName(cb, window, null);\r\n }\r\n if (!sm.portal.utility.isNullOrEmpty(focusableElement) && focusableElement.length > 0)\r\n focusableElement.focus();\r\n else\r\n sm.portal.keyboardNav.giveContentFocus('.smContentArea');\r\n }\r\n });\r\n\r\n\r\n\r\n }\r\n\r\n // Remove lightbox completely from the DOM\r\n function removeLightbox(element) {\r\n $('.smOverlay,.smModal').remove();\r\n // Unfreeze the dom for iOS\r\n sm.portal.theme.unfreezeContent();\r\n if (!sm.portal.utility.isNullOrEmpty(element) && element.length > 0)\r\n element.focus();\r\n else\r\n sm.portal.keyboardNav.giveContentFocus('.smContentArea');\r\n }\r\n\r\n\r\n\r\n /*********************************************************************************/\r\n /* Element Decoration Methods */\r\n /*********************************************************************************/\r\n function syntaxHighlight(json) {\r\n json = json.replace(/&/g, '&').replace(//g, '>');\r\n return json.replace(/(\"(\\\\u[a-zA-Z0-9]{4}|\\\\[^u]|[^\\\\\"])*\"(\\s*:)?|\\b(true|false|null)\\b|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)/g, function (match) {\r\n var cls = 'number';\r\n if (/^\"/.test(match)) {\r\n if (/:$/.test(match)) {\r\n cls = 'key';\r\n } else {\r\n cls = 'string';\r\n }\r\n } else if (/true|false/.test(match)) {\r\n cls = 'boolean';\r\n } else if (/null/.test(match)) {\r\n cls = 'null';\r\n }\r\n return '' + match + '';\r\n });\r\n }\r\n\r\n function hideElements() {\r\n if ($('.smContentArea.u4HideNav').length > 0) {\r\n $('.smContentArea.u4HideNav').removeClass('u4HideNav');\r\n $('body').addClass('u4HideNav');\r\n }\r\n\r\n if ($('.smContentArea.u4HideFooter').length > 0) {\r\n $('.smContentArea.u4HideFooter').removeClass('u4HideFooter');\r\n $('body').addClass('u4HideFooter');\r\n }\r\n }\r\n\r\n\r\n\r\n /*********************************************************************************/\r\n /* Standard Record Paging View Model */\r\n /*********************************************************************************/\r\n function RecordPagingViewModel() {\r\n\r\n // Pager Data Points\r\n // Current Page Index\r\n this.Page = ko.observable();\r\n // Current Page Number (Index + 1, handles 0-based indexes)\r\n this.PageNumber = ko.computed(function () {\r\n return (parseInt(this.Page()) + 1);\r\n }, this);\r\n // Total count of pages\r\n this.PageCount = ko.observable();\r\n // Page size\r\n this.PageSize = ko.observable(10);\r\n // Total Records returned\r\n this.RecordCount = ko.observable();\r\n\r\n // Read-Only display for user - \"Showing page X of X, X records total\"\r\n this.CounterDisplay = ko.computed(function () {\r\n return \"Showing page \" + this.PageNumber() + \" of \" + this.PageCount() + \", \" + this.RecordCount() + \" total records.\";\r\n \r\n }, this);\r\n\r\n // The URL used to retrieve the data to be paged \r\n this.DataSourceUrl = ko.observable();\r\n\r\n // The function that fires when data is loaded (i.e. how do we display the data, and the pager)\r\n this.DataResponseFunc = function (container, pagingContent) {\r\n\r\n };\r\n \r\n // Button Enable Calcuated functions - enable/disable navigation buttons according to the rules\r\n this.FirstPageNavDisabled = ko.computed(function () {\r\n if (this.Page() == 0)\r\n return true;\r\n return false;\r\n }, this);\r\n this.LastPageNavDisabled = ko.computed(function () {\r\n if (this.PageNumber() >= this.PageCount())\r\n return true;\r\n return false;\r\n }, this);\r\n this.PreviousPageNavDisabled = ko.computed(function () {\r\n return !(this.Page() > 0);\r\n }, this);\r\n this.NextPageNavDisabled = ko.computed(function () {\r\n return !(this.PageNumber() < this.PageCount());\r\n }, this);\r\n\r\n // Binds the click events to the navigation buttons\r\n this.BindNavigation = function () {\r\n // Bind the Next/Prev/First/Last buttons\r\n $('[data-paging-nav=\"true\"]').not('[data-paging-processed=\"true\"]').each(function () {\r\n var that = $(this);\r\n that.on('click', function () {\r\n\r\n // Update the page based on the Direction the button indicates\r\n // If we wanted to do a \"Select the Page\", we could modify this to accept an integer, and pass that (or another binding)\r\n var dir = that.attr('data-paging-nav-dir');\r\n switch (dir) {\r\n case \"firstPage\":\r\n self.Page(0);\r\n break;\r\n case \"previousPage\":\r\n self.Page(self.Page() - 1);\r\n break;\r\n case \"nextPage\":\r\n self.Page(self.Page() + 1);\r\n break;\r\n case \"lastPage\":\r\n self.Page(self.PageCount() - 1);\r\n break;\r\n }\r\n\r\n var closeButton = jQuery('.smModalClose');\r\n if (!sm.portal.utility.isNullOrEmpty(closeButton))\r\n closeButton.focus();\r\n self.GetData();\r\n });\r\n that.attr('data-paging-processed', true);\r\n });\r\n };\r\n\r\n // Standard PageReady function, calls on page refresh\r\n this.PageReady = function () {\r\n self.BindNavigation();\r\n };\r\n\r\n // Retrieves the data being paged.\r\n this.GetData = function () {\r\n\r\n $.blockUI();\r\n\r\n $.ajax({\r\n url: self.DataSourceUrl() + '&page=' + self.Page() + '&pageSize=' + self.PageSize(),\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, textStatus, jqXHR) {\r\n // Load the container\r\n var container = new smapi.access.ApiContainerModel(data.Status, data.Payload, data.ValidationTitle, data.ValidationMessages);\r\n if (data.Status == 'success') {\r\n\r\n // Set the internal Paging Data points (returned every getdata call)\r\n self.RecordCount(container.Payload.PagingData.RecordCount);\r\n self.PageCount(container.Payload.PagingData.PageCount);\r\n\r\n // Render the Paging Content\r\n var temp = $(\"
\");\r\n ko.applyBindingsToNode(temp[0], { template: { \"name\": \"RecordPagingTemplate\", \"data\": self } });\r\n var html = temp.html();\r\n temp.remove();\r\n\r\n // Call the handler function\r\n if (self.DataResponseFunc != null) {\r\n self.DataResponseFunc(container, html);\r\n }\r\n }\r\n else if (data.Status == 'validationerror') {\r\n self.HandleError(container.ValidationTitle, container.ValidationMessages);\r\n } else if (data.Status == 'error') {\r\n self.HandleError(container.ValidationTitle, container.ValidationMessages);\r\n }\r\n\r\n // Unblock and page-ready for binding\r\n $.unblockUI();\r\n self.PageReady();\r\n },\r\n error: function (jqXHR, exception) {\r\n viewModel.HandleError(exception);\r\n $.unblockUI();\r\n }\r\n });\r\n };\r\n\r\n // Error Handling\r\n this.HandleError = function (title, messages) {\r\n this.IsError(true);\r\n this.ErrorMessages(messages);\r\n if (sm.portal.utility.isNullOrEmpty(title)) {\r\n self.ErrorHeader(sm.portal.utility.getResourceValue('ThereWasAnError'));\r\n } else {\r\n self.ErrorHeader(title);\r\n }\r\n };\r\n this.ErrorHeader = ko.observable();\r\n this.ErrorMessages = ko.observableArray();\r\n this.IsError = ko.observable();\r\n\r\n // Self-Identification\r\n var self = this;\r\n return self;\r\n };\r\n\r\n\r\n\r\n /*********************************************************************************/\r\n /* Miscellaneous UI Methods */\r\n /*********************************************************************************/\r\n // TABLE OVERFLOW DETECTION\r\n // NOT SURE WHERE I INTENDED THIS TO BE USED, BUT WAY TOO INVASIVE - SCOPED MORE NARROWLY (using added class of 'responsiveTable') NOW TO BE APPLIED WHERE NEEDED\r\n function tableOverflow() {\r\n $('table.portalDefault.responsiveTable').each(function () {\r\n var that = $(this);\r\n var mainParent = that.closest('.flexWidget');\r\n var myWidth = that.outerWidth();\r\n var parentWidth = that.closest('.widgetContent').outerWidth();\r\n var phoneView = mainParent.find('.isPhone');\r\n var defaultView = mainParent.find('.notPhone');\r\n\r\n if (myWidth > parentWidth) {\r\n phoneView.show();\r\n defaultView.hide();\r\n }\r\n else {\r\n defaultView.show();\r\n phoneView.hide();\r\n }\r\n });\r\n }\r\n\r\n function optionalFeatureToggle() {\r\n //@TODO - This function will need to be modified once more optional features need to be added to Student Portal.\r\n $.blockUI();\r\n if (sm.portal.utility.isAPASFeatureEnabled()) {\r\n $('.EuOptionalFeatureShow').hide();\r\n $('.EuOptionalFeatureHide').show();\r\n $('.UkOptionalFeatureShow').hide();\r\n $('.UkOptionalFeatureHide').show();\r\n $('.ApasOptionalFeatureShow').show();\r\n $('.ApasOptionalFeatureHide').hide();\r\n\r\n }\r\n else if (sm.portal.utility.isEUFeatureEnabled()) {\r\n $('.UkOptionalFeatureShow').hide();\r\n $('.UkOptionalFeatureHide').show();\r\n $('.EuOptionalFeatureShow').show();\r\n $('.EuOptionalFeatureHide').hide();\r\n $('.ApasOptionalFeatureShow').hide();\r\n $('.ApasOptionalFeatureHide').show();\r\n\r\n }\r\n else if (sm.portal.utility.isUKFeatureEnabled()) {\r\n $('.EuOptionalFeatureShow').hide();\r\n $('.EuOptionalFeatureHide').show();\r\n $('.UkOptionalFeatureShow').show();\r\n $('.UkOptionalFeatureHide').hide();\r\n $('.ApasOptionalFeatureShow').hide();\r\n $('.ApasOptionalFeatureHide').show();\r\n\r\n }\r\n else {\r\n $('.EuOptionalFeatureShow').hide();\r\n $('.EuOptionalFeatureHide').show();\r\n $('.UkOptionalFeatureShow').hide();\r\n $('.UkOptionalFeatureHide').show();\r\n $('.ApasOptionalFeatureShow').hide();\r\n $('.ApasOptionalFeatureHide').show();\r\n }\r\n $.unblockUI();\r\n }\r\n\r\n // Widget Item Menu\r\n function itemMenu() {\r\n $('.flexWidget .itemMenu').not('[data-processed=\"true\"]').each(function () {\r\n var that = $(this);\r\n var myButton = that.find('.menuIcon');\r\n var myMenu = that.find('ul');\r\n\r\n myButton.on('click', function () {\r\n if (myMenu.hasClass('active')) {\r\n myMenu.removeClass('active');\r\n }\r\n else {\r\n myMenu.addClass('active');\r\n }\r\n });\r\n that.attr('data-processed', true);\r\n });\r\n }\r\n\r\n function uploadDocument(event, element) {\r\n event.preventDefault();\r\n\r\n if (!sm.portal.utility.isNullOrEmpty(element)) {\r\n if (event.which == 13) {\r\n jQuery(element).trigger('click');\r\n }\r\n }\r\n }\r\n\r\n // Detailed List - Special for KO Rewire\r\n function detailedList() { // Called in readyPage()\r\n $('ul.detailedList > li').each(function () {\r\n var that = $(this);\r\n\r\n if (!that.is('[data-processed]')) {\r\n sm.portal.ui.renderDetailedListItem(that);\r\n }\r\n\r\n else if (that.is('[data-processed]') && that.is('[data-ko-rewire]')) {\r\n that.removeAttr('data-processed');\r\n sm.portal.ui.renderDetailedListItem(that);\r\n }\r\n });\r\n }\r\n\r\n // Heavy Lifting for Detailed List Construct\r\n function renderDetailedListItem(that) {\r\n if ($(that).is('li')) {\r\n var myButton = that.find('.detailsIcon');\r\n var myList = that.closest('ul.detailedList');\r\n var itemDetails = that.find('.itemDetails');\r\n var hasDetails = (itemDetails.length > 0);\r\n var childButtons = that.find('button');\r\n var childLinks = that.find('[href]');\r\n var otherClickExclusions = that.find('[data-exclude-click]');\r\n var isSingleOpen = myList.is('[data-singleopen]');\r\n var tabSet = that.find('.tabSet');\r\n var hasTabs = (tabSet.length > 0);\r\n var childCheckbox = that.find('input:checkbox');\r\n\r\n // unbind click just in case something got through\r\n that.off('click');\r\n\r\n // unbind keyboard control to ensure no double wiring\r\n that.off('keydown');\r\n\r\n //keyboard accessibility for document upload \r\n jQuery(that).find('.uploadBox').on('keypress', function (event) {\r\n event.stopImmediatePropagation();\r\n if (event.which == 13) {\r\n jQuery(this).trigger('click');\r\n }\r\n });\r\n\r\n // fix for icons within disabled buttons propagating the click\r\n childButtons.each(function () {\r\n if ($(this)[0].hasAttribute('disabled')) {\r\n $(this).children('.icon').on('click', function (e) {\r\n e.stopPropagation();\r\n });\r\n }\r\n });\r\n\r\n // prevents keydown from activating parent\r\n childButtons.on('keydown', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n // Prevent Propagation of Internal Button Clicks\r\n childButtons.on('click', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n childLinks.on('click keydown', function (e) { \r\n e.stopPropagation();\r\n });\r\n\r\n otherClickExclusions.on('click', function (e) {\r\n e.stopPropagation();\r\n });\r\n\r\n childCheckbox.on('keydown click', function (event) {\r\n if (event.type === \"click\" || (event.type === \"keydown\" && (event.which == 13 || event.which == 32))) {\r\n event.stopPropagation();\r\n }\r\n });\r\n\r\n // If it has details, wire up the click event to show them\r\n if (hasDetails) {\r\n that.css('cursor', 'default').attr('data-hasdetails', true);\r\n myButton.css('cursor', 'pointer');\r\n \r\n // initialize aria expanded state\r\n that.attr('aria-expanded', false);\r\n\r\n //setting aria expanded when list state did not change\r\n if (that.hasClass('detailsShowing') && myButton.hasClass('hide')) {\r\n that.attr('aria-expanded', true);\r\n }\r\n\r\n myButton.off('click keypress');\r\n\r\n $(that).on('keydown', function (e) {\r\n if (e.which === 32) // the space key code\r\n {\r\n myButton.click();\r\n return false;\r\n }\r\n });\r\n\r\n // if only one at a time\r\n if (isSingleOpen) {\r\n\r\n myButton.on('click keypress', function (event) {\r\n if (event.type === \"click\" || (event.type === \"keypress\" && (event.which == 13 || event.which == 32))) {\r\n // close/revert others\r\n myList.find('[data-hasdetails]').not(myButton.closest('li')).each(function () {\r\n var that = $(this);\r\n var innerButton = that.find('.detailsIcon');\r\n var itemDetails = innerButton.next('.itemDetails');\r\n\r\n // toggle aria state\r\n that.attr('aria-expanded', false);\r\n\r\n innerButton.removeClass('hide').addClass('show');\r\n itemDetails.removeClass('active');\r\n that.removeClass('detailsShowing');\r\n });\r\n\r\n // Hide the item as needed\r\n if (myButton.hasClass('hide')) {\r\n\r\n // toggle aria state\r\n that.attr('aria-expanded', true);\r\n\r\n myButton.removeClass('hide').addClass('show');\r\n itemDetails.removeClass('active');\r\n that.removeClass('detailsShowing');\r\n }\r\n // Show the item as needed\r\n else {\r\n\r\n if (hasTabs) {\r\n tabSet.children('ul:first-child').children('li').first().click();\r\n }\r\n\r\n // toggle aria state\r\n that.attr('aria-expanded', false);\r\n\r\n myButton.removeClass('show').addClass('hide');\r\n itemDetails.addClass('active');\r\n that.addClass('detailsShowing');\r\n }\r\n }\r\n });\r\n }\r\n // open as many as you want\r\n else {\r\n //nested if added for keyboard functionality of span icon\r\n myButton.on('click keypress', function (event) { \r\n if (event.type === \"click\" || (event.type === \"keypress\" && (event.which == 13 || event.which == 32))) {\r\n if (myButton.hasClass('hide')) {\r\n // toggle aria state\r\n that.attr('aria-expanded', false);\r\n\r\n myButton.removeClass('hide').addClass('show');\r\n itemDetails.removeClass('active');\r\n that.removeClass('detailsShowing');\r\n }\r\n else {\r\n if (hasTabs) {\r\n tabSet.children('ul:first-child').children('li').first().click();\r\n }\r\n\r\n // toggle aria state\r\n that.attr('aria-expanded', true);\r\n\r\n myButton.removeClass('show').addClass('hide');\r\n itemDetails.addClass('active');\r\n that.addClass('detailsShowing');\r\n }\r\n }\r\n });\r\n }\r\n sm.portal.keyboardNav.keyboardControl(that);\r\n }\r\n that.attr('data-processed', true);\r\n }\r\n }\r\n\r\n function detailedTable() {\r\n $('tbody.detailedTable > tr').each(function () {\r\n var that = $(this);\r\n\r\n if (!that.is('[data-processed]')) {\r\n sm.portal.ui.renderDetailedTableItem(that);\r\n }\r\n });\r\n }\r\n\r\n function renderDetailedTableItem(that)\r\n {\r\n if ($(that).is('tr')) {\r\n \r\n $(that).find('td>span.detailsIcon').on('click keypress', function (event) {\r\n if (event.type === \"click\" || (event.type === \"keypress\" && (event.which == 13))) {\r\n\r\n var detailedTable = that.closest('tbody.detailedTable');\r\n var myDetailsItem = that.next('.itemDetails');\r\n var allButtons = detailedTable.find('.detailsIcon');\r\n var myButton = that.find('.detailsIcon');;\r\n var hideAction = myButton.hasClass('hide');\r\n\r\n allButtons.removeClass('hide').addClass('show');\r\n detailedTable.find('.itemDetails').removeClass('active');\r\n detailedTable.find('.tr:not(.itemDetails)').removeClass('detailsShowing');\r\n\r\n if (hideAction) {\r\n myButton.removeClass('hide').addClass('show');\r\n that.removeClass('detailsShowing');\r\n myButton.attr('aria-expanded', false);\r\n }\r\n else {\r\n myButton.attr('aria-expanded', true);\r\n myDetailsItem.addClass('active');\r\n myButton.removeClass('show').addClass('hide');\r\n detailedTable.find('tr.detailsShowing').removeClass('detailsShowing');\r\n that.addClass('detailsShowing');\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n // Combo-Box Control binding\r\n function comboBox() {\r\n // Combo box Handler\r\n $('[data-combo-box]').not(\"[data-processed=true]\").each(function () {\r\n $(this).attr('data-combobox-base-uri', _baseApiUri);\r\n $(this).combobox().attr('data-processed', true);\r\n });\r\n }\r\n\r\n // Adding our own scrollTo\r\n // Note 'el' must be a valid ID \r\n function scrollTo(el) {\r\n $('html,body').animate({ scrollTop: $('#' + el).offset().top + 'px' }, 50, 'swing');\r\n }\r\n\r\n // unobtrusive scroll to\r\n function unobtrusiveScrollTop() {\r\n $('[data-scroll-top]').not('[data-scroll-top=\"processed\"]').each(function () {\r\n var that = $(this);\r\n var destination = that.attr('data-scroll-top') == '' ? null : that.attr('data-scroll-top');\r\n\r\n if (destination == null) {\r\n destination = 'main_content';\r\n }\r\n\r\n if (destination != null && destination.length > 0) {\r\n // check if valid dom ID\r\n if ($('#' + destination).length > 0) {\r\n destination = destination;\r\n }\r\n else {\r\n //console.warn('SM Portal UI: No valid destination to scrollTo, scrolling to #main_content instead.');\r\n destination = 'main_content';\r\n }\r\n }\r\n\r\n\r\n that.on('click', function () {\r\n if ($('.smStickySlideup.inYourFace').length > 0) {\r\n // migrate this reference to slidepane (when ready)\r\n sm.portal.ui.slidepane.closeAllSlideups(sm.portal.ui.scrollTo, destination);\r\n }\r\n else {\r\n sm.portal.ui.scrollTo(destination);\r\n }\r\n sm.portal.keyboardNav.giveContentFocus('.smContentArea');\r\n });\r\n }).attr('data-scroll-top', 'processed');\r\n }\r\n\r\n //function needed to override the afo_widget_login post to allow for our own redirects\r\n function loginWidgetOverride() {\r\n $('[value=\"afo_user_login\"]').each(function () {\r\n $(this).val('afo_user_login_trs');\r\n });\r\n }\r\n\r\n // common session/date toggling\r\n // TODO: Make this generic for easy reuse\r\n // swap classing for inline hide/show\r\n function toggleSessionStartDate() {\r\n $('#sessionStartDateToggle input[type=\"radio\"]').not('[data-processed=\"true\"]').on('change', function () {\r\n var selected = $('#sessionStartDateToggle input[type=\"radio\"]:checked').length > 0 ? $('#sessionStartDateToggle input[type=\"radio\"]:checked') : null;\r\n if (selected != null && selected.attr('id') == 'dateOption') {\r\n $('#sessionStartDateSelector').find('#SessionSection').hide();\r\n $('#sessionStartDateSelector').find('#DateSection').show();\r\n\r\n }\r\n else if (selected != null && selected.attr('id') == 'sessionOption') {\r\n $('#sessionStartDateSelector').find('#DateSection').hide();\r\n $('#sessionStartDateSelector').find('#SessionSection').show();\r\n }\r\n\r\n }).attr('data-processed', true);\r\n }\r\n\r\n function toggleSectionVisibility() {\r\n $('[data-toggle-section]').not('[data-processed=\"true\"]').each(function () {\r\n var that = $(this);\r\n var statusIcon = $('');\r\n var mySection = $('[data-section=\"' + that.attr(\"data-toggle-section\") + '\"]');\r\n\r\n if (that.is('[data-default-open]')) {\r\n statusIcon.addClass('hide');\r\n that.append(statusIcon);\r\n mySection.show();\r\n }\r\n\r\n else {\r\n statusIcon.addClass('show');\r\n that.append(statusIcon);\r\n mySection.hide();\r\n }\r\n\r\n that.on('click', function () {\r\n if (mySection.is(':visible')) {\r\n statusIcon.removeClass('hide').addClass('show');\r\n mySection.hide();\r\n }\r\n else {\r\n statusIcon.removeClass('show').addClass('hide');\r\n mySection.show();\r\n }\r\n })\r\n\r\n }).attr('data-processed', true);\r\n }\r\n\r\n // Rounds up All Advanced Search Elements\r\n function getAdvancedSearchElements() {\r\n var o = {};\r\n\r\n o.keywordSearch = $('[data-keyword-search]');\r\n o.basicSearchBox = o.keywordSearch.find('[data-keyword-basic-input]');\r\n o.basicSearchBtn = o.keywordSearch.find('[data-keyword-basic-button]');\r\n o.advSearchActivation = o.keywordSearch.find('[data-adv-search-toggle]');\r\n o.expansionIcon = o.advSearchActivation.children('span.icon');\r\n o.searchArea = o.keywordSearch.siblings('[data-adv-search-fields]');\r\n\r\n return o;\r\n }\r\n\r\n // keyword (keyword) search\r\n function keywordSearch() {\r\n var se = sm.portal.ui.getAdvancedSearchElements();\r\n se.advSearchActivation.not('[data-processed=\"true\"]').on('click', function () {\r\n var advanceSearchActivate = jQuery('.regAdvancedSearchActivation');\r\n if (se.expansionIcon.hasClass('closed')) {\r\n // if closed\r\n sm.portal.ui.openAdvancedSearch();\r\n advanceSearchActivate.attr('aria-expanded', 'true');\r\n }\r\n else {\r\n // if open\r\n sm.portal.ui.closeAdvancedSearch();\r\n advanceSearchActivate.attr('aria-expanded', 'false');\r\n }\r\n }).attr('data-processed', true);\r\n }\r\n\r\n // Opens Advanced Search\r\n function openAdvancedSearch() {\r\n se = sm.portal.ui.getAdvancedSearchElements();\r\n\r\n // Activate the button\r\n se.advSearchActivation.addClass('active');\r\n\r\n // Disable basic search\r\n se.basicSearchBox.val('');\r\n se.basicSearchBox.attr('placeholder', sm.portal.utility.getResourceValue('UsingAdvancedSearch'));\r\n se.basicSearchBox.attr('disabled', 'disabled');\r\n se.basicSearchBtn.attr('disabled', 'disabled');\r\n\r\n // Show advanced search\r\n se.expansionIcon.removeClass('closed').addClass('open');\r\n se.searchArea.addClass('active').slideDown('fast');\r\n }\r\n\r\n // Closes Advanced Search\r\n function closeAdvancedSearch() {\r\n se = sm.portal.ui.getAdvancedSearchElements();\r\n\r\n // Deactivate the button\r\n se.advSearchActivation.removeClass('active');\r\n // Hide Advanced Search\r\n se.expansionIcon.removeClass('open').addClass('closed');\r\n se.searchArea.removeClass('active').slideUp('fast');\r\n // Enable Basic Search\r\n se.basicSearchBox.attr('placeholder', sm.portal.utility.getResourceValue('CourseKeywordSearch'));\r\n se.basicSearchBox.removeAttr('disabled');\r\n se.basicSearchBtn.removeAttr('disabled');\r\n }\r\n\r\n // EVAL ALTERNATIVE - FASTER & SAFER\r\n // USAGE: sm.portal.ui.executeFunctionByName('someFunctionHere.NameSpaced.Is.fine', window, args');\r\n // Change context from 'window' by passing alternative\r\n function executeFunctionByName(functionName, context, args) {\r\n if (functionName != null && functionName != 'undefined' && functionName != '') {\r\n var args = [].slice.call(arguments).splice(2);\r\n var namespaces = (typeof functionName == 'string') ? functionName.split(\".\") : null;\r\n\r\n if (namespaces != null) {\r\n var func = namespaces.pop();\r\n\r\n for (var i = 0; i < namespaces.length; i++) {\r\n context = context[namespaces[i]];\r\n }\r\n return context[func].apply(context, args);\r\n }\r\n }\r\n }\r\n\r\n // Delete or create ThirdPartyNotice cookie to determine if to show third party notice\r\n function setThirdPartyNotice() {\r\n\r\n var isChecked = $('#doNotShowThirdParty').is(\":checked\");\r\n\r\n if (isChecked) {\r\n // add the cookie, when present, prevents dialog from displaying \r\n setCookie(\"_ThirdPartyNotice\",1,999);\r\n } else {\r\n // delete the cookie\r\n setCookie(\"_ThirdPartyNotice\", 1, -1);\r\n }\r\n }\r\n\r\n function setCookie(cname, cvalue, exdays) {\r\n var d = new Date();\r\n d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));\r\n var expires = \"expires=\" + d.toUTCString();\r\n document.cookie = cname + \"=\" + cvalue + \";\" + expires + \";path=/\";\r\n }\r\n\r\n function setSessionCookie(cname, cvalue) {\r\n document.cookie = cname + \"=\" + cvalue + \";path=/\";\r\n }\r\n\r\n function getCookie(cname) {\r\n var name = cname + \"=\";\r\n var decodedCookie = decodeURIComponent(document.cookie);\r\n var ca = decodedCookie.split(';');\r\n for (var i = 0; i < ca.length; i++) {\r\n var c = ca[i];\r\n while (c.charAt(0) == ' ') {\r\n c = c.substring(1);\r\n }\r\n if (c.indexOf(name) == 0) {\r\n return c.substring(name.length, c.length);\r\n }\r\n }\r\n return \"\";\r\n }\r\n\r\n function simpleContainerToggle() {\r\n $('[data-toggle-container]').not('[data-simple-container-toggle-processed=\"true\"]').each(function () {\r\n var clickable = $(this);\r\n var icon = clickable.children('span.icon').length > 0 ? clickable.children('span.icon') : null;\r\n var relatedContainer = $('[data-toggleable-container=\"' + clickable.attr('data-toggle-container') + '\"]');\r\n\r\n // create and append icon if not already there\r\n if (icon === null) {\r\n icon = $('');\r\n clickable.append(icon);\r\n }\r\n\r\n if (typeof relatedContainer === 'object' && relatedContainer.length > 0) {\r\n\r\n clickable.on('click', function (event) {\r\n\r\n event.preventDefault();\r\n\r\n if (relatedContainer.is('.showing')) {\r\n relatedContainer.removeClass('showing');\r\n icon.removeClass('open').addClass('close');\r\n }\r\n else {\r\n relatedContainer.addClass('showing');\r\n icon.removeClass('close').addClass('open');\r\n }\r\n });\r\n }\r\n }).attr('data-simple-container-toggle-processed', true);\r\n }\r\n\r\n /*********************************************************************************/\r\n /* TABLE WITH PAGINATION */\r\n /*********************************************************************************/\r\n \r\n /**\r\n * @param {String} displayName Name that is presented to user.\r\n * @param {String=} fieldName Field name in 'RowData'.\r\n * @param {Boolean} isSortable Is possible sorting by this field.\r\n * @param {ColumnDataFormatters=} dataFormatter [**default: ColumnDataFormatters.Simple**] Format data for display.\r\n * @param {String=} htmlElement [**default: 'span'**] For text or icon use 'span'. For button use 'button'. For checkbox use 'checkbox'.\r\n * @param {function(Object, ColumnDefinition, Object):void=} onClickHandler [**default: NULL**] Invoked after click on single cell. First argument is 'RowData'. Last argument is 'Event'.\r\n * @param {String|function(Object, ColumnDefinition):String=} customClass [**default: NULL**] Invoked for every cell to set specified style. First argument is 'RowData'.\r\n * @param {String=} staticContent [**default: NULL**] Use static content for cell instead of 'RowData'.\r\n */\r\n function ColumnDefinition(displayName, fieldName, isSortable, dataFormatter, htmlElement, onClickHandler, customClass, staticContent) {\r\n this.DisplayName = displayName;\r\n this.FieldName = fieldName;\r\n this.IsSortable = isSortable;\r\n this.DataFormatter = dataFormatter != null ? dataFormatter : ColumnDataFormatters.Simple;\r\n this.HtmlElement = htmlElement != null ? htmlElement : 'span';\r\n this.OnClickHandler = onClickHandler;\r\n this.CustomClass = customClass;\r\n this.StaticContent = staticContent;\r\n }\r\n\r\n \r\n /**\r\n * @param {String} tableId Unique table id.\r\n * @param {String} header Table header.\r\n * @param {function(TableDataLoadParameters, function(TableData), function(String))} dataLoadHandler Second parameter is success callback. Third parameter is error callback.\r\n * @param {ColumnDefinition[]} columnDefinitions Column definitions.\r\n * @param {Boolean} paginationEnabled Enabled pagination.\r\n * @param {Number} pageSize Number, greater than 0.\r\n * @param {sm.portal.utility.Sorting} defaultSorting Default sorting.\r\n * @param {String} filterTemplateId Filter template id.\r\n * @param {object} filterViewModel Filter view model.\r\n */\r\n function TableConfiguration(tableId, header, dataLoadHandler, columnDefinitions, paginationEnabled, pageSize, defaultSorting, filterTemplateId, filterViewModel, settingsTemplateId, settingsViewModel) {\r\n this.TableId = tableId;\r\n this.Header = ko.observable(header);\r\n this.DataLoadHandler = dataLoadHandler;\r\n this.ColumnDefinitions = columnDefinitions;\r\n this.PaginationEnabled = paginationEnabled;\r\n this.PageSize = paginationEnabled ? pageSize : -1;\r\n this.DefaultSorting = defaultSorting;\r\n this.FilteringEnabled = !sm.portal.utility.isNullOrEmpty(filterTemplateId);\r\n this.FilterTemplateId = filterTemplateId;\r\n this.FilterViewModel = filterViewModel;\r\n this.SettingsEnabled = !sm.portal.utility.isNullOrEmpty(settingsTemplateId);\r\n this.SettingsTemplateId = settingsTemplateId;\r\n this.SettingsViewModel = settingsViewModel;\r\n }\r\n\r\n\r\n function ColumnDataFormatters() { }\r\n /** @description Return empty string when input data is NULL or just input data in every other case. */\r\n ColumnDataFormatters.Simple = function (data) {\r\n if (data == null) {\r\n return '';\r\n }\r\n\r\n return data;\r\n };\r\n /** @description Return value in format '0.00' (with 2 decimal places) or empty string with input data is NULL. */\r\n ColumnDataFormatters.Money = function (data) {\r\n if (data == null) {\r\n return '';\r\n }\r\n\r\n return parseFloat(data).toFixed(2);\r\n };\r\n /** @description Return only date without time in browser locale format or empty string with input data is NULL. */\r\n ColumnDataFormatters.LocaleDate = function (data) {\r\n if (data == null) {\r\n return '';\r\n }\r\n if(window.u4sm_canada_enabled){\r\n return moment(new Date(data)).format(\"YYYY/MM/DD\"); \r\n } \r\n else{\r\n return new Date(data).toLocaleDateString();\r\n }\r\n };\r\n\r\n /** @description Return only date without time in browser locale format or empty string with input data is NULL. */\r\n ColumnDataFormatters.LocaleDateTime = function (data) {\r\n if (data == null) {\r\n return '';\r\n }\r\n\r\n var date = new Date(data);\r\n\r\n return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();\r\n };\r\n\r\n /** @description Return value in format '0.00%' (with 2 decimal places) or empty string with input data is NULL. */\r\n ColumnDataFormatters.Percent = function (data) {\r\n if (data == null) {\r\n return '';\r\n }\r\n\r\n return parseFloat(data).toFixed(2) + '%';\r\n };\r\n\r\n /** @description Return translated value or empty string with input data is NULL. */\r\n ColumnDataFormatters.Translation = function (data) {\r\n if (data == null) {\r\n return '';\r\n }\r\n\r\n return sm.portal.utility.getResourceValue(data);\r\n };\r\n\r\n /**\r\n * @param {Object[]} rows Rows.\r\n * @param {Number} totalRowsCount Total rows count. Should be greater or equal 0.\r\n */\r\n function TableData(rows, totalRowsCount) {\r\n this.Rows = rows;\r\n this.TotalRowsCount = totalRowsCount;\r\n }\r\n\r\n\r\n function TableDataLoadParameters() {\r\n var self = this;\r\n\r\n /** @property {Number=} Top Top */\r\n this.Top = null;\r\n\r\n /** @property {Number=} Skip Skip */\r\n this.Skip = null;\r\n\r\n /** @property {sm.portal.utility.Sorting=} Sorting Sorting */\r\n this.Sorting = null;\r\n\r\n /** @property {sm.portal.utility.FilterDefinition[]} Filters Filters */\r\n this.Filters = [];\r\n }\r\n\r\n function FilterViewModelBase() {\r\n var self = this;\r\n\r\n // set by TableViewModel\r\n this.TableHeader = ko.observable();\r\n this.ApplyFiltersTrigger = null;\r\n this.ClearFiltersTrigger = null;\r\n\r\n this.IsInitialized = false;\r\n\r\n this.Initialize = function(tableHeader, applyFiltersTrigger, clearFiltersTrigger) {\r\n self.ApplyFiltersTrigger = applyFiltersTrigger;\r\n self.ClearFiltersTrigger = clearFiltersTrigger;\r\n\r\n self.TableHeader(tableHeader());\r\n tableHeader.subscribe(function(header) { self.TableHeader(header); });\r\n\r\n self.IsInitialized = true;\r\n }\r\n\r\n this.ApplyFiltersClick = function(elem) {\r\n var filters = [];\r\n\r\n $.each(self.Configuration, function(_, config) {\r\n var value = self[config.ObservableFieldName]();\r\n if (!sm.portal.utility.isNullOrEmpty(value)) {\r\n filters.push(new sm.portal.utility.FilterDefinition(config.FilterFieldName, config.FilterOperator, value));\r\n }\r\n });\r\n\r\n self.ApplyFiltersTrigger(filters);\r\n element = elem().split(\" \")[0];\r\n jQuery('.' + element).focus();\r\n jQuery('.' + element).removeClass(element);\r\n };\r\n\r\n this.ClearFiltersClick = function(elem) {\r\n self.ClearFiltersTrigger();\r\n element = elem().split(\" \")[0];\r\n jQuery('.' + element).focus();\r\n jQuery('.' + element).removeClass(element);\r\n };\r\n\r\n this.OnOpen = function(appliedFilters) {\r\n $.each(self.Configuration, function(_, config) {\r\n var filters = $.grep(appliedFilters, function(f) { return f.FieldName === config.FilterFieldName && f.Operator === config.FilterOperator });\r\n var filterValue = filters.length === 1 ? filters[0].Value : undefined;\r\n self[config.ObservableFieldName](filterValue);\r\n });\r\n };\r\n }\r\n\r\n function SettingsViewModelBase() {\r\n var self = this;\r\n\r\n this.TableHeader = ko.observable();\r\n this.ApplySettingsTrigger = null;\r\n this.ClearSettingsTrigger = null;\r\n\r\n this.IsInitialized = false;\r\n\r\n this.Initialize = function (tableHeader, applySettingsTrigger, clearSettingsTrigger) {\r\n self.ApplySettingsTrigger = applySettingsTrigger;\r\n self.ClearSettingsTrigger = clearSettingsTrigger;\r\n\r\n self.TableHeader(tableHeader());\r\n tableHeader.subscribe(function (header) { self.TableHeader(header); });\r\n\r\n self.IsInitialized = true;\r\n };\r\n\r\n this.ApplySettingsClick = function(elem) {\r\n var settings = {};\r\n\r\n $.each(self.Configuration, function (_, config) {\r\n var value = self[config.FieldName]();\r\n settings[config.FieldName] = value;\r\n });\r\n\r\n self.ApplySettingsTrigger(settings);\r\n element = elem().split(\" \")[0];\r\n jQuery('.' + element).focus();\r\n jQuery('.' + element).removeClass(element);\r\n };\r\n\r\n this.ClearSettingsClick = function(elem) {\r\n self.ClearSettingsTrigger();\r\n element = elem().split(\" \")[0];\r\n jQuery('.' + element).focus();\r\n jQuery('.' + element).removeClass(element);\r\n };\r\n\r\n this.OnOpen = function (appliedSettings) {\r\n $.each(self.Configuration, function (_, config) {\r\n var value = appliedSettings[config.FieldName];\r\n self[config.FieldName](value);\r\n });\r\n };\r\n }\r\n \r\n /**\r\n * @param {TableConfiguration} configuration Configuration\r\n */\r\n function TableViewModel(configuration) {\r\n var self = this;\r\n\r\n /* PROPERTIES */\r\n this.Configuration = configuration;\r\n this.Rows = ko.observableArray([]);\r\n this.TotalRowsCount = ko.observable(0);\r\n this.PageNumber = ko.observable(0);\r\n this.Sorting = ko.observable(configuration.DefaultSorting);\r\n this.AppliedFilters = ko.observable([]);\r\n this.FilterVisible = ko.observable(false);\r\n this.AppliedSettings = ko.observable({});\r\n this.SettingsVisible = ko.observable(false);\r\n /* END OF PROPERTIES */\r\n\r\n /* DATA LOADING */\r\n this.Initialize = function () {\r\n self.InitializeFiltering();\r\n self.InitializeSettings();\r\n self.LoadData(0, self.Sorting());\r\n }\r\n\r\n this.LoadData = function (pageNumber, sorting) {\r\n var dataLoadParameters = new TableDataLoadParameters();\r\n dataLoadParameters.Sorting = sorting;\r\n \r\n if (self.Configuration.PaginationEnabled) {\r\n dataLoadParameters.Skip = pageNumber * self.Configuration.PageSize;\r\n dataLoadParameters.Top = self.Configuration.PageSize;\r\n }\r\n\r\n if (self.Configuration.FilteringEnabled) {\r\n dataLoadParameters.Filters = self.AppliedFilters();\r\n }\r\n\r\n if (self.Configuration.SettingsEnabled) {\r\n dataLoadParameters.Settings = self.AppliedSettings();\r\n }\r\n\r\n self.BlockTable();\r\n\r\n var successCallback = function (tableData) {\r\n self.Rows(tableData.Rows);\r\n self.TotalRowsCount(tableData.TotalRowsCount);\r\n self.PageNumber(pageNumber);\r\n self.Sorting(sorting);\r\n self.UnblockTable();\r\n };\r\n\r\n var errorCallback = function (error) {\r\n self.UnblockTable();\r\n };\r\n\r\n self.Configuration.DataLoadHandler(dataLoadParameters, successCallback, errorCallback);\r\n };\r\n /* END OF DATA LOADING */\r\n\r\n /* SORTING */\r\n this.SortBy = function (columnDefinition) {\r\n if (event.type === \"click\" || (event.type === \"keypress\" && (event.which == 13 || event.which == 32))) {\r\n if (!columnDefinition.IsSortable) {\r\n return;\r\n }\r\n\r\n var isSortingByDifferentColumn = self.Sorting().FieldName !== columnDefinition.FieldName;\r\n if (isSortingByDifferentColumn) {\r\n var sorting = new sm.portal.utility.Sorting(columnDefinition.FieldName, sm.portal.utility.SortingDirection.Asc);\r\n self.LoadData(0, sorting);\r\n } else {\r\n var invertedDirection = self.Sorting().Direction === sm.portal.utility.SortingDirection.Asc ? sm.portal.utility.SortingDirection.Desc : sm.portal.utility.SortingDirection.Asc;\r\n var sorting = new sm.portal.utility.Sorting(self.Sorting().FieldName, invertedDirection);\r\n self.LoadData(0, sorting);\r\n }\r\n }\r\n };\r\n\r\n this.ResetSorting = function () {\r\n this.LoadData(0, self.Configuration.DefaultSorting);\r\n };\r\n /* END OF SORTiNG */\r\n\r\n /* PAGINATION */\r\n this.UIPresentedRowsFrom = ko.pureComputed(function () {\r\n return self.TotalRowsCount() > 0 ? self.PresentedRowsFrom() + 1 : 0;\r\n });\r\n\r\n this.PresentedRowsFrom = ko.pureComputed(function () {\r\n return self.PageNumber() * self.Configuration.PageSize;\r\n });\r\n\r\n this.PresentedRowsTo = ko.pureComputed(function () {\r\n return self.PresentedRowsFrom() + self.Rows().length;\r\n });\r\n\r\n this.CanGoToNextPage = ko.pureComputed(function () {\r\n return self.PresentedRowsTo() < self.TotalRowsCount();\r\n });\r\n\r\n this.GoToNextPage = function () {\r\n var nextPageNumber = self.PageNumber() + 1;\r\n self.LoadData(nextPageNumber, self.Sorting());\r\n };\r\n\r\n this.CanGoToPreviousPage = ko.pureComputed(function () {\r\n return self.PageNumber() > 0;\r\n });\r\n\r\n this.GoToPreviousPage = function () {\r\n var previousPageNumber = self.PageNumber() - 1;\r\n self.LoadData(previousPageNumber, self.Sorting());\r\n };\r\n\r\n this.CanGoToFirstPage = ko.pureComputed(function () {\r\n return self.PageNumber() > 0;\r\n });\r\n\r\n this.GoToFirstPage = function () {\r\n self.LoadData(0, self.Sorting());\r\n };\r\n\r\n this.CanGoToLastPage = ko.pureComputed(function () {\r\n return self.PresentedRowsTo() < self.TotalRowsCount();\r\n });\r\n\r\n this.GoToLastPage = function () {\r\n var lastPageNumber = Math.ceil(self.TotalRowsCount() / self.Configuration.PageSize) - 1;\r\n self.LoadData(lastPageNumber, self.Sorting());\r\n };\r\n /* END OF PAGINATION */\r\n\r\n /* EVENTS HANDLING */\r\n this.OnClick = function (rowData, columnDefinition, event) {\r\n if (columnDefinition.OnClickHandler != null) {\r\n return columnDefinition.OnClickHandler(rowData, columnDefinition, event);\r\n }\r\n };\r\n /* END OF EVENTS HANDLING */\r\n\r\n /* UI HELPERS */\r\n this.CustomClass = function (rowData, columnDefinition) {\r\n\t\t\tif (columnDefinition.CustomClass != null) {\r\n\t\t\t\tif ($.type(columnDefinition.CustomClass) === 'string') {\r\n\t\t\t\t\treturn columnDefinition.CustomClass;\r\n\t\t\t\t} else {\r\n\t\t\t\t\treturn columnDefinition.CustomClass(rowData, columnDefinition);\r\n\t\t\t\t}\r\n }\r\n\r\n return null;\r\n };\r\n\r\n this.BlockTable = function () {\r\n self.$Table().block();\r\n };\r\n\r\n this.UnblockTable = function () {\r\n self.$Table().unblock();\r\n };\r\n\r\n this.$Table = function() {\r\n return $('#' + self.Configuration.TableId);\r\n };\r\n /* END OF UI HELPERS */\r\n\r\n /* FILTERING */\r\n this.InitializeFiltering = function() {\r\n if (self.Configuration.FilteringEnabled && !self.Configuration.FilterViewModel.IsInitialized) {\r\n self.Configuration.FilterViewModel.Initialize(self.Configuration.Header, self.ApplyFilter, self.ClearFilter);\r\n }\r\n };\r\n\r\n this.ToggleFilter = function(event, header) {\r\n if (event.type === \"click\" || (event.type === \"keypress\" && (event.which == 13 || event.which == 32))) {\r\n if (!self.FilterVisible()) {\r\n self.Configuration.FilterViewModel.OnOpen(self.AppliedFilters().slice());\r\n }\r\n\r\n self.FilterVisible(!self.FilterVisible());\r\n jQuery('.filterVisible').modalTabbing();\r\n jQuery(event.currentTarget).addClass(header().split(\" \")[0]);\r\n } \r\n };\r\n\r\n this.ClearFilter = function() {\r\n var needRefresh = self.AppliedFilters().length > 0;\r\n\r\n self.AppliedFilters([]);\r\n self.FilterVisible(false);\r\n\r\n if (needRefresh) {\r\n self.Initialize();\r\n }\r\n };\r\n\r\n this.ApplyFilter = function (filters) {\r\n self.AppliedFilters(filters);\r\n self.FilterVisible(false);\r\n\r\n self.Initialize();\r\n };\r\n\r\n this.FilterButtonStyle = ko.pureComputed(function () {\r\n if (self.FilterVisible()) {\r\n return 'opened';\r\n }\r\n\r\n return self.AppliedFilters().length > 0 ? 'applied' : 'notApplied';\r\n });\r\n /* END OF FILTERING */\r\n\r\n /* SETTINGS */\r\n this.InitializeSettings = function () {\r\n if (self.Configuration.SettingsEnabled && !self.Configuration.SettingsViewModel.IsInitialized) {\r\n self.Configuration.SettingsViewModel.Initialize(self.Configuration.Header, self.ApplySettings, self.ClearSettings);\r\n }\r\n };\r\n\r\n this.ApplySettings = function (settings) {\r\n self.AppliedSettings(settings);\r\n self.SettingsVisible(false);\r\n self.Initialize();\r\n };\r\n\r\n this.ClearSettings = function () {\r\n var needRefresh = Object.keys(self.AppliedSettings()).length > 0;\r\n\r\n self.AppliedSettings({});\r\n self.SettingsVisible(false);\r\n\r\n if (needRefresh) {\r\n self.Initialize();\r\n }\r\n };\r\n\r\n this.ToggleSettings = function (event, header) {\r\n if (event.type === \"click\" || (event.type === \"keypress\" && (event.which == 13 || event.which == 32))) {\r\n if (!self.SettingsVisible()) {\r\n self.Configuration.SettingsViewModel.OnOpen(self.AppliedSettings());\r\n }\r\n\r\n self.SettingsVisible(!self.SettingsVisible());\r\n jQuery('.settingsVisible').modalTabbing();\r\n jQuery(event.currentTarget).addClass(header().split(\" \")[0]);\r\n }\r\n };\r\n\r\n this.SettingsButtonStyle = ko.pureComputed(function () {\r\n if (self.SettingsVisible()) {\r\n return 'opened';\r\n }\r\n\r\n return Object.keys(self.AppliedSettings()).length > 0 ? 'applied' : 'notApplied';\r\n });\r\n /* ENF OF SETTINGS */\r\n }\r\n\r\n function InformationMessageViewModel() {\r\n self.Header = ko.observable();\r\n self.Messages = ko.observableArray();\r\n\r\n self.ShowMessages = ko.computed(function () {\r\n return self.Messages().length > 0;\r\n });\r\n\r\n return self;\r\n }\r\n\r\n $.extend(true, sm.portal.ui, {\r\n initPage: initPage,\r\n readyPage: readyPage,\r\n resizePage: resizePage,\r\n loadingIndicator: loadingIndicator,\r\n successIndicator: successIndicator,\r\n clearUpload: clearUpload,\r\n tabs: tabs,\r\n responsiveTabs: responsiveTabs,\r\n getTotalTabWidth: getTotalTabWidth,\r\n checkTabOverflow: checkTabOverflow,\r\n responsiveTabMenu: responsiveTabMenu,\r\n responsiveTabSync: responsiveTabSync,\r\n lightBox: lightBox,\r\n lightBoxLogout: lightBoxLogout,\r\n sponsorLightBox: sponsorLightBox,\r\n loadOrCreateLightbox: loadOrCreateLightbox,\r\n resizeLightbox: resizeLightbox,\r\n closeLightbox: closeLightbox,\r\n closeSponsorLightbox: closeSponsorLightbox,\r\n removeLightbox: removeLightbox,\r\n syntaxHighlight: syntaxHighlight,\r\n hideElements: hideElements,\r\n itemMenu: itemMenu,\r\n tableOverflow: tableOverflow,\r\n detailedList: detailedList,\r\n detailedTable: detailedTable,\r\n renderDetailedListItem: renderDetailedListItem,\r\n renderDetailedTableItem: renderDetailedTableItem,\r\n comboBox: comboBox,\r\n scrollTo: scrollTo,\r\n unobtrusiveScrollTop: unobtrusiveScrollTop,\r\n loginWidgetOverride: loginWidgetOverride, //NEEDED?\r\n toggleSessionStartDate: toggleSessionStartDate,\r\n toggleSectionVisibility: toggleSectionVisibility,\r\n keywordSearch: keywordSearch,\r\n getAdvancedSearchElements: getAdvancedSearchElements,\r\n openAdvancedSearch: openAdvancedSearch,\r\n closeAdvancedSearch: closeAdvancedSearch,\r\n executeFunctionByName: executeFunctionByName,\r\n setThirdPartyNotice: setThirdPartyNotice,\r\n setCookie: setCookie,\r\n setSessionCookie: setSessionCookie,\r\n getCookie: getCookie,\r\n simpleContainerToggle: simpleContainerToggle,\r\n createProfileImageEditor: createProfileImageEditor,\r\n RecordPagingViewModel: RecordPagingViewModel,\r\n ColumnDefinition: ColumnDefinition,\r\n TableConfiguration: TableConfiguration,\r\n ColumnDataFormatters: ColumnDataFormatters,\r\n TableData: TableData,\r\n TableDataLoadParameters: TableDataLoadParameters,\r\n optionalFeatureToggle: optionalFeatureToggle,\r\n TableViewModel: TableViewModel,\r\n FilterViewModelBase: FilterViewModelBase,\r\n InformationMessageViewModel: InformationMessageViewModel,\r\n SettingsViewModelBase: SettingsViewModelBase,\r\n uploadDocument: uploadDocument,\r\n });\r\n\r\n})(jQuery);\r\n\r\n// page wire up SM Events \r\njQuery(document).ready(function () {\r\n jQuery(window).onDelayed('resize', 100, function () {\r\n sm.portal.ui.resizePage();\r\n });\r\n sm.portal.ui.initPage();\r\n});\r\n\r\n// Extending jQuery to Add OnDelayed event\r\n(function ($) {\r\n $.fn.onDelayed = function (eventName, delayInMs, callback) {\r\n var _timeout;\r\n this.on(eventName, function (e) {\r\n if (!!_timeout) {\r\n clearTimeout(_timeout);\r\n //console.log('timer being re-set: ' + eventName);\r\n } else {\r\n // console.log('timer being set for the first time: ' + eventName);\r\n }\r\n _timeout = setTimeout(function () {\r\n callback(e);\r\n }, delayInMs);\r\n });\r\n };\r\n})(jQuery);\r\n\r\n\r\n(function ($) {\r\n $.fn.cleanWhitespace = function () {\r\n this.contents().filter(function () {\r\n return (this.nodeType == 3 && !/\\S/.test(this.nodeValue));\r\n }).remove();\r\n return this;\r\n };\r\n})(jQuery);\r\n\r\n//Optional parameter includeMargin is used when calculating outer dimensions \r\n(function ($) {\r\n $.fn.getHiddenDimensions = function (includeMargin) {\r\n var $item = this,\r\n props = { position: 'absolute', visibility: 'hidden', display: 'block' },\r\n dim = { width: 0, height: 0, innerWidth: 0, innerHeight: 0, outerWidth: 0, outerHeight: 0 },\r\n $hiddenParents = $item.parents().andSelf().not(':visible');\r\n\r\n includeMargin = (includeMargin == null) ? false : includeMargin;\r\n\r\n var oldProps = [];\r\n $hiddenParents.each(function () {\r\n var old = {};\r\n\r\n for (var name in props) {\r\n old[name] = this.style[name];\r\n this.style[name] = props[name];\r\n }\r\n\r\n oldProps.push(old);\r\n });\r\n\r\n dim.width = $item.width();\r\n dim.outerWidth = $item.outerWidth(includeMargin);\r\n dim.innerWidth = $item.innerWidth();\r\n dim.height = $item.height();\r\n dim.innerHeight = $item.innerHeight();\r\n dim.outerHeight = $item.outerHeight(includeMargin);\r\n\r\n $hiddenParents.each(function (i) {\r\n var old = oldProps[i];\r\n for (var name in props) {\r\n this.style[name] = old[name];\r\n }\r\n });\r\n\r\n return dim;\r\n };\r\n}(jQuery));\r\n"]}