{"version":3,"file":"glbl.js","names":["global","_u","_f","_svgns","_div","_button","_iframe","_required","_body","_popupEventHandler","jQ","jQuery","glb","$","_appWindow","tios","util","appWindow","_$lastToolTip","_csssizingclass","_defaultUnload","_popupQueue","_deferPopups","_popupCount","_currentlyOpenID","_overlayItem","this","type","params","container","domElement","ghost","onClose","_addToOverlay","popupContainer","transparent","callerWindow","overlayid","doc","document","overlay","getElementById","createElement","id","className","addClass","body","appendChild","_removeFromOverlay","containerToRemove","parentNode","replaceChild","parent","removeChild","children","length","removeClass","_getNewWindowSize","width","height","invert","hasParent","window","loggingOut","blockTimer","blockTimeoutDuration","blockNavFn","deferPopups","popupWindowCloseArgs","popupWindowInitialWidth","popupWindowInitialHeight","popupsBlocked","pageVisited","popRegistry","prototype","close","closeArgs","_thisOutObj","splice","findIndex","i","popupID","runPopupQueue","onFullscreen","isFullscreen","nowFullScreen","top","isFullScreen","onceObjectsLoaded","callback","$objects","on","attr","deferred","triggerNowIfUndeferred","unDefer","triggerNow","showPopupQueue","closePopupQueue","pop","popup","showDomPopup","showWindow","passedParams","queuedObject","newOut","push","_doc","domID","popupWindow","windowClasses","classList","add","content","contentClasses","insertBefore","tabIndex","containerRef","hideOverlay","focus","outObj","unBlock","blockNav","once","onbeforeunload","disallowNav","unblockNav","navApp","url","ignoreBlocking","replaceLastPageInHistory","newUrl","vars","SiteUrl","location","replace","href","reloadPage","reload","showConfirm","docCe","el","docCeNS","ns","createElementNS","addClasses","title","header","headerTitle","innerText","headerIcon","headerSvg","headerUse","setAttributeNS","cdnUrl","message","innerHTML","callbackAndClose","event","inputbox","textinput","password","name","autocomplete","onkeyup","keyCode","value","inputRequired","oninput","target","okButton","remove","cancelButton","footer","ok","onclick","cancel","toolTip","e","showing","colour","$target","srcElement","$tooltipelement","$tooltipcontent","$tooltipToShow","next","showNew","$element","show","css","opacity","hasContainer","html","tooltipx","tooltipy","offset","left","parseFloat","targetWindow","appendTo","$windowframe","borderColor","stop","fadeIn","fadeOut","hide","showTooltip","hideTooltip","hint","element","click","hideHint","showHint","showAllHints","each","hideAllHints","tooltipMessage","sender","data","count","matches","join","blockAction","originatorString","clear","TIOSTimeout","hasClass","console","error","_blockError","$body","setupTabJump","preventDefault","tabindex","parseInt","searching","searchcount","$next","is","popIsOpen","popupConf","indexOf","showPopup","windowParams","conf","allowCloseOutside","cssClass","openArgs","loadCallback","query","queueJump","_openArgsPrefix","getOpenArgs","argsID","args","getFromStorage","convertDateStringsToDates","removeFromStorage","fancybox","fbContent","fbParams","autoSize","scrolling","wrapCSS","closeBtn","modal","padding","minWidth","minHeight","autoResize","arrows","afterShow","autoCenter","fitToView","buildParams","useContentSize","newSize","margin","leftRatio","topRatio","afterClose","dispatchEvent","CustomEvent","detail","opened","windowIndex","saveToStorage","afterLoad","fbwin","contentWindow","onOpen","ready","open","resizeWindow","current","update","isWindowOpen","closeActiveWindow","scrollElement","rowSelector","parentSelector","timing","$selectedElement","first","parents","animate","scrollTop","offsetParent","position","checkRequiredGroups","caller","_checkGroup","group","$all","foundValid","checkValidity","removeAttr","groupname","$requiredgroupcontrols","grouplist","highlighter","parentselector","highlightselector","inputSelector","customSelector","emptyclass","invalidclass","invalidcount","highlightcount","emptycount","filledcount","$container","$inputs","parentcomplete","parentvalid","find","$this","isRequired","isEmpty","val","get","invalid","empty","filled","showError","response","alertHTML","rd","ErrorID","usePre","ErrorMessage","isHtml","launch","fshandler","fullscreencapable","$fullscreenbutton","addToTiosBar","toggleFullScreen","angular","module","constant"],"sources":["jscript/glbl.js"],"mappings":"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","sourcesContent":["var global = global || {};\r\n\r\n(function () {\r\n var _u = 'undefined';\r\n var _f = 'function';\r\n var _s = 'string';\r\n var _svgns = 'http://www.w3.org/2000/svg';\r\n var _xlnkns = 'http://www.w3.org/1999/xlink';\r\n\r\n var _div = 'div';\r\n var _span = 'span';\r\n var _button = 'button';\r\n var _iframe = 'iframe';\r\n var _required = 'required';\r\n var _body = 'body';\r\n var _popupEventHandler = 'popupEvent';\r\n\r\n var jQ = jQ || false;\r\n if (typeof jQuery !== _u) {\r\n jQ = jQuery;\r\n }\r\n\r\n global = (function (glb, $) {\r\n\r\n //#region Internal variables\r\n\r\n var _appWindow = tios.util.appWindow;//used to just refer to window.top //internal variable\r\n\r\n var _$lastToolTip = null;//placeholder for last shown tooltip\r\n\r\n var _usebodyblockaction = true;\r\n var _csssizingclass = 'csssize';\r\n\r\n // The default unload action (does nothing) - this is required as a minimum to prevent previous page caching\r\n var _defaultUnload = function () { };\r\n\r\n /// Queue for popups, if using queueing\r\n var _popupQueue = [];\r\n var _deferPopups = null; \r\n var _popupCount = 0;// A globally incremented number for popups opened and closed via the queue. Incremented on popup open.\r\n var _currentlyOpenID = null;\r\n //#endregion\r\n\r\n //#region Public variables\r\n glb.hasParent = (window != window.parent);//is window in a parent?\r\n\r\n glb.loggingOut = false;//add to global definition\r\n \r\n glb.blockTimer = null;// this will hold the blockaction timer reference\r\n glb.blockTimeoutDuration = 60000;\r\n\r\n // If navigation blocking is set, this is the callback for the function to trigger on navigation/onbeforeunload\r\n glb.blockNavFn = null; //Do not modify this directy - it is the placeholder for the application-wide blocknav function\r\n\r\n // Popup parameters\r\n glb.deferPopups = null;// Whether to show queued popups or wait until they are triggered 'manually' - allows delay for high priority in-page alerts\r\n glb.popupWindowCloseArgs = null;\r\n glb.popupWindowInitialWidth = null;\r\n glb.popupWindowInitialHeight = null;\r\n\r\n glb.popupsBlocked = false;\r\n\r\n glb.pageVisited = false;\r\n\r\n // Object representing popups list - will contain ids of all open popups at the time. This is used\r\n // to trigger events when windows are opened/closed for other windows watching\r\n // If this is the app window, we initialise it to a new array, otherwise we get the appwindow's list.\r\n glb.popRegistry = window == _appWindow ? [] : null;\r\n\r\n //#endregion\r\n\r\n //#region private functions\r\n\r\n function _overlayItem() {\r\n this.type = null;\r\n this.params = null;\r\n this.container = null;\r\n this.domElement = null;\r\n this.ghost = null;\r\n this.onClose = null;//Optional onClose method that runs when close is triggered\r\n }\r\n\r\n _overlayItem.prototype.close = function (closeArgs) {\r\n var _thisOutObj = this;\r\n _removeFromOverlay(_thisOutObj.container, _thisOutObj.domElement, _thisOutObj.ghost);\r\n\r\n delete _thisOutObj.container;\r\n delete _thisOutObj.domElement;\r\n delete _thisOutObj.ghost;\r\n\r\n if (typeof _thisOutObj.onClose === _f) _thisOutObj.onClose(closeArgs);\r\n\r\n delete _thisOutObj.onClose;\r\n delete _thisOutObj.close;\r\n\r\n //console.log('closed:', _popupQueue.length);\r\n // Now this popup is closed, remove it from the queue and trigger the next queued popup (unless popups are deferred)\r\n _popupQueue.splice(_popupQueue.findIndex(function (i) { return i.popupID === _currentlyOpenID }), 1);\r\n //console.log('spliced:', _popupQueue.length);\r\n\r\n _currentlyOpenID = null;\r\n glb.runPopupQueue();\r\n };\r\n\r\n // Add to the dialog overlay and return the popup's container object\r\n function _addToOverlay(popupContainer, transparent, callerWindow) {\r\n var overlayid = 'dialog';\r\n var doc = (!!callerWindow ? callerWindow.document : _appWindow.document);\r\n var overlay = doc.getElementById(overlayid);//Get the existing dialog overlay\r\n\r\n if (!overlay) {\r\n overlay = doc.createElement(_div);//Or create the overlay element\r\n overlay.id = overlayid;\r\n if (!!transparent) {\r\n overlay.className = 'noback';//remove dark background from overlay when transparent is true\r\n } else {\r\n $('html').addClass(\"dom-popup-open\");\r\n }\r\n doc.body.appendChild(overlay);//Finally, add the overlay element and its contents to the top level window's page if it doesn't exist.\r\n }\r\n\r\n overlay.appendChild(popupContainer);//Add the window to the overlay\r\n\r\n return popupContainer;\r\n }\r\n\r\n function _removeFromOverlay(containerToRemove, domElement, ghost) {\r\n // If ghost and dom elements are provided, replace the ghost with the original element.\r\n if (!!ghost && !!domElement) ghost.parentNode.replaceChild(domElement, ghost);\r\n\r\n var parent = containerToRemove.parentNode;\r\n parent.removeChild(containerToRemove);//Remove the chosen window from the overlay\r\n //If the overlay is empty, remove it\r\n if (!parent.children.length) {\r\n parent.parentNode.removeChild(parent);\r\n $('html').removeClass(\"dom-popup-open\");\r\n }\r\n }\r\n\r\n function _blockError(originatorString) {\r\n glb.showConfirm({ headerIcon: 'warning', addClasses: ['errorpopup'], title: 'Operation timed out', message: 'This page may have encountered an error or\\nis taking too long to respond. Please refresh\\nthe page or click another link.' });\r\n if (typeof (originatorString) !== _u) {\r\n console.error('global.blockAction error: ' + originatorString);\r\n }\r\n glb.unBlock();\r\n }\r\n\r\n\r\n function _getNewWindowSize(width, height, invert) {//return a scaled window\r\n return { width: width, height: height };\r\n }\r\n\r\n function _appendObjectKeysToHTML(obj, htmlContent) {\r\n var newContent = \"\";\r\n\r\n\r\n for (var key in obj) {\r\n newContent += \"\";\r\n }\r\n\r\n newContent += \"
\" + key + \"\";\r\n\r\n if (typeof obj[key] == 'object' && !_isEmptyObject(obj[key])) {\r\n newContent += _appendObjectKeysToHTML(obj[key], newContent);\r\n } else {\r\n newContent += '
' + tios.util.htmlEntities(obj[key] instanceof Date ? obj[key].toISOString() : obj[key])/*.replace('\\r\\n','
')*/ + '
';\r\n }\r\n newContent += \"
\";\r\n return newContent;\r\n }\r\n\r\n function _isEmptyObject(obj) {\r\n for (var prop in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region public functions\r\n\r\n\r\n glb.onFullscreen = function (isFullscreen) {\r\n var nowFullScreen = window.top.document.isFullScreen;//default to getting current top window state (from the isFullSscreen property added by display.js)\r\n if (typeof (isFullscreen) !== _u) {\r\n nowFullScreen = isFullscreen;//use state passed by event if present\r\n }\r\n\r\n if (nowFullScreen) {\r\n $('html').addClass('fullscreen');\r\n } else {\r\n $('html').removeClass('fullscreen');\r\n }\r\n };\r\n\r\n // Unused\r\n glb.onceObjectsLoaded = function (callback) {\r\n var $objects = $('object:not([data-loaded=\"true\"])');\r\n if ($objects.length > 0) {\r\n $objects.on('load', function () {\r\n //Once finished loading, remove the loading class\r\n $(this).attr('data-loaded', 'true');\r\n\r\n if ($('object:not([data-loaded=\"true\"])').length == 0) {\r\n //This part runs once all images loaded\r\n callback();\r\n }\r\n\r\n });\r\n } else {\r\n callback();\r\n }\r\n };\r\n\r\n // Enable/disable popups by deferring them\r\n glb.deferPopups = function (deferred, triggerNowIfUndeferred) {\r\n // Only perform these actions if the state changes\r\n if (deferred !== _deferPopups) {\r\n _deferPopups = deferred;\r\n\r\n //console.log('%cpopups now ' + (deferred ? 'deferred' : 'un-deferred'), 'color: red;');\r\n\r\n if (!_deferPopups && triggerNowIfUndeferred) {\r\n //console.log('running queue on undeferred');\r\n glb.runPopupQueue();\r\n }\r\n }\r\n };\r\n\r\n // Undefer popups, but don't trigger immediately by default (for use in onclose methods, so the enclosing onClose triggers afterwards)\r\n glb.unDefer = function (triggerNow) { glb.deferPopups(false, triggerNow || false);}\r\n\r\n glb.showPopupQueue = function () {\r\n return _popupQueue;\r\n };\r\n\r\n // Call close on all popups\r\n glb.closePopupQueue = function () {\r\n for (var pop of _popupQueue) {\r\n pop.close();\r\n }\r\n };\r\n\r\n glb.runPopupQueue = function () {\r\n // Here we call the required show method, but passing in the queued item - we do not need to return it as the originator's handle will be updated with the properties.\r\n var popup = _popupQueue[0] || null;\r\n\r\n if (!!popup) {\r\n //console.log('opening popup as first in queue', popup.params.id);\r\n switch (popup.type) {\r\n case 'dom':\r\n glb.showDomPopup(null, popup);\r\n break;\r\n case 'window':\r\n glb.showWindow(null, popup);\r\n break;\r\n };\r\n }\r\n };\r\n\r\n glb.showDomPopup = function (passedParams, queuedObject) {//callerWindow (window ref), domID (string), multipleWindows (bool), hideOverlay (bool), windowClasses (array), contentClasses (array)\r\n // If not performing the display of a queued item, add it to the queue first\r\n if (!queuedObject) {\r\n\r\n // At this point, we can't save the dom state etc. so we simply push the parameters onto an array as a property of a new object\r\n // Later, this object will be retrieved from the queue and passed into this method, where the params will subsequently be deleted\r\n var newOut = new _overlayItem();\r\n newOut.params = passedParams;\r\n newOut.type = 'dom';\r\n newOut.popupID = ('popup' + _popupCount++);\r\n _popupQueue.push(newOut);\r\n\r\n // If it's not deferred and is the only popup queued, allow it to show now. (queue will be at least length one at this point)\r\n if (!_deferPopups && _popupQueue.length == 1) {\r\n //console.log('showing only popup');\r\n return glb.showDomPopup(null, newOut);// Call this method with the newly added object\r\n }\r\n // Otherwise, we just return the newly queued popup\r\n return newOut;\r\n } else {\r\n var _doc = document;// reference to the current document, purely for access to the createElement methods\r\n var domElement = _doc.getElementById((passedParams ? passedParams.domID : queuedObject.params.domID));\r\n\r\n if (!!domElement) {\r\n var params = queuedObject.params;\r\n\r\n var popupContainer = _doc.createElement(_div);//Create the container to put inside the overlay\r\n popupContainer.id = params.domID + '_popcon';//Give the popup an id based on the domID of the element inside to aid close callback targeting\r\n\r\n var popupWindow = _doc.createElement(_div);//Create the window to place inside the container\r\n\r\n //Extra classes can be added as an array, apply those classes to the container object here.\r\n if (params.windowClasses && params.windowClasses.length) {\r\n popupWindow.classList.add(...params.windowClasses);\r\n }\r\n\r\n var content = _doc.createElement(_div);//Create the panel for contents\r\n content.classList.add('dom-element');\r\n\r\n //Extra classes can be added as an array, apply those classes to the content object here.\r\n if (params.contentClasses && params.contentClasses.length) {\r\n content.classList.add(...params.contentClasses);\r\n }\r\n\r\n var ghost = _doc.createElement(_div);\r\n ghost.id = params.domID + '_ghost';\r\n\r\n domElement.parentNode.insertBefore(ghost, domElement);\r\n content.appendChild(domElement);\r\n\r\n popupWindow.appendChild(content);//Add the content to the window\r\n popupWindow.tabIndex = 0;//Make focusable\r\n popupContainer.appendChild(popupWindow);\r\n var containerRef = _addToOverlay(popupContainer, !!params.hideOverlay, (!!params.callerWindow ? params.callerWindow : null));//Add the window to the overlay\r\n\r\n popupWindow.focus();//Focus the window so repeated enters in the screen behind get caught here instead\r\n // If successful, return the references to the container, inserted domelement, and the ghost\r\n\r\n // For the output, we're either creating a new object or modifying the one that was queued so the original caller has access to close etc. when updated\r\n var outObj = queuedObject || new _overlayItem();\r\n\r\n outObj.container = containerRef;\r\n outObj.domElement = domElement;\r\n outObj.ghost = ghost;\r\n\r\n // Set the onClose method if passed\r\n if (typeof params.onClose === _f) outObj.onClose = params.onClose;\r\n\r\n _currentlyOpenID = outObj.popupID;\r\n\r\n // Now remove the params property from the displayed object (trying to prevent circular references)\r\n delete outObj.params;\r\n\r\n //console.log('global.showDomPopup rendered: ', params);\r\n\r\n // Unblock on opening\r\n glb.unBlock();\r\n\r\n return outObj;\r\n } else {\r\n //console.log('Dom element not found', params.domID);\r\n }\r\n }\r\n // On failure, return nothing\r\n return null;\r\n };\r\n\r\n //#region navigation functions\r\n\r\n glb.blockNav = function (callback, once) {\r\n // If the function is passed, set that as the onbeforeunload, or null\r\n _appWindow.global.blockNavFn = (typeof callback === _f ? callback : null);\r\n\r\n _appWindow.onbeforeunload = function () {\r\n var disallowNav = false;\r\n\r\n // Trigger the callback\r\n if (_appWindow.global.blockNavFn !== null) {\r\n disallowNav = true;\r\n _appWindow.global.blockNavFn();\r\n }\r\n\r\n // If being told to trigger only once, clear the event\r\n if (!!once) glb.unblockNav();\r\n\r\n // Now show the message\r\n return disallowNav;\r\n };\r\n };\r\n\r\n glb.unblockNav = function () {\r\n _appWindow.global.blockNavFn = null;\r\n _appWindow.onbeforeunload = _defaultUnload;\r\n };\r\n\r\n glb.navApp = function (url, ignoreBlocking, replaceLastPageInHistory) {\r\n\r\n // Allow blocking to take place if the callback is set and ignore is not\r\n if (_appWindow.global.blockNavFn !== null && !ignoreBlocking) {\r\n _appWindow.global.blockNavFn();\r\n } else {\r\n // If ignoring the blocking ...\r\n // Undo the global blocknav\r\n glb.unblockNav();\r\n glb.unBlock();\r\n\r\n var newUrl = vars.SiteUrl + url;\r\n //console.log('navapp to', newUrl);\r\n // Now navigate (or replace history)\r\n if (replaceLastPageInHistory) {\r\n _appWindow.location.replace(newUrl);\r\n } else {\r\n _appWindow.location.href = newUrl;\r\n }\r\n }\r\n };\r\n\r\n //#endregion navigation functions\r\n\r\n // TODO remove - not used anywhere\r\n glb.reloadPage = function () {//reload and force getting new copy of page\r\n location.reload(true);\r\n };\r\n\r\n /**\r\n * Opens a confirm dialog box\r\n * @function showConfirm\r\n * @param {{addClasses: Array., title: string, headerIcon: string, message: string, callback: function, textInput: bool, password: bool, cancel:string, ok: string }} params\r\n */\r\n glb.showConfirm = function (params) {\r\n //console.log('showConfirm called');\r\n var docCe = function (el) { return document.createElement(el) };\r\n var docCeNS = function (ns, el) { return document.createElementNS(ns, el) };\r\n\r\n // params:\r\n // headerIcon: the icon for the top left of the header bar\r\n // title: the title for the dialog\r\n // message: the main body text\r\n // addClasses: extra classes to add to the conteent element\r\n // ok: optional, overrides the ok button text (always shows as Ok otherwise)\r\n // cancel: cancel button text - does not show if it's not provided\r\n // callback: function that is triggered on ok/cancel. If textbox/password is showing, returns that text, otherwise returns ok/true cancel/false\r\n // textinput: if true, shows a text box\r\n // password: if true, shows a text box with password asterisks\r\n\r\n var content = docCe(_div);//Create the panel for contents\r\n content.classList.add('confirm');\r\n\r\n //Extra classes can be added as an array, apply those classes to the content object here.\r\n if (params.addClasses && params.addClasses.length) {\r\n content.classList.add(...params.addClasses);\r\n }\r\n\r\n if (params.title && params.title.length) {//Add the title if specified\r\n var header = docCe('header');\r\n var headerTitle = docCe('h1');\r\n\r\n headerTitle.innerText = params.title;\r\n if (params.headerIcon) {\r\n var headerSvg = docCeNS(_svgns, 'svg');\r\n var headerUse = docCeNS(_svgns, 'use');\r\n headerUse.setAttributeNS(_xlnkns, 'href', (tios.util.cdnUrl('images-svg/icon-symbols.svg') + '#' + params.headerIcon));\r\n\r\n headerSvg.appendChild(headerUse);\r\n header.appendChild(headerSvg);\r\n }\r\n\r\n header.appendChild(headerTitle);//Append the title after the icon so they appear in that order in the header\r\n content.appendChild(header);\r\n }\r\n\r\n if (params.message && params.message.length) {//Add the text if specified\r\n var message = docCe(_div);\r\n message.classList.add('confirm-body');\r\n message.innerHTML = params.message.replace(/\\n/g, '
');//Convert newlines to br for front end\r\n content.appendChild(message);\r\n }\r\n\r\n //Create a callback placeholder that will allow us to call the passed callback without modifying it, regardless of whether it's present or not\r\n var callbackAndClose = function (event) {\r\n _removeFromOverlay(content);\r\n if (params.callback && typeof params.callback === _f) {\r\n params.callback(event);\r\n }\r\n };\r\n\r\n var inputbox = null;\r\n if (params.textinput || params.password) {\r\n // add an input box\r\n inputbox = docCe('input');\r\n if (params.password) {\r\n inputbox.type = 'password';\r\n inputbox.name = 'password';\r\n inputbox.autocomplete = 'new-password';\r\n }\r\n\r\n inputbox.onkeyup = function (event) {\r\n if (event.keyCode == 13) {\r\n callbackAndClose(inputbox.value);\r\n }\r\n };\r\n\r\n if (!!params.inputRequired) {\r\n inputbox.oninput = function (event) {\r\n if (!!event.target.value.length) {\r\n okButton.classList.remove('disabled');\r\n } else {\r\n okButton.classList.add('disabled');\r\n }\r\n };\r\n }\r\n\r\n content.appendChild(inputbox);\r\n }\r\n\r\n var footer = docCe('footer');//Create a bar for ok/cancel\r\n\r\n var okButton;\r\n //Always create an ok button but override the text if provided\r\n okButton = docCe(_button);\r\n if (params.ok && params.ok.length) {\r\n okButton.innerText = params.ok;\r\n } else {\r\n okButton.innerText = 'Ok';\r\n }\r\n\r\n if (inputbox && !!params.inputRequired) {\r\n okButton.classList.add('disabled');\r\n }\r\n\r\n //On click of ok, return either the input text (if provided) or true\r\n okButton.onclick = function () {\r\n callbackAndClose(inputbox ? inputbox.value : true);\r\n }\r\n footer.appendChild(okButton);\r\n\r\n var cancelButton;\r\n if (params.cancel && params.cancel.length) {//Create cancel button if required\r\n cancelButton = docCe(_button);\r\n cancelButton.innerText = params.cancel;\r\n cancelButton.onclick = function () {\r\n callbackAndClose(false);\r\n }\r\n footer.appendChild(cancelButton);\r\n }\r\n\r\n content.tabIndex = 0;//Make focusable\r\n content.appendChild(footer);//Add the savebar to the window container\r\n\r\n _addToOverlay(content, false, _appWindow);//Add the window to the overlay\r\n\r\n content.focus();//Focus the window so repeated enters in the screen behind get caught here instead\r\n\r\n // If there's no input box, make enter fire the close event as though ok was clicked\r\n if (inputbox == null) {\r\n content.onkeyup = function (event) {\r\n if (event.keyCode == 13) {\r\n callbackAndClose(true);\r\n }\r\n }\r\n }\r\n\r\n // Unblock on opening confirm dialog\r\n glb.unBlock();\r\n\r\n };\r\n \r\n glb.toolTip = function (e, showing, content, colour) {\r\n if (showing) {\r\n var $target = $(e.target || e.srcElement || e);\r\n var $tooltipelement = null;\r\n var $tooltipcontent = null;\r\n\r\n var $tooltipToShow = null;//tooltip to show on showing (set later)\r\n if ($target.attr('data-tooltipselector')) {\r\n $tooltipelement = $($target.attr('data-tooltipselector'));//use the attribute as the selector\r\n } else {\r\n if ($target.attr('data-tooltipcontent')) {\r\n $tooltipcontent = $target.attr('data-tooltipcontent');//use the data-tooltipcontent for the contents of a new span, or if doesn't exist...\r\n } else {\r\n $tooltipcontent = $target.next('.tooltipcontent');//... use the next .tooltipcontent element\r\n }\r\n }\r\n\r\n //Display new tooltip and store reference in lastToolTip\r\n var showNew = function ($element) { $element.show(); $element.css({ 'opacity': '1' }); _$lastToolTip = $element; };\r\n\r\n if (!$tooltipelement) {//no specific tooltip element to use, so use the general tooltip overlay\r\n var hasContainer = false;\r\n if ($tooltipcontent.length) {\r\n hasContainer = true;\r\n }\r\n if (content == null) {\r\n if (hasContainer) content = (typeof ($tooltipcontent.html) != _u ? $tooltipcontent.html() : $tooltipcontent);//use the targeted content container as-is, or use the string\r\n } else {\r\n content = content.replace(/(?:\\r\\n|\\r|\\n)/g, '
');\r\n }\r\n\r\n var tooltipx = 0;\r\n var tooltipy = 0;\r\n\r\n if ($target.attr('data-tooltipx')) {\r\n tooltipx = $target.offset().left + parseFloat($target.attr('data-tooltipx'));//using data-tooltipx and y as original design size pixels \r\n } else {\r\n tooltipx = $target.offset().left + $target.width() + 1 ;\r\n }\r\n if ($target.attr('data-tooltipy')) {\r\n tooltipy = $target.offset().top + parseFloat($target.attr('data-tooltipy'));\r\n } else {\r\n tooltipy = $target.offset().top;\r\n }\r\n\r\n var targetWindow = (window != _appWindow ? _appWindow : window);\r\n\r\n $tooltipToShow = targetWindow.$(\"#tooltip\");\r\n\r\n if (!$tooltipToShow.length) { //tooltip does not exist in parent page, so create it\r\n $tooltipToShow = $('
');\r\n $tooltipToShow.appendTo(targetWindow.$(_body));\r\n }\r\n\r\n //TODO Rework this to work with fancybox\r\n if (targetWindow != window) {\r\n var $windowframe = targetWindow.$('.fancybox-iframe');//grab the window that is open\r\n $tooltipToShow.css({\r\n top: ($windowframe.offset().top + tooltipy) + 'px',\r\n left: ($windowframe.offset().left + tooltipx) + 'px'\r\n });\r\n } else {\r\n $tooltipToShow.css({\r\n top: (tooltipy) + 'px',\r\n left: (tooltipx) + 'px'\r\n });\r\n }\r\n\r\n //if (showing) {\r\n $tooltipToShow.html(content);//set the tooltip html to the content of the tooltip in the page when showing, do not change it when fading out\r\n if (hasContainer && typeof ($tooltipcontent.attr) != _u) {//use tooltipcontent's classes on the tooltip popup (excluding the actual 'tooltipcontent' class), but only when making visible\r\n $tooltipToShow.attr('class', $tooltipcontent.attr('class').replace('tooltipcontent', ''));\r\n }\r\n if (colour) {\r\n $tooltipToShow.css({ borderColor: colour });\r\n }\r\n //}\r\n } else {\r\n //Using a specific tooltipelement\r\n $tooltipToShow = $tooltipelement;\r\n }\r\n\r\n if (_$lastToolTip) {\r\n _$lastToolTip.stop(true, true).fadeIn(500, function () { showNew($tooltipToShow); });\r\n } else {//last tooltip does not exist, just show new\r\n showNew($tooltipToShow);\r\n }\r\n }\r\n else {//hide the last shown tooltip\r\n if (_$lastToolTip) {\r\n _$lastToolTip.stop().fadeOut(500, function () { $(this).hide(); });\r\n }\r\n }\r\n };\r\n glb.showTooltip = function (e) { glb.toolTip(this, true, null, null); };\r\n glb.hideTooltip = function (e) { glb.toolTip(this, false, null, null); };\r\n\r\n glb.hint = function (element, showing) {\r\n var $element = $(element);\r\n if (showing) {\r\n if ($element) {\r\n $element.stop(true, true).fadeIn(500, function () { $element.show(); $element.css({ 'opacity': '1' }); });\r\n }\r\n }\r\n else {//hide the last shown tooltip\r\n if ($element) {\r\n $element.stop().fadeOut(500, function () { $(this).hide(); });\r\n }\r\n }\r\n $element.click(function () {\r\n glb.hideHint(this);\r\n });\r\n };\r\n glb.showHint = function (e) { glb.hint(e, true); };\r\n glb.hideHint = function (e) { glb.hint(e, false); };\r\n glb.showAllHints = function () { $('[data-hint]').each(function () { glb.showHint(this); }); };\r\n glb.hideAllHints = function () { $('[data-hint]').each(function () { glb.hideHint(this); }); };\r\n\r\n //Callback for validateunique to show tooltip warning\r\n glb.tooltipMessage = function (sender, data) {\r\n if (data.count > 0 && data.message && data.matches) {\r\n glb.toolTip(sender, true, data.message + data.matches.join('\\n'), '#f00');\r\n } else if (data.count > 0 && data.message) {\r\n glb.toolTip(sender, true, data.message, '#f00');\r\n } else if (data.count == 0) {\r\n glb.toolTip(sender, false);\r\n }\r\n };\r\n\r\n glb.blockAction = function (originatorString) {\r\n //use body class\r\n // We need to swap around the classes, otherwise the cursor state can persist until the mouse is moved\r\n // upon navigating to a new page\r\n _appWindow.$(_body).removeClass('unblocked').addClass('blocked');\r\n if (_appWindow.global.blockTimer) _appWindow.global.blockTimer.clear();//clear timer before starting\r\n //only show error if blockdiv is actually found (it may have been removed but the timer not cleared)\r\n _appWindow.global.blockTimer = new tios.util.TIOSTimeout('global.blockaction.bodyblockaction _appWindow.global.blockTimer', function () {\r\n //console.log('body is blocked: ' + _appWindow.$(_body).hasClass('blocked'));\r\n\r\n if (_appWindow.$(_body).hasClass('blocked')) {\r\n _blockError(originatorString);\r\n }\r\n }, _appWindow.global.blockTimeoutDuration); \r\n };\r\n\r\n glb.unBlock = function () {\r\n //u se body class\r\n var $body = _appWindow.$('body.blocked');\r\n if ($body.length) {\r\n\r\n // We need to swap around the classes, otherwise the cursor state can persist until the mouse is moved\r\n // upon navigating to a new page\r\n $body.removeClass('blocked').addClass('unblocked');\r\n if (_appWindow.global.blockTimer) _appWindow.global.blockTimer.clear();\r\n\r\n }\r\n };\r\n\r\n glb.setupTabJump = function () {\r\n $(document).on('keydown', ':text', function (e) { //on keydown for all textboxes \r\n if (e.keyCode == 13) //if this is enter key \r\n {\r\n e.preventDefault();//Block enter and jump to next tabindex\r\n var tabindex = parseInt($(this).attr('tabindex'), 10);\r\n // console.debug(\"index:\"+tabindex);\r\n if (tabindex) {\r\n var searching = true;\r\n var searchcount = 0;\r\n while (searching && searchcount < 6) {//iterate until tabindex found or 5 jumps and none found\r\n // console.debug(\"seeking next:\" + (tabindex + 1));\r\n var $next = $('[tabindex=' + (tabindex + 1) + ']');\r\n if ($next.length) {\r\n // console.debug(\"found next:\" + $next.attr('tabindex'));\r\n if ($next.is(':image, a')) {\r\n $next.click();\r\n } else {\r\n $next.focus();\r\n }\r\n searching = false;\r\n } else {\r\n tabindex++;\r\n searchcount++;\r\n }\r\n }\r\n }\r\n }\r\n });\r\n };\r\n\r\n\r\n glb.popIsOpen = function (popupConf) {\r\n return _appWindow.global.popRegistry.indexOf(popupConf.id) >= 0;\r\n };\r\n\r\n glb.showPopup = function (params) {\r\n if (!glb.popupsBlocked) {\r\n var windowParams = {\r\n name: 'Fancy',\r\n id: params.conf.id,\r\n allowCloseOutside: false,\r\n cssClass: params.conf.cssClass,\r\n width: params.conf.width,\r\n height: params.conf.height,\r\n onClose: params.onClose,\r\n openArgs: params.openArgs,\r\n loadCallback: params.loadCallback,\r\n url: params.conf.url,\r\n query: params.query,\r\n content: params.content,\r\n queueJump: params.queueJump // If true, shows a popup immediately by pushing it to the top of the stack\r\n };\r\n //console.log('showwindow params', windowParams.id);\r\n glb.showWindow(windowParams);\r\n } else {\r\n //console.log('global.showPopup blocked: ', params);\r\n }\r\n };\r\n\r\n var _openArgsPrefix = 'openArgs_';\r\n\r\n //Returns openArgs from session storage and deletes it.\r\n glb.getOpenArgs = function (popup) {\r\n var argsID = _openArgsPrefix + (popup.id || '');\r\n var args = tios.util.getFromStorage(argsID, true);\r\n tios.util.convertDateStringsToDates(args);//make sure dates are dates\r\n tios.util.removeFromStorage(argsID, true);\r\n return args;\r\n };\r\n\r\n // Fancybox variant\r\n glb.showWindow = function (passedParams, queuedObject) {\r\n if (!glb.popupsBlocked) {\r\n\r\n // If not performing the display of a queued item, add it to the queue first\r\n if (!queuedObject) {\r\n\r\n // Later, this object will be retrieved from the queue and passed into this method, where the params will subsequently be deleted\r\n var newOut = {\r\n params: passedParams,\r\n type: 'window',\r\n popupID: ('popup' + _popupCount++),\r\n };\r\n\r\n // If not jumping the queue, push this into the queue\r\n if (!passedParams.queueJump) {\r\n //console.log('pushing');\r\n _popupQueue.push(newOut);\r\n }\r\n\r\n //console.log('global.showWindow queued: ', passedParams.id);\r\n //console.log('queue', _popupQueue);\r\n\r\n // If it's not deferred and is the only popup queued, allow it to show now. (queue will be at least length one at this point)\r\n if (passedParams.queueJump || (!_deferPopups && _popupQueue.length == 1)) {\r\n glb.showWindow(null, newOut);// Call this method with the newly added object\r\n }\r\n } else {\r\n glb.blockAction('showWindow');\r\n\r\n //use fancybox\r\n if (typeof _appWindow.$.fancybox == _f) {\r\n var params = queuedObject.params;\r\n\r\n var fbContent = null;\r\n var fbParams = {\r\n autoSize: false,\r\n\r\n type: null,// unless specifying using iframe or specifying ajax.\r\n scrolling: 'no',\r\n wrapCSS: 'fbTIOS',\r\n closeBtn: false,\r\n modal: false,\r\n padding: 0,\r\n minWidth: 1,\r\n minHeight: 1,\r\n autoResize: false,\r\n arrows: false,\r\n //beforeClose:function(){ glb.unBlock(); return true;},\r\n afterShow: function () { glb.unBlock(); },\r\n };\r\n\r\n if (!params.id) throw (\"Window does not have params.id specified\");\r\n\r\n var argsID = _openArgsPrefix + params.id;\r\n\r\n if (params.cssClass) {\r\n fbParams.wrapCSS += ' ' + params.cssClass;\r\n }\r\n\r\n if (typeof params.autoCenter !== _u) {\r\n fbParams.autoCenter = params.autoCenter;\r\n fbParams.fitToView = false;\r\n }\r\n\r\n if (params.url) {\r\n fbParams.type = _iframe;\r\n\r\n var newUrl = params.url;\r\n if (params.query) {\r\n newUrl += (newUrl.indexOf('?') > -1 ? '&' : '?') + tios.util.buildParams(params.query);\r\n }\r\n\r\n fbContent = newUrl;\r\n } else if (params.content) {\r\n fbContent = params.content;\r\n }\r\n\r\n if (!params.useContentSize && params.width && params.height) {\r\n var newSize = _getNewWindowSize(params.width, params.height);//scale full size dimensions\r\n\r\n _appWindow.global.popupWindowInitialHeight = params.height;\r\n _appWindow.global.popupWindowInitialWidth = params.width;\r\n\r\n fbParams.width = newSize.width\r\n fbParams.height = newSize.height;\r\n } else if (params.useContentSize) {\r\n var newSize;\r\n //Disable all autosizing properties\r\n fbParams.wrapCSS += ' ' + _csssizingclass;//set to csssize class so that we can tell the resize method not to bother resizing this window.\r\n fbParams.autoCenter = false;//disable code-based centring because css does this\r\n fbParams.fitToView = false;\r\n fbParams.margin = 0;\r\n fbParams.leftRatio = 0;\r\n fbParams.topRatio = 0;\r\n /*\r\n if (params.content.nodeType) {\r\n //get size specifier from data-popupwidth / data-popupheight attrs, or use the original dom render size to calculate\r\n if (params.content.attributes['data-popupheight'] && params.content.attributes['data-popupwidth']) {\r\n newSize = _getNewWindowSize(params.content.attributes['data-popupwidth'].value, params.content.attributes['data-popupheight'].value);//scale full size dimensions\r\n fbParams.width = newSize.width\r\n fbParams.height = newSize.height;\r\n } else {\r\n fbParams.width = params.content.offsetWidth;\r\n fbParams.height = params.content.offsetHeight;\r\n newSize = _getNewWindowSize(params.content.offsetWidth, params.content.offsetHeight, true);//work out what the full size would be (as this is scaled) and store it\r\n }\r\n }\r\n if (newSize) {\r\n _appWindow.global.popupWindowInitialHeight = newSize.height;\r\n _appWindow.global.popupWindowInitialWidth = newSize.width;\r\n }*/\r\n }\r\n\r\n fbParams.afterClose = function (args) {\r\n //console.log('fancybox afterclose', args);\r\n glb.unBlock();//callback here - declared below\r\n tios.util.removeFromStorage(argsID, true); /*Remove the openArgs in case they were not cleared after opening*/\r\n\r\n //If no onClose declared, use this default\r\n if (typeof params.onClose == _f) {\r\n //pass in the application level window Args as stored by the closeWindow function\r\n //console.log('firing onClose for window',_appWindow.global.popupWindowCloseArgs);\r\n params.onClose(_appWindow.global.popupWindowCloseArgs);//Fire the passed in onClose function, passing in the arguments\r\n _appWindow.global.popupWindowCloseArgs = null;//Reset the _appWindow args once the function has been called\r\n\r\n if (params.content) {\r\n $(params.content).show();//undo the automatic hide of once-shown content (otherwise it won't have content size when reused);\r\n }\r\n }\r\n\r\n // Remove the popup's ID from the registry of open popups\r\n _appWindow.global.popRegistry.splice(_appWindow.global.popRegistry.findIndex(function (i) { return i === params.id }), 1);\r\n\r\n // Trigger the closure event so pages subscribing to this window being opened/closed can react accordingly\r\n window.dispatchEvent(new CustomEvent(_popupEventHandler, { detail: { opened: false, id: params.id, window: null } }));\r\n\r\n // Remove the popup from the queue of popups to open\r\n\r\n var windowIndex = _popupQueue.findIndex(function (i) { return i.popupID === _currentlyOpenID });\r\n //console.log('windowindex for ' + _currentlyOpenID + ' is ' + windowIndex);\r\n // If the window is found in the queue, remove it from the list\r\n if (windowIndex >= 0) {\r\n _popupQueue.splice(windowIndex, 1);\r\n }\r\n _currentlyOpenID = null;\r\n\r\n // If popups are not deferred, run the next one in the queue\r\n if (!_deferPopups) {\r\n //console.log('running queue, undeferred');\r\n glb.runPopupQueue();\r\n } else {\r\n //console.log('not running queue, popups are deferred');\r\n }\r\n };//if run beforeclose, causes infinite loop\r\n\r\n if (params.openArgs && fbParams.type == _iframe)//Set the data to be passed into the window (if it's an iframe)\r\n {\r\n if (!params.id || params.id.length == 0) console.error('window requires id to pass args');\r\n tios.util.saveToStorage(argsID, params.openArgs, true);//Save the openargs to session storage for immediate referencing in opened popups\r\n // Using sessions prevents it from being accessible across tabs\r\n\r\n //Set the afterLoad of the fancybox to call the onOpen method within the window, passing in openArgs\r\n fbParams.afterLoad = function () {\r\n //Grab the window of the opened page and set the args\r\n //this.content[0].contentWindow.openArgs = params.openArgs;\r\n\r\n var fbwin = this.content[0].contentWindow;\r\n\r\n if (typeof fbwin.onOpen == _f) {\r\n fbwin.onOpen(params.openArgs);//Trigger the onOpen function\r\n }\r\n\r\n // If no loadCallback defined, set it to an empty function now (prevents need to check in windows)\r\n fbwin.openArgs = params.openArgs;// Push the args to a variable in the window\r\n fbwin.loadCallback = params.loadCallback || function noop() { };\r\n\r\n // Trigger the popup opened event with the ID\r\n window.dispatchEvent(new CustomEvent(_popupEventHandler, { detail: { opened: true, id: params.id, window: fbwin } }));\r\n };\r\n } else {\r\n tios.util.removeFromStorage(argsID, true);\r\n }\r\n\r\n if (params.allowCloseOutside) {\r\n fbParams.modal = false;\r\n } else {\r\n fbParams.modal = true;\r\n }\r\n\r\n // wait until the fancybox object is truly ready (has the modal in place etc.) before firing, by triggering on document ready\r\n $(document).ready(function () {\r\n _appWindow.$.fancybox.open(fbContent, fbParams);\r\n\r\n // Push the currently open window's ID onto the appwindow's popup registry\r\n _appWindow.global.popRegistry.push(params.id);\r\n\r\n _currentlyOpenID = queuedObject.popupID;\r\n });\r\n }\r\n }\r\n } else {\r\n //console.log('global.showWindow blocked: ', params);\r\n }\r\n };\r\n\r\n //Resize window, fancybox variant\r\n glb.resizeWindow = function (width, height) {//global.resizeWindow\r\n if (window !== _appWindow) {\r\n _appWindow.global.resizeWindow(width, height);\r\n } else {\r\n // This is the app window\r\n var newSize = _getNewWindowSize(width, height);\r\n\r\n //Resize an open fancybox\r\n if (typeof _appWindow.$.fancybox == _f) {//only run this on pages with fancybox\r\n if (_appWindow.$.fancybox.current && _appWindow.$.fancybox.current.wrapCSS.indexOf(_csssizingclass) === -1) {//Only update the sizes in javascript if not using the css sizing.\r\n _appWindow.$.fancybox.current.width = newSize.width\r\n _appWindow.$.fancybox.current.height = newSize.height\r\n _appWindow.$.fancybox.update();//enforce new size\r\n }\r\n }\r\n }\r\n };\r\n\r\n //Check whether our fancybox window is open or not\r\n glb.isWindowOpen = function () {\r\n if (typeof _appWindow.$.fancybox == _f && _appWindow.$.fancybox.current) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n };\r\n\r\n glb.closeActiveWindow = function (args) {//Closes any active window (usually from within the window)\r\n if (typeof args === _u) args = null;//map undefined to null\r\n glb.blockAction('global.closeActiveWindow()');\r\n\r\n if (glb.isWindowOpen()) {\r\n _appWindow.global.popupWindowCloseArgs = args;//pass args up to application level now that window no longer exists\r\n _appWindow.$.fancybox.close();\r\n }\r\n\r\n _appWindow.global.popupWindowInitialWidth = null;\r\n _appWindow.global.popupWindowInitialHeight = null;\r\n };\r\n\r\n //Scroll to an element within parent\r\n glb.scrollElement = function (rowSelector, parentSelector, timing) {\r\n var $selectedElement = $(rowSelector);\r\n if ($selectedElement.length) {\r\n $selectedElement.first().parents(parentSelector).animate({ scrollTop: ($selectedElement.offsetParent().scrollTop() + $selectedElement.position().top) + 'px' }, timing);\r\n return $selectedElement;\r\n } else {\r\n return null;\r\n }\r\n };\r\n\r\n // Deprecated requireoneofgroup method\r\n glb.checkRequiredGroups = function (caller, sender) {\r\n //console.log('checkRequiredGroups called by ' + caller);\r\n function _checkGroup(group) {\r\n\r\n var $all = $('[data-requireoneofgroup=\"' + group + '\"]');\r\n $all.attr(_required, _required);\r\n\r\n var foundValid = false;\r\n\r\n //loop until at least one valid item found\r\n $all.each(function () {\r\n if (this.checkValidity()) {\r\n foundValid = true;\r\n return false;//break\r\n }\r\n });\r\n\r\n if (foundValid) {//remove validation from others\r\n $all.removeAttr(_required);\r\n }\r\n }\r\n\r\n if (sender) {\r\n //check the sender's group for required inputs\r\n var groupname = $(sender).attr('data-requireoneofgroup');\r\n if (groupname && groupname.length) {\r\n _checkGroup(groupname);\r\n }\r\n } else {\r\n //check the page for required groups and build a list\r\n var $requiredgroupcontrols = $('[data-requireoneofgroup]');\r\n var grouplist = [];\r\n $requiredgroupcontrols.each(function () {\r\n var groupname = $(this).attr('data-requireoneofgroup');\r\n if (grouplist.indexOf(groupname) < 0) {\r\n //add if not already in list\r\n grouplist.push(groupname);\r\n }\r\n });\r\n //iterate the new list and check each group in turn\r\n if (grouplist.length) {\r\n for (var i = 0; i < grouplist.length; i++) {\r\n _checkGroup(grouplist[i]);\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n glb.highlighter = function (caller, parentselector) {\r\n\r\n //console.log('highlighter called by ' + caller);\r\n\r\n var highlightselector = '[data-highlight]';\r\n var inputSelector = 'input, textarea';\r\n var customSelector = 'dropdown';\r\n var emptyclass = 'empty';\r\n var invalidclass = 'invalid';\r\n\r\n var invalidcount = 0;\r\n var highlightcount = 0;\r\n var emptycount = 0;\r\n var filledcount = 0;\r\n\r\n if (parentselector && parentselector.length) {\r\n highlightselector = parentselector + ' ' + highlightselector;\r\n }\r\n\r\n $(highlightselector).each(function () {\r\n\r\n var $container = $(this);\r\n\r\n if ($container.is(':visible')) {\r\n var parentcomplete = true;\r\n var parentvalid = true;\r\n\r\n var highlightoption = $container.attr('data-highlight');\r\n\r\n var $inputs;\r\n\r\n switch (highlightoption) {\r\n case 'all':\r\n $inputs = $container.find(inputSelector + ', ' + customSelector);//all inputs, even nested in other highlighters\r\n break;\r\n default:\r\n $inputs = $container.children(inputSelector + ', ' + customSelector);//only first descendants\r\n break;\r\n }\r\n\r\n $inputs.each(function () {\r\n var $this = $(this);\r\n var isHidden = $this.attr('type') == 'hidden';\r\n var isRequired = $this.hasClass('ng-required') || $this.attr(_required) == _required;\r\n var isEmpty = ($this.val().length == 0 && !$this.hasClass('ng-not-empty')) || $this.hasClass('ng-empty');\r\n var isInValid = $this.hasClass('ng-invalid-required') || $this.hasClass('ng-invalid-pattern') || ($this.is(inputSelector) && !$this.get(0).checkValidity());\r\n\r\n //if not hidden and invalid, or if hidden and length zero, it's invalid\r\n if ((/*!isHidden &&*/ isInValid) || (isEmpty && isRequired)) {\r\n //is it invalid or required but empty\r\n parentvalid = false;\r\n return false;//break out\r\n } else {\r\n //is it just empty\r\n if (isEmpty) {\r\n parentcomplete = false;\r\n return false;//break out\r\n }\r\n }\r\n });\r\n\r\n highlightcount++;\r\n\r\n if (parentvalid) {\r\n $container.removeClass(invalidclass);\r\n if (parentcomplete) {\r\n $container.removeClass(emptyclass);\r\n filledcount++;\r\n } else {\r\n emptycount++;\r\n $container.addClass(emptyclass);\r\n }\r\n } else {\r\n $container.addClass(invalidclass);\r\n invalidcount++;\r\n }\r\n }\r\n });\r\n return { invalid: invalidcount, count: highlightcount, empty: emptycount, filled: filledcount };\r\n };\r\n\r\n glb.showError = function (response, caller) {\r\n //console.error('showerror', response);\r\n glb.unBlock();\r\n if (!glb.loggingOut) {//do not make this popup show if it's due to authentication (the user is being logged out)\r\n var alertHTML = 'Please click OK and try again.';\r\n var htmlType = 'text/html';\r\n //var errMsg = '';\r\n\r\n var rd = response.data || null;\r\n //var rj = response.responseJSON || null;\r\n //var rt = response.responseText || null;\r\n\r\n //var dataIsHtml = (typeof response.headers === _f && (response.headers()['content-type'] || '').indexOf(htmlType) > -1) || (typeof response.getResponseHeader === _f && (response.getResponseHeader('Content-Type') || '').indexOf(htmlType) > -1);\r\n\r\n //var usePre = true; // Default to using pre tags for output\r\n\r\n // If there's a returned error ID, display only that with the error message;\r\n if (rd && rd.ErrorID) {\r\n // alertHTML = errMsg + rd.ErrorID;\r\n usePre = false; // Don't use a pre tag as the message looks horrid\r\n } else if (rd && rd.ErrorMessage) { // If this is just a plain message to show the user, do this now\r\n alertHTML = rd.ErrorMessage;\r\n usePre = false; // Don't use a pre tag\r\n }\r\n //else {\r\n // if (dataIsHtml) {\r\n // if (rd) {\r\n // alertHTML = rd;\r\n // } else if (rt) {\r\n // alertHTML = rt;\r\n // }\r\n // } else {\r\n // if (rj) {\r\n // if (rj.ErrorID) {\r\n // alertHTML = errMsg + rj.ErrorID;\r\n // } else {\r\n // alertHTML += _appendObjectKeysToHTML(rj, alertHTML);\r\n // }\r\n // } else if (rd) {\r\n // if (typeof rd == _s) {\r\n // alertHTML += rd;\r\n // }\r\n // else if (rd.Message) {\r\n // alertHTML += rd.Message;\r\n // } else {\r\n // alertHTML += _appendObjectKeysToHTML(rd, alertHTML);\r\n // }\r\n // } else if (response.ErrorMessage) {\r\n // alertHTML = response.ErrorMessage;\r\n // }\r\n // }\r\n //}\r\n\r\n //if (alertHTML.length) {\r\n // if (dataIsHtml) {\r\n // var newWindow = window.open('', 'Error', 'location=no,toolbar=0');\r\n // newWindow.document.open();\r\n // newWindow.document.write(alertHTML);\r\n // newWindow.document.close();\r\n // } else {\r\n // if (usePre) {\r\n // alertHTML = '
' + alertHTML + '
';\r\n // }\r\n\r\n glb.showConfirm({ title: 'Something went wrong', message: alertHTML, isHtml: true, addClasses: ['errorpopup', 'groerror'] });\r\n // }\r\n //}\r\n\r\n }\r\n };\r\n\r\n \r\n //Finally, run this when the document is ready\r\n glb.launch = function () {\r\n //console.log('global.launch called');\r\n glb.onFullscreen();\r\n\r\n //fullscreen behaviour\r\n\r\n if (window.top.fshandler && window.top.fshandler.fullscreencapable) {\r\n var $fullscreenbutton = tios.util.addToTiosBar('
');\r\n\r\n if ($fullscreenbutton) {\r\n $fullscreenbutton.click(function (event) {\r\n window.top.document.toggleFullScreen(event);\r\n });\r\n }\r\n }\r\n\r\n //Set focus on marked controls\r\n $('input.DefaultFocus, .DefaultFocus input').focus();\r\n\r\n // Enable tooltip framework\r\n //_bindTooltips();\r\n\r\n\r\n //setTimeout(function () { $('html').addClass('wf-active').removeClass('wf-inactive');}, 4000);//fallback for non-loading webfont\r\n //Prevent context menu on specified elements.\r\n $('.NoContext').on('contextmenu', function (e) { return false; });\r\n }\r\n\r\n //#endregion\r\n\r\n\r\n\r\n\r\n //#region external configuration\r\n\r\n\r\n /* // This is presently not implemented\r\n //replace the content of an element that has data-overcontent attribute with that attribute on rollover and on rolloff set the content to data-offcontent\r\n $(\"body\").on({\r\n mouseenter: function () {\r\n var overcontent = $(this).attr('data-overcontent');\r\n if (overcontent) {\r\n if (overcontent == ' ') {\r\n overcontent = '-';\r\n }\r\n $(this).html(overcontent);\r\n }\r\n },\r\n mouseleave: function () {\r\n var offcontent = $(this).attr('data-offcontent');\r\n if (offcontent) {\r\n $(this).html(offcontent);\r\n }\r\n },\r\n }, \"[data-overcontent]\");\r\n */\r\n\r\n //Trigger removal of blockaction when leaving a page, so returning does no cause the page to be blocked on cached versions (not necessary because of below)\r\n window.onbeforeunload = _defaultUnload;//This line for some reason causes the browser to not cache the previous page's render (which is desirable, or outdated information may be shown)\r\n\r\n //#endregion\r\n \r\n return glb;\r\n }(global || {}, jQ));\r\n\r\n if (!!angular) {\r\n var globalModule = angular.module('globalModule', []);\r\n globalModule.constant('globalUtil', global);// Using constants so they can be referenced in config blocks\r\n }\r\n\r\n window.global = global;\r\n\r\n})();"]}