PageSourceSearch

https://ahisa.com.au/

html ahisa.com.au collected 2026-10-02 13:54:26 UTC 29,946 bytes, 681 lines download raw bytes

1
2<!DOCTYPE html>
3<html>
4<head><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
5	
5<script>
6
7		function setTaggedSessionInfo(tag, taggedSessionInfo) {
8			var oldTaggedSessionInfo = window._taggedSessionInfos[tag];
9			window._taggedSessionInfos[tag] = taggedSessionInfo;
10
11			if (!oldTaggedSessionInfo || taggedSessionInfo.SessionID != oldTaggedSessionInfo.SessionID || taggedSessionInfo.Code != oldTaggedSessionInfo.Code)
12				SC.livedata.notifyDirty();
13		}
14
15		// backwards compatibility with extensions
16		function setTaggedSessionID(tag, sessionID) {
17			window.setTaggedSessionInfo(tag, { SessionID: sessionID });
18		}
19
20		function getTaggedSessionInfo(tag) {
21			return window._taggedSessionInfos[tag];
22		}
23		
24		function getSessionInfo() {
25			var liveData = SC.livedata.get();
26			return liveData && liveData.ResponseInfoMap && liveData.ResponseInfoMap['GuestSessionInfo']
27		}
28
29	</script>
vendor: 2 bytes, line 29
29
30<script src="Script.ashx?__Cache=0ee8256a-0748-48d9-9923-91896ac0f46b" id="defaultScript"></script>
vendor: 2 bytes, line 30
30
31<script src="Scripts/SC.polyfill.ts?ScriptImportType=NoModule&amp;__Cache=3ebe4e34-a85e-424c-a1c7-3a4674fe3304" nomodule="nomodule"></script>
vendor: 2 bytes, line 31
31
32<script src="Scripts/SC.main.ts?ScriptImportType=NoModule&amp;__Cache=55cb249c-7676-42a2-a99d-1f2a34a6425e" nomodule="nomodule"></script>
vendor: 2 bytes, line 32
32
33<script src="Scripts/SC.main.ts?ScriptImportType=Classic&amp;__Cache=55cb249c-7676-42a2-a99d-1f2a34a6425e"></script>
33
34<link href="App_Themes/DarkTeal/Default.css?__Cache=83720b3a-a9a7-41cc-8143-7aa882d307a1" type="text/css" rel="stylesheet" /><link href="FavIcon.axd?__Cache=2d6d768c-f4cb-439b-8aa6-2bf30d119c31" rel="shortcut icon" />
35<script>SC.util.mergeIntoContext({"focusedControlID":null,"userName":"","userDisplayName":"","isUserAuthenticated":false,"antiForgeryToken":"3L6CdvegzPAG4hkHCTcRw6FdzWz7iDOiPj+MGTp5TiEBAACdKSRdo8QtQg==","isUserAdministrator":false,"canManageSharedToolbox":false,"pageBaseFileName":"Guest","notifyActivityFrequencyMilliseconds":600000,"loginAfterInactivityMilliseconds":36000000,"canChangePassword":false,"controlPanelUrl":null,"pageType":"GuestPage","processType":2,"userAgentOverride":null,"sessionTypeInfos":[],"imports":{"SC.editor":"Scripts/SC.editor.ts?ScriptImportType=EsModule\u0026__Cache=a9920599-bec9-48ae-8f85-bb63b512f9ca"}});</script>
35
36<title>
37	ScreenConnect Remote Support Software
38</title></head>
39<body>
40	<div class="HiddenPanel"></div>
41	
41<script>
42		SC.ui.setVisible(document.body, false);
43	</script>
43
44	<div class="OuterPanel">
45		<div class="HeaderPanel"></div>
46		<div class="NavigationPanel ArrowNavigation" tabindex="10"></div>
47		<div class="MainPanel">
48			
49	<div class="ContentPanel">
50		<div>
51			<div class="WelcomePanel"></div>
52			<div class="ActionPanel"></div>
53		</div>
54		<div class="InfoPanel"></div>
55	</div>
56
57		</div>
58	</div>
59	
59<script>
60		SC.context.scriptBaseUrl = SC.util.getBaseUrl($('defaultScript').src);
61	</script>
61
62	
63	
63<script>
64
65		SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) {
66			var session = null;
67			var hostAccessToken = null;
68
69			switch (eventArgs.commandName) {
70				case 'JoinBySessionID':
71					session = window.getSessionInfo().Sessions.filter(function (s) { return s.SessionID == eventArgs.commandArgument; })[0];
72					break;
73				case 'JoinByTag':
74					var taggedSessionInfo = window.getTaggedSessionInfo(eventArgs.commandArgument);
75					hostAccessToken = taggedSessionInfo.HostAccessToken;
76					session = window.getSessionInfo().Sessions.filter(function (s) { return s.SessionID == taggedSessionInfo.SessionID || (taggedSessionInfo.Code && s.Code.toLowerCase() == taggedSessionInfo.Code.toLowerCase()); })[0];
77					break;
78			}
79
80			// older IE only allows launching urls on actual clicks and this could be sent by a keystroke
81			if (session && (SC.command.doesClickDispatch(eventArgs.commandElement) || !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 11 }))) {
82				SC.launch.startJoinSession(
83					{ session: session, hostAccessToken: hostAccessToken, processType: hostAccessToken ? SC.types.ProcessType.Host : SC.types.ProcessType.Guest },
84					function (joinInfo, _, onSuccess, onFailure) {
85						onSuccess(
86							SC.util.getClientLaunchParameters(
87								joinInfo.session.SessionID,
88								joinInfo.session.SessionType,
89								joinInfo.session.Name,
90								joinInfo.fieldMap.participantName.value,
91								null,
92								joinInfo.hostAccessToken,
93								joinInfo.processType
94							)
95						);
96					}
97				);
98			}
99		});
100
101		SC.event.addGlobalHandler(SC.event.QueryJoinInfo, function (eventArgs) {
102			if (eventArgs.session) {
103				eventArgs.shouldShowPrompt = SC.util.getSessionTypeBooleanResource('JoinPanel.{0}PromptVisible', eventArgs.session.SessionType);
104				eventArgs.promptText = SC.util.getSessionTypeResource('JoinPanel.{0}PromptMessage', eventArgs.session.SessionType);
105				eventArgs.buttonText = SC.util.getSessionTypeResource('JoinPanel.{0}PromptButtonText', eventArgs.session.SessionType);
106
107				eventArgs.fieldMap.participantName = {
108					labelText: SC.util.getSessionTypeResource('JoinPanel.{0}ParticipantNameLabelText', eventArgs.session.SessionType),
109					value: '',
110					visible: SC.util.getSessionTypeBooleanResource('JoinPanel.{0}PromptParticipantNameVisible', eventArgs.session.SessionType),
111				};
112			}
113		});
114
115		SC.event.addGlobalHandler(SC.event.QueryParticipantJoinedCount, function (eventArgs) {
116			var sessionInfo = window.getSessionInfo();
117			var session = sessionInfo.Sessions.find(function (s) { return s.SessionID === eventArgs.clientLaunchParameters.s; });
118
119			if (session !== undefined)
120				eventArgs.participantJoinedCount = session.ActiveConnections.filter(function (ac) {
121					if (eventArgs.clientLaunchParameters.n)
122						return ac.ProcessType == SC.types.ProcessType.Host;
123
124					return ac.ProcessType == SC.types.ProcessType.Guest && ac.ParticipantName == eventArgs.clientLaunchParameters.r;
125				}).length;
126		});
127
128		SC.event.addGlobalHandler(SC.event.QueryPanels, function (eventArgs) {
129			switch (eventArgs.area) {
130				case 'GuestActionPanel':
131					eventArgs.panelDefinitions.push({
132						initProc: function (container) {
133							SC.ui.setContents(container, $div({ className: 'Loading' }));
134						},
135						isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) {
136							return pass == 1 && sessionInfo == null;
137						}
138					});
139
140					eventArgs.panelDefinitions.push({
141						initProc: function (container) {
142							SC.ui.setContents(container, [
143								$a({ _commandName: 'JoinByTag', _commandArgument: 'DefaultSession', className: 'GoLink Large', _attributeMap: { 'aria-label': SC.res['GuestActionPanel.ButtonDescription'] } }),
144								$h2({ _htmlResource: 'GuestActionPanel.InvitationSession.Heading' }),
145								$p({ _htmlResource: 'GuestActionPanel.InvitationSession.Message' }),
146							]);
147						},
148						isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) {
149							return pass == 3 &&
150								previousPassVisibleCount == 0 &&
151								sessionInfo != null &&
152								sessionInfo.Sessions.find(function (s) { return s.SessionID == window.getTaggedSessionInfo('DefaultSession').SessionID; });
153						}
154					});
155
156					eventArgs.panelDefinitions.push({
157						initProc: function (container) {
158							SC.ui.setContents(container, [
159								$h2({ _htmlResource: 'GuestActionPanel.CodeSession.Heading' }),
160								$p({ _htmlResource: 'GuestActionPanel.CodeSession.Message' }),
161								$p({ className: 'GuestActionBar' }, [
162									SC.ui.createSearchTextBox({ _commandName: 'JoinByTag', _commandArgument: 'DefaultCode', value: window.getTaggedSessionInfo('DefaultCode').Code || '' }, function (eventArgs) {
163										var sessionCode = SC.util.getTrimmedOrNull(SC.event.getElement(eventArgs).value);
164										window.setTaggedSessionInfo('DefaultCode', { Code: sessionCode });
165									}),
166									$a({ _commandName: 'JoinByTag', _commandArgument: 'DefaultCode', className: 'GoLink Medium', _attributeMap: { 'aria-label': SC.res['GuestActionPanel.ButtonDescription'] } }),
167								]),
168							]);
169						},
170						isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) {
171							return pass == 5 && previousPassVisibleCount == 0 && sessionInfo != null && sessionInfo.DoNonPublicCodeSessionsExist;
172						},
173						refreshProc: function (container, sessionInfo, wasMadeVisible) {
174							var taggedSessionInfo = window.getTaggedSessionInfo('DefaultCode');
175
176							SC.ui.setDisabled(
177								SC.ui.findDescendentByTag(container, 'A'),
178								!sessionInfo.Sessions.find(function (s) { return taggedSessionInfo.Code && s.Code.toLowerCase() == taggedSessionInfo.Code.toLowerCase(); })
179							);
180
181							if (wasMadeVisible)
182								SC.ui.findDescendentByTag(container, 'INPUT').focus();
183						}
184					});
185
186					eventArgs.panelDefinitions.push({
187						initProc: function (container) {
188							SC.ui.setContents(container, [
189								$h2({ _htmlResource: 'GuestActionPanel.PublicSession.Heading' }),
190								$p({ _htmlResource: 'GuestActionPanel.PublicSession.Message' }),
191								$p({ className: 'GuestActionBar' }, [
192									$select(),
193									$a({ _commandName: 'JoinBySessionID', className: 'GoLink Medium', _attributeMap: { 'aria-label': SC.res['GuestActionPanel.ButtonDescription'] } }),
194								]),
195							]);
196
197							SC.event.addHandler(SC.ui.findDescendentByTag(container, 'SELECT'), 'change', function (eventArgs) {
198								var selectBox = SC.event.getElement(eventArgs);
199								SC.ui.findDescendentByTag(container, 'A')._commandArgument = selectBox.options[selectBox.selectedIndex].value;
200							});
201						},
202						isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) {
203							return pass == 5 && previousPassVisibleCount == 0 && sessionInfo != null && sessionInfo.Sessions.filter(function (s) { return s.IsPublic; }).length > 0;
204						},
205						refreshProc: function (container, sessionInfo, wasMadeVisible) {
206							var selectBox = SC.ui.findDescendentByTag(container, 'SELECT');
207							var link = SC.ui.findDescendentByTag(container, 'A');
208
209							SC.ui.setContents(selectBox,
210								sessionInfo.Sessions.filter(function (s) { return s.IsPublic; }).map(function (s) {
211									return $option({ value: s.SessionID }, s.Name);
212								})
213							);
214
215							var optionIndex = Array.prototype.findIndex.call(selectBox.options, function (o) { return o.value == link._commandArgument; });
216
217							if (optionIndex != -1)
218								selectBox.selectedIndex = optionIndex;
219							else
220								link._commandArgument = selectBox.options[selectBox.selectedIndex].value;
221						}
222					});
223
224					eventArgs.panelDefinitions.push({
225						initProc: function (container) {
226							SC.ui.setContents(container, [
227								$h2({ _htmlResource: 'GuestActionPanel.NoAvailableSessions.Heading' }),
228								$p({ _htmlResource: 'GuestActionPanel.NoAvailableSessions.Message' }),
229							]);
230						},
231						isVisibleProc: function (pass, previousPassVisibleCount, sessionInfo) {
232							return pass == 8 && previousPassVisibleCount == 0;
233						}
234					});
235
236					break;
237			}
238		});
239
240		SC.event.addGlobalHandler(SC.event.QueryLiveData, function (eventArgs) {
241			var getTaggedValuesFunc = function (propertyName) {
242				return Object.keys(window._taggedSessionInfos)
243					.map(function (key) { return window._taggedSessionInfos[key]; })
244					.filter(function (_) { return _[propertyName]; })
245					.map(function (_) { return _[propertyName]; });
246			}
247
248			eventArgs.requestInfoMap['GuestSessionInfo'] = {
249				sessionCodes: getTaggedValuesFunc('Code'),
250				sessionIDs: getTaggedValuesFunc('SessionID'),
251			};
252		});
253
254		SC.event.addGlobalHandler(SC.event.PreRender, function () {
255			window._taggedSessionInfos = {};
256
257			SC.css.ensureClass(document.documentElement, 'ShowMenu', false);
258
259			var queryStringMap = SC.util.parseQueryString(window.location.search);
260			window.setTaggedSessionInfo('DefaultCode', { Code: queryStringMap.Code });
261			window.setTaggedSessionInfo('DefaultSession', { SessionID: queryStringMap.Session, HostAccessToken: queryStringMap.HostAccessToken });
262
263			var welcomePanel = $('.WelcomePanel');
264			var actionPanel = $('.ActionPanel');
265
266			SC.ui.setVisible(welcomePanel, SC.util.getBooleanResource('GuestWelcomePanel.Visible'));
267
268			SC.ui.setContents(welcomePanel, [
269				$h2({ _htmlResource: 'GuestWelcomePanel.Heading' }),
270				$p({ _htmlResource: 'GuestWelcomePanel.Message' }),
271			]);
272
273			SC.panellist.queryAndInitializePanels(actionPanel);
274			SC.panellist.refreshPanels(actionPanel, null);
275		});
276
277		SC.event.addGlobalHandler(SC.event.LiveDataRefreshed, function () {
278			SC.panellist.refreshPanels($('.ActionPanel'), window.getSessionInfo());
279
280			if (!window._hasJoinedDefault && !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 11 })) {
281				SC.command.dispatchExecuteCommand(window.document.body, window.document.body, window.document.body, 'JoinByTag', 'DefaultSession');
282				window._hasJoinedDefault = true;
283			}
284		});
285
286	</script>
286
287
288	
288<script>
289
290		SC.event.addGlobalHandler(SC.event.QueryCommandButtons, function (eventArgs) {
291			switch (eventArgs.area) {
292				case 'TrayIconPanel':
293					eventArgs.buttonDefinitions.push({ commandName: 'ActionCenter', imageUrl: 'Images/ActionCenter.svg' });
294
295					if (SC.context.isUserAdministrator)
296						eventArgs.buttonDefinitions.push({ commandName: 'Navigate', commandArgument: 'Administration', imageUrl: 'Images/NavigationAdministration.svg' });
297
298					eventArgs.buttonDefinitions.push(
299						{ commandName: 'Extras', imageUrl: 'Images/Extras.svg' },
300						{ commandName: 'Applications', imageUrl: 'Images/Applications.svg' }
301					);
302					break;
303				case 'ExtrasNavigationPopoutPanel':
304					eventArgs.buttonDefinitions.push(
305						{ commandName: 'NavigateExtensionBrowser' }
306					);
307					break;
308				case 'ToolsPanel':
309					eventArgs.buttonDefinitions.push(
310						{ commandName: 'Extras', imageUrl: 'Images/Extras.svg' },
311						{ commandName: 'Login' }
312					);
313					break;
314				case 'UserPopoutPanel':
315					eventArgs.buttonDefinitions.push(
316						{ commandName: 'NavigateControlPanel' },
317						{ commandName: 'ChangePassword' },
318						{ commandName: 'Logout' }
319					);
320					break;
321				case 'UserHelpPopoutPanel':
322					if (SC.context.pageType !== 'GuestPage' && SC.context.pageType != 'LoginPage') {
323						eventArgs.buttonDefinitions.push({ commandName: 'GiveFeedback' });
324
325						for (var i = 1; ; i++) {
326							var resourceValue = SC.res['HelpPanel.Link' + i + '.Text'];
327
328							if (resourceValue === undefined || resourceValue === '')
329								break;
330
331							var url = SC.util.sanitizeUrl(SC.res['HelpPanel.Link' + i + '.Url']);
332							eventArgs.buttonDefinitions.push({ commandName: 'NavigateHelpLink', commandArgument: url, text: resourceValue, title: url });
333						}
334					}
335					break;
336			}
337		});
338
339		SC.event.addGlobalHandler(SC.event.QueryCommandButtonState, function (eventArgs) {
340			switch (eventArgs.commandName) {
341				case 'User':
342				case 'ActionCenter':
343					eventArgs.isVisible = SC.context.isUserAuthenticated;
344					break;
345				case 'Login':
346					eventArgs.isVisible = SC.context.pageType != 'SetupWizardPage' && !SC.context.isUserAuthenticated && !SC.util.isCapable(SC.util.Caps.InternetExplorer, null, { major: 12 }); // Login page doesn't support IE
347					break;
348				case 'NavigateControlPanel':
349					eventArgs.isVisible = !!SC.context.controlPanelUrl;
350					break;
351				case 'ChangePassword':
352					eventArgs.isVisible = SC.context.canChangePassword;
353					break;
354				case 'Extras':
355					eventArgs.isVisible = SC.popout.computePopoutCommandsVisible(eventArgs, ['', 'Navigation']);
356					break;
357				case 'Applications':
358				case 'Help':
359					eventArgs.isVisible = SC.popout.computePopoutCommandsVisible(eventArgs);
360					break;
361				case 'NavigateExtensionBrowser':
362					eventArgs.isVisible = SC.context.isUserAdministrator;
363					break;
364			}
365		});
366
367		SC.event.addGlobalHandler(SC.event.ExecuteCommand, function (eventArgs) {
368			switch (eventArgs.commandName) {
369				case 'Extras':
370					SC.popout.showPanelFromCommand(eventArgs, null, { subAreas: ['', 'Navigation'] });
371					break;
372				case 'Applications':
373					SC.popout.showPanelFromCommand(eventArgs);
374					break;
375				case 'ActionCenter':
376					SC.popout.showPanelFromCommand(eventArgs, null, {
377						buildProc: function (popoutPanel) {
378							var actionCenterInfo = SC.livedata.getResponseInfo(SC.livedata.ActionCenterInfo);
379
380							SC.ui.setContents(popoutPanel, $div({ className: 'ActionCenterPanel' }, [
381								$h2({ _textResource: 'ActionCenterPanel.Text' }),
382								$ul({ className: 'List', _visible: SC.util.any(actionCenterInfo.ActionItems) },
383									(actionCenterInfo.ActionItems || [])
384										.map(function (it) {
385											var parsedEventData = SC.util.parseEventData(it.Data);
386
387											return $li({
388												_eventHandlerMap: {
389													click: function () {
390														window.location.href = SC.nav.getHostUrl({
391															sessionType: it.SessionType,
392															sessionID: it.SessionID,
393															tabName: SC.nav.getHostTabName(it.EventType),
394															tabContext: it.EventID
395														});
396													},
397												}
398											}, [
399												$img({ src: 'Images/Notification' + SC.util.getEnumValueName(SC.types.SessionEventType, it.EventType) + '.svg' }),
400												$h3({ className: 'Type' }, SC.res['SessionEvent.' + SC.util.getEnumValueName(SC.types.SessionEventType, it.EventType) + '.Title']),
401												$p({ className: 'Name', title: it.Name }, it.Name),
402												$p({ className: 'DataContent', title: parsedEventData.content }, parsedEventData.content),
403												$p({ className: 'Time' }, SC.util.formatDateTime(it.Time, { includeRelativeDate: true })),
404											])
405										})
406								),
407								$div({ className: 'EmptyPanel', _visible: !SC.util.any(actionCenterInfo.ActionItems) }, [
408									$p($img({ src: 'images/EmptyActionCenter.svg' })),
409									$h4({ _textResource: 'ActionCenterPanel.EmptyHeader' }),
410									$p({ _textResource: 'ActionCenterPanel.EmptyText' }),
411								]),
412							]));
413						},
414					});
415					break;
416				case 'Login':
417					SC.util.sendToLogin(SC.types.LoginReason.None, false);
418					break;
419				case 'Logout':
420					SC.util.sendToLogin(SC.types.LoginReason.Logout, false);
421					break;
422				case 'User':
423					SC.popout.showPanelFromCommand(eventArgs, null, { subAreas: ['Help', ''] });
424					break;
425				case 'NavigateControlPanel':
426					window.open(SC.util.sanitizeUrl(SC.context.controlPanelUrl));
427					break;
428				case 'ChangePassword':
429					var params = {};
430					params[SC.context.loginUserNameParameterName] = eventArgs.commandArgument;
431					window.location.href = SC.context.changePasswordPageUrl + SC.util.getQueryString(params);
432					break;
433				case 'NavigateHelpLink':
434					window.open(eventArgs.commandArgument);
435					break;
436				case 'ToggleMenu':
437					SC.css.toggleClass(document.documentElement, 'ShowMenu');
438					break;
439				case 'GiveFeedback':
440					SC.dialog.showModalButtonDialog(
441						'GiveFeedback',
442						SC.res['Command.GiveFeedback.Text'],
443						SC.res['Command.GiveFeedback.ButtonText'],
444						'Default',
445						function (container) {
446							SC.ui.setContents(container, [
447								$div({ _textResource: 'GiveFeedbackPanel.ReviewLabelText' }),
448								$div({ className: 'RatingSelectionPanel' },
449									['Good', 'Neutral', 'Bad'].map(function (rating) {
450										return $span(
451											$label({ className: rating }, [
452												$input({ type: 'radio', name: 'rating', value: rating.toLowerCase() }),
453												$div({ className: 'RadioImage' }),
454												$span({ _textResource: 'GiveFeedbackPanel.' + rating + 'RatingLabelText' }),
455											])
456										);
457									})
458								),
459								$div([
460									$label({ _textResource: 'GiveFeedbackPanel.EmailLabelText' }, [
461										$input({ type: 'email', id: 'email' }),
462									]),
463								]),
464								$div([
465									$label({ _textResource: 'GiveFeedbackPanel.CommentsLabelText' }, [
466										SC.ui.createTextBox({ id: 'commentsBox' }, true),
467									]),
468								]),
469							]);
470						},
471						function (eventArgs) {
472							SC.service.SendFeedback(
473								Array.prototype.map.call(document.querySelectorAll('input[name=rating]:checked'), function (e) { return e.value; })[0],
474								$('commentsBox').value,
475								$('email').value,
476								function () {
477									SC.dialog.showModalMessageBox(
478										SC.res['GiveFeedbackPanel.SuccessHeading'],
479										SC.res['GiveFeedbackPanel.SuccessMessage']
480									);
481								}
482							);
483						}
484					);
485					break;
486				case 'ManageToolbox':
487					SC.toolbox.showToolboxDialog(eventArgs.commandName, eventArgs.commandArgument);
488					break;
489				case 'Navigate':
490					window.location.href = eventArgs.commandArgument;
491					break;
492				case 'NavigateExtensionBrowser':
493					window.location.href = SC.context.administrationPageUrl + '?Tab=Extensions#ShowExtensionBrowser';
494					break;
495			}
496		});
497
498		SC.event.addGlobalHandler(SC.event.QueryNavigationLinks, function (eventArgs) {
499			Array.prototype.push.apply(eventArgs.navigationLinks, SC.context.sessionTypeInfos.map(function (_) {
500				return {
501					href: SC.context.scriptBaseUrl + SC.context.hostPageUrl + '#' + SC.util.getEnumValueName(SC.types.SessionType, _.sessionType),
502					text: SC.util.getSessionTypeResource('NavigationPanel.{0}LinkText', _.sessionType),
503					imageUrl: SC.util.formatString('Images/Navigation{0}.svg', SC.util.getEnumValueName(SC.types.SessionType, _.sessionType)),
504					sessionType: _.sessionType,
505				}
506			}));
507		});
508
509		SC.event.addGlobalHandler(SC.event.QueryLiveData, function (eventArgs) {
510			if (SC.context.isUserAuthenticated)
511				SC.livedata.setRequestInfo(eventArgs, SC.livedata.ActionCenterInfo);
512		});
513
514		SC.event.addGlobalHandler(SC.event.LiveDataRefreshed, function () {
515			SC.css.ensureClass($('.NavigationPanel .TrayIconPanel .ActionCenter'), 'NonEmpty', SC.util.any(SC.livedata.getResponseInfo(SC.livedata.ActionCenterInfo).ActionItems));
516		});
517
518		SC.event.addGlobalHandler('keydown', function (eventArgs) {
519			if (SC.event.doesKeyEventIndicateTextEntryOrArrowKeyNavigation(eventArgs) && (!document.activeElement || SC.ui.isDefinitelyNotTextEntryElement(document.activeElement))) {
520				var arrowKeyInfo = SC.event.getArrowKeyInfo(eventArgs);
521
522				if (arrowKeyInfo && document.activeElement && SC.css.containsClass(document.activeElement, 'ArrowNavigation')) {
523					eventArgs.preventDefault();
524					SC.ui.setHiddenFocusAndClearOthers();
525
526					var targetPreviousOrNext = arrowKeyInfo.isLeft || arrowKeyInfo.isUp;
527
528					SC.event.dispatchEvent(document.activeElement, SC.event.KeyNavigation, {
529						currentActiveElement: document.activeElement,
530						currentSelectedElement: SC.ui.findDescendantBreadthFirst(document.activeElement, function (_) { return SC.ui.isSelected(_); }, !targetPreviousOrNext),
531						targetPreviousOrNext: targetPreviousOrNext,
532						arrowKeyInfo: arrowKeyInfo,
533						hasShift: eventArgs.shiftKey,
534					});
535				} else {
536					var queryTextEntryElementArgs = SC.event.dispatchGlobalEvent(SC.event.QueryTextEntryElement, {
537						textEntryElement: null,
538					});
539
540					if (queryTextEntryElementArgs.textEntryElement) {
541						if (!SC.event.doesKeyEventIndicateTextEntryNavigation(eventArgs))
542							queryTextEntryElementArgs.textEntryElement.value = '';
543
544						queryTextEntryElementArgs.textEntryElement.focus();
545					}
546				}
547			}
548		});
549
550		SC.event.addGlobalHandler(SC.event.KeyNavigation, function (eventArgs) {
551			// default handling for key navigation
552			var elementToNavigateTo;
553
554			if (eventArgs.currentSelectedElement) {
555				elementToNavigateTo = SC.ui.getPreviousOrNextElementSibling(eventArgs.currentSelectedElement, eventArgs.targetPreviousOrNext) || eventArgs.currentSelectedElement;
556
557				while (SC.util.isNullOrEmpty(elementToNavigateTo._commandName) && SC.ui.getPreviousOrNextElementSibling(elementToNavigateTo, eventArgs.targetPreviousOrNext)) {
558					elementToNavigateTo = SC.ui.getPreviousOrNextElementSibling(elementToNavigateTo, eventArgs.targetPreviousOrNext);
559				}
560			} else {
561				elementToNavigateTo = SC.ui.findDescendantBreadthFirst(eventArgs.currentActiveElement, function (_) { return !SC.util.isNullOrEmpty(_._commandName); }); // this can still be empty
562			}
563
564			SC.util.tryNavigateToElementUsingCommand(elementToNavigateTo, eventArgs.targetPreviousOrNext, eventArgs.hasShift);
565		});
566
567		SC.event.addGlobalHandler(SC.event.PreRender, function () {
568			var resetInactivityProc = function () {
569				window._lastNotifyActivityTime = new Date().getTime();
570
571				if (SC.context.isUserAuthenticated && SC.context.loginAfterInactivityMilliseconds != 0) {
572					if (window._loginAfterInactivityTimer)
573						window.clearTimeout(window._loginAfterInactivityTimer);
574
575					window._loginAfterInactivityTimer = window.setTimeout(function () { SC.util.sendToLogin(SC.types.LoginReason.IdleTooLong, true); }, Math.min(SC.context.loginAfterInactivityMilliseconds, 2147483647)); //interval stored as 32-bit signed int
576				}
577			};
578
579			SC.context.prehandleServiceFailureProc = function (error) {
580				if (error.statusCode != 403)
581					return false;
582
583				SC.util.sendToLogin(SC.types.LoginReason.PermissionsInsufficient, true);
584			}
585
586			SC.context.unhandledServiceFailureProc = function (error) {
587				SC.dialog.showModalErrorBox(error.detail || error.message);
588			}
589
590			resetInactivityProc();
591
592			SC.ui.initializeWindowActivityTracking(function () {
593				if (new Date().getTime() - window._lastNotifyActivityTime > SC.context.notifyActivityFrequencyMilliseconds) {
594					resetInactivityProc();
595					SC.service.NotifyActivity();
596				}
597			});
598
599			var parameterlessUrl = SC.util.getParameterlessUrl(window.location.href);
600			var createNavigationLinkFunc = function (_) {
601				return $div({ _commandName: 'Navigate', _commandArgument: _.href, _selected: _.href == parameterlessUrl }, [
602					$img({ src: _.imageUrl }),
603					$span(_.text),
604				]);
605			};
606
607			SC.ui.setContents($('.HeaderPanel'), [
608				$a({ href: SC.context.guestPageUrl, className: 'LogoIconLink' }),
609				$a({ _commandName: 'ToggleMenu', className: 'ShowMenuButton' }, ''),
610				$h1({ className: 'LogoPanel' }),
611				$div({ className: 'CommandPanel' }),
612			]);
613
614			SC.command.queryAndAddCommandButtons($('.HeaderPanel .CommandPanel'), 'ToolsPanel');
615			SC.command.updateCommandButtonsState($('.HeaderPanel .CommandPanel'));
616
617			var queryNavigationLinksEventArgs = SC.event.dispatchGlobalEvent(SC.event.QueryNavigationLinks, { navigationLinks: [] })
618
619			SC.ui.setContents($('.NavigationPanel'), [
620				queryNavigationLinksEventArgs.navigationLinks.map(createNavigationLinkFunc),
621				$div({ className: 'FlexSpacer' }),
622				$div({ className: 'TrayPanelContainer' }, [
623					$div({ className: 'TrayIconPanel' }),
624					$div({ className: 'UserMenuButton', _commandName: 'User' },
625						$span(SC.context.userDisplayName == null ? '' : SC.context.userDisplayName.toUpperCase()[0]),
626						$span(SC.context.userDisplayName)
627					),
628				]),
629			]);
630
631			SC.command.queryAndAddCommandButtons($('.NavigationPanel .TrayIconPanel'), 'TrayIconPanel', null, { descriptionRenderStyle: SC.command.DescriptionRenderStyle.Tooltip });
632			SC.command.updateCommandButtonsState($('.NavigationPanel .TrayIconPanel'));
633
634			var setSelectedFunc = function () {
635				$$('.NavigationPanel > div')
636					.filter(function (_) { return !SC.util.isNullOrEmpty(_._commandArgument); })
637					.forEach(function (_) { SC.ui.setSelected(_, window.location.href.startsWith(_._commandArgument)); });
638			};
639
640			SC.event.addHandler(window, 'hashchange', setSelectedFunc);
641
642			setSelectedFunc();
643
644			SC.livedata.startLoop();
645		});
646
647		var isTouchEnabled = (typeof document.documentElement.ontouchstart !== 'undefined');
648		SC.css.ensureClass(document.documentElement, 'TouchEnabled', isTouchEnabled);
649		SC.css.ensureClass(document.documentElement, 'TouchDisabled', !isTouchEnabled);
650		SC.css.ensureClass(document.documentElement, 'UserAuthenticated', SC.context.isUserAuthenticated);
651		SC.css.ensureClass(document.documentElement, 'NativeClient', SC.util.isCapable(SC.util.Caps.NativeClient));
652		SC.css.ensureClass(document.documentElement, 'HasMasterPanel', $('.MasterPanel'));
653		SC.css.ensureClass(document.documentElement, 'LogoImageVisible', SC.util.getBooleanResource('LogoPanel.ImageVisible'));
654		SC.css.ensureClass(document.documentElement, 'LogoIconVisible', SC.util.getBooleanResource('LogoPanel.IconVisible'));
655		SC.css.ensureClass(document.documentElement, 'LogoHeadingVisible', SC.util.getBooleanResource('LogoPanel.HeadingVisible'));
656		SC.css.ensureClass(document.documentElement, 'AnimationReduced', SC.util.getBooleanResource('Page.AnimationReduced'));
657		SC.css.ensureClass(document.documentElement, SC.context.pageType, true);
658
659		SC.extension.initializeExtensions();
660		SC.event.dispatchGlobalEvent(SC.event.PreRender);
661		SC.util.recordLifeCycleEvent(SC.event.PreRender);
662		SC.ui.setVisible(document.body, true);
663		SC.event.dispatchGlobalEvent(SC.event.PostRender);
664		SC.util.recordLifeCycleEvent(SC.event.PostRender);
665
666		$$('*[tabIndex]').forEach(function (_) {
667			SC.event.addHandler(_, 'mousedown', function () {
668				SC.ui.setHiddenFocusAndClearOthers(_);
669			});
670		});
671
672		if (SC.context.focusedControlID)
673			$(SC.context.focusedControlID).focus();
674		else if (document.activeElement == document.body) {
675			$('.NavigationPanel').focus();
676			SC.ui.setHiddenFocusAndClearOthers($('.NavigationPanel'));
677		}
678
679	</script>
679
680</body>
681</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.