PageSourceSearch

https://puaha.wgtn.ac.nz/signin

html wgtn.ac.nz collected 2026-09-24 08:27:36 UTC 63,031 bytes, 1,351 lines download raw bytes

1
2
3
4<!DOCTYPE html>
5<html lang="en-US" data-lang="en-US" crm-lang="en-US" dir="ltr" crm-lcid="1033"
6	same-site-mode="None">
7<head>
8		
9		<meta charset="utf-8" /><meta name="viewport" content="width=device-width,&#32;initial-scale=1.0" /><meta http-equiv="X-UA-Compatible" content="IE=edge" />
10		
10<script type="text/javascript" >
11				
12        </script>
12
13	<title>
14	
15		Home
16		 | Pūaha | Victoria University of Wellington
17</title>
18		
19		<meta name="description" content="Use the Pūaha web portal to manage your student admin, access useful tools, and find support services. View your key dates, timetables, and grades." />
20		
21		
21<script src="/_portal/7b138792-1090-45b6-9241-8f8d96d8c372/Resources/ResourceManager?lang=en-US"></script>
21
22	
23	
23<script type="text/javascript">
24        // Refresh all powerBI Iframes on Login in one Iframe
25        window.addEventListener('message', function (event) {
26            if (event && event.data && event.data == 'refreshPowerBI') {
27                $("iframe.powerbi").each(function () {
28                    this.src = this.src;
29                });
30            }
31        });
32
33        // Fix for incorrect viewport width setting in IE 10 on Windows Phone 8.
34        if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
35            var msViewportStyle = document.createElement("style");
36            msViewportStyle.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}"));
37            document.getElementsByTagName("head")[0].appendChild(msViewportStyle);
38        }
39    </script>
39
40		
41	
42		
43		<link href="/bootstrap.min.css?1670435630000" rel="stylesheet" />
44
45		<link href="https://content.powerapps.com/resource/powerappsportal/dist/font-awesome.bundle-3d8a58a48f.css" onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;link&#32;=&#32;document.createElement(&#39;link&#39;);&#32;link.crossOrigin&#32;=&#32;target.crossOrigin;&#32;link.href&#32;=&#32;&#39;/dist/font-awesome.bundle-3d8a58a48f.css&#39;;&#32;link.rel&#32;=&#32;&#39;stylesheet&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,link);" rel="stylesheet" />
46
47				<link href="https://content.powerapps.com/resource/powerappsportal/dist/preform.bundle-b72a6ea21d.css" onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;link&#32;=&#32;document.createElement(&#39;link&#39;);&#32;link.crossOrigin&#32;=&#32;target.crossOrigin;&#32;link.href&#32;=&#32;&#39;/dist/preform.bundle-b72a6ea21d.css&#39;;&#32;link.rel&#32;=&#32;&#39;stylesheet&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,link);" rel="stylesheet" />
48
49
50		
51		<link href="https://content.powerapps.com/resource/powerappsportal/dist/privatemode.bundle-049b12b66e.css" onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;link&#32;=&#32;document.createElement(&#39;link&#39;);&#32;link.crossOrigin&#32;=&#32;target.crossOrigin;&#32;link.href&#32;=&#32;&#39;/dist/privatemode.bundle-049b12b66e.css&#39;;&#32;link.rel&#32;=&#32;&#39;stylesheet&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,link);" rel="stylesheet" />
52
53
54		
55			
56
57
58		
59	
60		<link rel="stylesheet" href="/Areas/Account/css/account.css">
61	
62
63		<link href="/select2.min.css?1697085317000" rel="stylesheet" />
64<link href="/intlTelInput.min.css?1670435636000" rel="stylesheet" />
65<link href="/tui-time-picker.css?1670435639000" rel="stylesheet" />
66<link href="/tui-date-picker.css?1670435637000" rel="stylesheet" />
67<link href="/calendarDefault.css?1670435640000" rel="stylesheet" />
68<link href="/tui-calendar.css?1670435633000" rel="stylesheet" />
69<link href="/theme.css?1782163753000" rel="stylesheet" />
70
71		
72		
72<script>
vendor: 327 bytes, lines 72-76
72(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
73new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
74j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
75'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
76})(window,document,'script','dataLayer','
76GTM-KFJR8JS
vendor: 3 bytes, line 76
76');
76</script>
76
77<!-- End Google Tag Manager -->
78		
79		
80		
81	
82		
83		<link href="https://content.powerapps.com/resource/powerappsportal/dist/pwa-style.bundle-55718a4c0d.css" onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;link&#32;=&#32;document.createElement(&#39;link&#39;);&#32;link.crossOrigin&#32;=&#32;target.crossOrigin;&#32;link.href&#32;=&#32;&#39;/dist/pwa-style.bundle-55718a4c0d.css&#39;;&#32;link.rel&#32;=&#32;&#39;stylesheet&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,link);" rel="stylesheet" />
84
85		</head>
86<body data-sitemap-state="/"
87	data-dateformat="dd/MM/yyyy"
88	data-timeformat="HH:mm"
89	data-datetimeformat="ddd dd/MM/yyyy HH:mm"
90	data-app-path="/"
91	data-ckeditor-basepath="/js/BaseHtmlContentDesigner/Libs/msdyncrm_/libs/ckeditor/"
92	data-case-deflection-url="/_services/search/7b138792-1090-45b6-9241-8f8d96d8c372">
93
94
95	
96		<link href="https://content.powerapps.com/resource/powerappsportal/dist/pcf-style.bundle-373a0f4982.css" onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;link&#32;=&#32;document.createElement(&#39;link&#39;);&#32;link.crossOrigin&#32;=&#32;target.crossOrigin;&#32;link.href&#32;=&#32;&#39;/dist/pcf-style.bundle-373a0f4982.css&#39;;&#32;link.rel&#32;=&#32;&#39;stylesheet&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,link);" rel="stylesheet" />
97
98			
99	
100		
101
102	<div id="offlineNotificationBar" class="displayNone">
103		<img alt="web" id="web" onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;img&#32;=&#32;document.createElement(&#39;img&#39;);&#32;img.src&#32;=&#32;&#39;/css/images/web.png&#39;;&#32;img.alt&#32;=&#32;&#39;web&#39;;&#32;img.id&#32;=&#32;&#39;web&#39;&#32;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,img);&#32;target.remove();" src="https://content.powerapps.com/resource/powerappsportal/img/web.png" />
104		<div id="message">You&#8217;re offline. This is a read only version of the page.</div>
105		<div id="close" onclick="this.parentElement.style.display='none';"><img alt="close" onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;img&#32;=&#32;document.createElement(&#39;img&#39;);&#32;img.src&#32;=&#32;&#39;/css/images/close.png&#39;;&#32;img.alt&#32;=&#32;&#39;close&#39;;&#32;img.id&#32;=&#32;&#39;&#39;&#32;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,img);&#32;target.remove();" src="https://content.powerapps.com/resource/powerappsportal/img/close.png" /></div>
106	</div>
107
108	
109
110	
110<script type="text/javascript">
111        window.DisableCkEditor = window.DisableCkEditor || {};
112		
113		DisableCkEditor.Value = 'False';
114    </script>
114
115
116	
116<script type="text/javascript">
117        var enableOmniChannelWidgetWithSiteCopilot = 'False';
118        if (enableOmniChannelWidgetWithSiteCopilot === "True" || enableOmniChannelWidgetWithSiteCopilot === "true") {
119            const authUrl = window.location.origin + "/_services/auth/portalusertoken";
120            const fetchWithRetries = async (url, options, retries) => {
121                try {
122                    const authResponse = await fetch(url, options);
123                    const token = await authResponse.text();
124                    sessionStorage['c2Token'] = token;
125                } catch (err) {
126                    if (retries === 1) throw err;
127                    return await fetchWithRetries(url, options, retries - 1);
128                }
129            };
130            fetchWithRetries(authUrl, { method: "POST" }, 4);
131
132            // Enable/disable Omnichannel session refresh on auth state change
133            // When enabled, closeChat() is called when user logs in/out to start a fresh session
134            var enableOmniChannelSessionRefreshSetting = 'True';
135            window.enableOmniChannelSessionRefresh = enableOmniChannelSessionRefreshSetting === 'True' || enableOmniChannelSessionRefreshSetting === 'true';
136        }
137    </script>
137
138
139	
139<script type="text/javascript">
140		var isPvaBotAuthenticated = sessionStorage['isPvaBotAuthenticated'];
141		var isPortalUserLoggedIn = 'False';
142
143        if ((isPvaBotAuthenticated != null || isPvaBotAuthenticated != undefined) && isPvaBotAuthenticated != isPortalUserLoggedIn) {
144			sessionStorage['triggerPvaBotSignOut'] = true;
145			sessionStorage.removeItem('c2Token');
146            sessionStorage.removeItem('directLinetoken');
147            sessionStorage.removeItem('conversation_Id');
148
149			sessionStorage.removeItem('bot_c2Token');
150			sessionStorage.removeItem('botdirectLinetoken');
151            sessionStorage.removeItem('botconversation_Id');
152		}
153		sessionStorage['isPvaBotAuthenticated'] = isPortalUserLoggedIn;
154    </script>
154
155
156	
156<script type="text/javascript">
157		window["CSPSettings"] = window["CSPSettings"] || {};
158		window["CSPSettings"].nonce = '';
159        window["FabricConfig"] = window["FabricConfig"] || {};
160        window["FabricConfig"].mergeStyles = window["FabricConfig"].mergeStyles || {};
161		window["FabricConfig"].mergeStyles.cspSettings = window["CSPSettings"];
162        window["Microsoft"] = window["Microsoft"] || {};
163		window["Microsoft"].Dynamic365 = {
164			Portal: {
165				
166				User: {
167					userName: '',
168					firstName: '',
169					lastName: '',
170					email: '',
171					contactId: '',
172					userRoles: [],
173				},
174				
175				type: 'CustomerPortal',
176				id: '8a407384-abc4-491b-bdb2-d283857d5272', 
177				geo: 'OCE', 
178				tenant: 'cfe63e23-6951-427e-8683-bb84dcf1d20c', 
179				correlationId: '6ee49722-ae51-4bf3-82a3-573bb038b4a1',
180                orgEnvironmentId: 'fd88ed68-9847-4d7d-8349-026f2a3a4855',
181                orgId: '4721e59b-edd6-40ac-b7b5-7d67f7fe0e52',
182                portalProductionOrTrialType: 'Production',
183                isTelemetryEnabled: 'True',
184                InstrumentationSettings: {
185                    instrumentationKey: '197418c5cb8c4426b201f9db2e87b914-87887378-2790-49b0-9295-51f43b6204b1-7172',
186                    collectorEndpoint: 'https://us-mobile.events.data.microsoft.com/OneCollector/1.0/'
187                },
188                timerProfileForBatching: 'NEAR_REAL_TIME',
189                activeLanguages: ["en-US"],
190                isClientApiEnabled: 'True',
191                isSpaSite: 'False'
192            }
193        };
194
195		window["Microsoft"].PowerPages = window["Microsoft"].PowerPages || {};
196		window["Microsoft"].PowerPages.onPagesClientApiReady = (callback) => {
197			return new Promise((resolve, reject) => {
198				let isComplete = false;
199				let timeoutId;
200				const timeoutInterval = 10000;
201		
202				function handleReady() {
203					if (!isComplete && window.$pages) {
204						isComplete = true;
205						clearTimeout(timeoutId);
206						try {
207							if (typeof callback === "function") {
208								callback(window.$pages);
209							}
210						} catch (e) {
211							console.error("onPagesClientApiReady callback error:", e);
212						}
213						resolve(window.$pages); // should we reject if callback throws an error
214					}
215				}
216		
217				if (window.$pages) {
218					handleReady();
219					return;
220				}
221		
222				function sdkListener() {
223					handleReady();
224					window.removeEventListener('pagesSDKInitialized', sdkListener);
225				}
226		
227				window.addEventListener('pagesSDKInitialized', sdkListener);
228		
229				timeoutId = setTimeout(() => {
230					if (!isComplete) {
231						window.removeEventListener('pagesSDKInitialized', sdkListener);
232						if (window.$pages) {
233							handleReady();
234						} else {
235							isComplete = true;
236							reject(new Error('window.$pages not available.'));
237						}
238					}
239				}, timeoutInterval);
240			});
241		};
242
243		// Deprecated alias: Microsoft.Dynamic365.Portal.onPagesClientApiReady.
244		// Remove once telemetry shows no callers remain.
245		(function () {
246			var _impl = window["Microsoft"].PowerPages.onPagesClientApiReady;
247			var _logged = false;
248
249			window["Microsoft"].Dynamic365.Portal.onPagesClientApiReady = function (callback) {
250				if (!_logged) {
251					_logged = true;
252					try {
253						if (window.clientLogWrapper && typeof window.clientLogWrapper.traceWarning === "function") {
254							window.clientLogWrapper.traceWarning(
255								"Microsoft.Dynamic365.Portal.onPagesClientApiReady invoked (deprecated)",
256								"DeprecatedApi",
257								"ClientApiReady",
258								"Invoke",
259								"DeprecationTracker"
260							);
261						}
262						if (typeof console !== "undefined" && console.warn) {
263							console.warn(
264								"[DEPRECATED] Microsoft.Dynamic365.Portal.onPagesClientApiReady is deprecated " +
265								"and will be removed in a future release. Use Microsoft.PowerPages.onPagesClientApiReady instead."
266							);
267						}
268					} catch (_) { /* never break the caller */ }
269				}
270
271				return _impl(callback);
272			};
273		})();
274
275        // Mark request not cacheable if Dynamics365PortalAnalytics cookie is being refreshed by the server or if the cookie in request header is invali
275d
276		
277
278        // For client side telemetry intializing Dynamics365PortalAnalytics cookie object
279		
280        window["Microsoft"].Dynamic365.Portal.dynamics365PortalAnalytics = 'cn5IzTvuE9W2K39vidf7p7rU7jK3BocF0kvv20PQMBuorraz8FvFvemL1qj0WnfSlxP-aFR2u7s_VjxT28Z_wgLgQsP2DEopLzhNGeXP2mt68sblb64ybg5Qwubk1Ln0J48FnD6Tgxv944K9EJuq0A2'; // CodeQL [SM00430] False Positive: only alphanumeric chars allowed, for non-alphanumeric char it will return INVALID_CHARACTERS_IN_COOKIE 
281		
282
283	</script>
283
284	
285	
285<script type="text/javascript">
286
287		
288    </script>
288
289
290	
291		
292
293<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/cookieconsent@3/build/cookieconsent.min.css" />
294<link rel="stylesheet" type="text/css" href="/Fusion5-toggle.css" />
295<script src="https://cdn.jsdelivr.net/npm/cookieconsent@3/build/cookieconsent.min.js" data-cfasync="false"></script>
295
296<!-- Google Tag Manager (noscript) -->
vendor: 69 bytes, lines 296-297
296
297<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
297GTM-KFJR8JS
vendor: 85 bytes, lines 297-298
297"
298height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
299<!-- End Google Tag Manager (noscript) -->
300
301<!-- MS Clarity-->
302
303<script type="text/javascript">
304
305var clarityTrackingId = "ttev0na3tx";
306
307(function (c, l, a, r, i, t, y) {
308  c[a] = c[a] || function () {
309    (c[a].q = c[a].q || []).push(arguments);
310  };
311  t = l.createElement(r);
312  t.async = true;
313  t.src = `https://www.clarity.ms/tag/${i}`;
314  y = l.getElementsByTagName(r)[0];
315  y.parentNode?.insertBefore(t, y);
316})(window, document, "clarity", "script", clarityTrackingId);
317
318</script>
318
319
320<!-- End MS Clarity-->
321
322<!--<h1 style="visibility: hidden;height: 0px;">Vuw Portal</h1>-->
323<div  role="navigation" >
324<div class="navbar navbar-inverse navbar-static-top">
325    <div class="container">
326        <div class="row">
327            <div class="logo col" style="">
328                <a href="/" title="Victoria University of Wellington" target="_self" style="padding: 0px!important;">
329                    <picture>
330                        <source media="(min-width: 768px)" srcset="/logo-green-full.svg">
331                        <source media="(max-width: 767px)" srcset="/logo-green-full.svg">
332                        <img alt="Te Herenga Waka – Wellington University logo">
333                    </picture>
334                </a>
335            </div>
336           <div class="headerTitleContainer" >
337                <span class="menuContainerMaoriTitle headerTitleMaoriText" style="color: #0D4C38;font-weight: 1000;font-size:30px; ">Pūaha</span><br><span class="menuContainerEnglishTitle headerTitleText" style="color: #0D4C38;margin: 0px;padding: 0px;float: left;font-size: 1.2em;font-weight: 900;position: relative;top: -5px;">My portal</span>
338            </div>
339<!--                 <picture style="padding-left: 22px;">
340                        <source media="(min-width: 768px)" srcset="/Puahatransparentcropped.png">
341                        <source media="(max-width: 767px)" srcset="/Puahatransparentcropped.png">
342                        <img alt="Puaha" class="portaltitleimg">
343                    </picture>-->
344            <a id="signin" aria-label="Log In" href="/SignIn?returnUrl=%2Fsignin" title="Log In">
345                <img src="/icons/source_icons_user-square-alt.svg" alt="">Log In
346            </a>
347        </div>
348    </div>
349</div>
350</div>
351
352<div class="modal fade" id="toolsModal" tabindex="-1" aria-modal="true" role="dialog" aria-labelledby="toolsModalLabel" aria-hidden="true">
353  <div class="modal-dialog modal-lg" role="document">
354    <div class="modal-content">
355      <div class="modal-header">
356        
357        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
358          <span aria-hidden="true">&times;</span>
359        </button>
360        <span class="pageMaoriTitle2">Aku rauemi</span><br><span class="pageTitleEnglish2">My tools</span>
361      </div>
362      <div class="modal-body toolFlex-Container" id="modalbody">
363      </div>
364    </div>
365  </div>
366</div>
367<section id="formModalDialog" aria-hidden="true"  aria-modal="true" aria-labelledby="formModalDialog"  aria-label="<span class='fa fa-info-circle' aria-hidden='true'></span> Modal Form" class="modal fade modal-form modal-form-details" data-backdrop="static" role="dialog" tabindex="-1" style="display: none;">
368    <div class="modal-lg modal-dialog">
369        <div class="modal-content">
370            <div class="modal-header">
371                <button id="formModalDialogClose" aria-label="Close" class="close" data-dismiss="modal" tabindex="0" title="Close" type="button">
372                    <span aria-hidden="true">×</span><span class="sr-only">Close</span>
373                </button>
374                <h1 id="formModalTitle" class="modal-title h4" title="Modal Title">My Modal Title</h1>
375            </div>
376            <div class="modal-body">
377                <div class="form-loading" style="display: none;">
378                    <span class="fa fa-spinner fa-spin fa-4x" aria-hidden="true"></span>
379                </div>
380 
381                <iframe  src=""></iframe>
382            </div>
383        </div>
384    </div>
385</section>
386
387
388<script>
389var toolsObjects = [
390        {
391            id: "193a4246-5459-ed11-9562-00224818acaf",
392            name: "Nuku",
393            url: "https://nuku.wgtn.ac.nz/",
394            isnewwindow:  true ,
395            decription: "",
396            tooltip: "Nuku",
397            imageurl: "/icons/nuku.svg",
398            imagewidth:  "40",
399            imageheight: "40",
400            imagealtertext: "Nuku"
401        },
402        {
403            id: "89daf83d-bdf8-eb11-94ef-00224818171e",
404            name: "Student Records",
405            url: "https://www.wgtn.ac.nz/student-records",
406            isnewwindow:  true ,
407            decription: "",
408            tooltip: "Student Records",
409            imageurl: "/icons/source_icons_archive.svg",
410            imagewidth:  "40",
411            imageheight: "40",
412            imagealtertext: "Student Records"
413        },
414        {
415            id: "d362ff6e-bdf8-eb11-94ef-00224818171e",
416            name: "MyDegree",
417            url: "https://mydegree.wgtn.ac.nz/",
418            isnewwindow:  true ,
419            decription: "",
420            tooltip: "MyDegree",
421            imageurl: "/icons/source_icons_journal-page.svg",
422            imagewidth:  "40",
423            imageheight: "40",
424            imagealtertext: "MyDegree"
425        },
426        {
427            id: "b78db789-bdf8-eb11-94ef-00224818171e",
428            name: "MyAllocator",
429            url: "https://www.wgtn.ac.nz/students/tools#myAllocator",
430            isnewwindow:  true ,
431            decription: "",
432            tooltip: "MyAllocator",
433            imageurl: "/icons/source_icons_clock-outline.svg",
434            imagewidth:  "40",
435            imageheight: "40",
436            imagealtertext: "MyAllocator"
437        },
438        {
439            id: "dbc6d814-bef8-eb11-94ef-00224818171e",
440            name: "Student email",
441            url: "https://outlook.com/myvuw.ac.nz",
442            isnewwindow:  true ,
443            decription: "",
444            tooltip: "Student email",
445            imageurl: "/icons/source_icons_mail-opened.svg",
446            imagewidth:  "40",
447            imageheight: "40",
448            imagealtertext: "Student email"
449        },
450        {
451            id: "7937ea7b-bdf8-eb11-94ef-00224818171e",
452            name: "Office365",
453            url: "https://m365.cloud.microsoft/apps/",
454            isnewwindow:  true ,
455            decription: "",
456            tooltip: "Office365",
457            imageurl: "/icons/source_icons_multiple-pages.svg",
458            imagewidth:  "40",
459            imageheight: "40",
460            imagealtertext: "Office365"
461        },
462        {
463            id: "39fba5aa-bdf8-eb11-94ef-00224818171e",
464            name: "Pay fees",
465            url: "https://www.wgtn.ac.nz/students/money/payments",
466            isnewwindow:  true ,
467            decription: "",
468            tooltip: "Pay fees",
469            imageurl: "/icons/source_icons_send-dollars.svg",
470            imagewidth:  "40",
471            imageheight: "40",
472            imagealtertext: "Pay fees"
473        },
474        {
475            id: "dd8393bc-bdf8-eb11-94ef-00224818171e",
476            name: "Other payments",
477            url: "https://pay.wgtn.ac.nz/home/menu",
478            isnewwindow:  true ,
479            decription: "",
480            tooltip: "Other payments",
481            imageurl: "/icons/source_icons_credit-card-2.svg",
482            imagewidth:  "40",
483            imageheight: "40",
484            imagealtertext: "Other payments"
485        },
486        {
487            id: "c47ab8e8-bdf8-eb11-94ef-00224818171e",
488            name: "Library",
489            url: "https://www.wgtn.ac.nz/library/",
490            isnewwindow:  true ,
491            decription: "",
492            tooltip: "Library",
493            imageurl: "/icons/source_icons_building.svg",
494            imagewidth:  "40",
495            imageheight: "40",
496            imagealtertext: "Library"
497        },
498        {
499            id: "ac03a09e-bdf8-eb11-94ef-00224818171e",
500            name: "Printing",
501            url: "https://wgtn.ac.nz/print",
502            isnewwindow:  true ,
503            decription: "",
504            tooltip: "Printing",
505            imageurl: "/icons/source_icons_printer.svg",
506            imagewidth:  "40",
507            imageheight: "40",
508            imagealtertext: "Printing"
509        },
510        {
511            id: "f72f12e2-bdf8-eb11-94ef-00224818171e",
512            name: "Inclusive Learning Software",
513            url: "https://www.wgtn.ac.nz/disability/for-students/key-services/inclusive-learning-software",
514            isnewwindow:  true ,
515            decription: "",
516            tooltip: "Inclusive Learning Software",
517            imageurl: "/icons/source_icons_group.svg",
518            imagewidth:  "40",
519            imageheight: "40",
520            imagealtertext: "Inclusive Learning Software"
521        },
522        {
523            id: "98e5b4d4-bdf8-eb11-94ef-00224818171e",
524            name: "CareerHub",
525            url: "https://careerhub.vuw.ac.nz/students/login",
526            isnewwindow:  true ,
527            decription: "",
528            tooltip: "CareerHub",
529            imageurl: "/icons/source_icons_city.svg",
530            imagewidth:  "40",
531            imageheight: "40",
532            imagealtertext: "CareerHub"
533        },
534        {
535            id: "90ea5492-bdf8-eb11-94ef-00224818171e",
536            name: "Workspace",
537            url: "https://www.wgtn.ac.nz/myworkspace/student/",
538            isnewwindow:  true ,
539            decription: "",
540            tooltip: "Workspace",
541            imageurl: "/icons/source_icons_planet.svg",
542            imagewidth:  "40",
543            imageheight: "40",
544            imagealtertext: "Workspace"
545        },
546        {
547            id: "7e115208-bef8-eb11-94ef-00224818171e",
548            name: "Software download",
549            url: "https://myvuwac.sharepoint.com/sites/downloads",
550            isnewwindow:  true ,
551            decription: "",
552            tooltip: "Software download",
553            imageurl: "/icons/source_icons_import.svg",
554            imagewidth:  "40",
555            imageheight: "40",
556            imagealtertext: "Software download"
557        },
558        {
559            id: "2ef1eaf5-bdf8-eb11-94ef-00224818171e",
560            name: "Password",
561            url: "https://password.student.vuw.ac.nz/default.aspx",
562            isnewwindow:  true ,
563            decription: "",
564            tooltip: "Password",
565            imageurl: "/icons/source_icons_lock.svg",
566            imagewidth:  "40",
567            imageheight: "40",
568            imagealtertext: "Password"
569        },
570        {
571            id: "2776ee51-de18-f111-8341-7ced8db1a5f6",
572            name: "NZSM bookings",
573            url: "https://vuwnzsm.skedda.com/",
574            isnewwindow:  true ,
575            decription: "",
576            tooltip: "NZSM bookings",
577            imageurl: "/icons/nzsm.svg",
578            imagewidth:  "",
579            imageheight: "40",
580            imagealtertext: "NZSM bookings"
581        }
582    ];
583</script>
583
584<script>
585var formid ="";
586var allowProfileEdit = false;
587
588    window.closeTaskModal = function(){
589        $('#formModalDialog').modal('hide');
590    };
591
592    const appealViewForm = "29311414-d747-ec11-8c62-002248159d4b";
593    const geViewForm = "3b397b9a-7f46-ec11-8c62-002248159ea1";
594    const taskForm = "f99b69b6-789e-ec11-b400-002248155c27";
595    var refreshTasks = false;
596
597    function showPersonProfleForm(){
598        var portalId = "00000000-0000-0000-0000-000000000000";
599        
600        var url = "/_portal/modal-form-template-path/" + portalId + "?entityformid=" + formid;
601        console.log(url);
602        var $modal = $("#formModalDialog");
603        $("#formModalDialog #formModalTitle").text("Edit Contact");
604
605        //Retrieve the iframe of the modal and set it load the service
606        var $iFrame = $modal.find("iframe");
607
608        $iFrame.attr("src", url);
609
610        //Hook in handler to hide loader image when done loading
611        $iFrame.on("load", function () {
612            $modal.find(".form-loading").hide();
613            $modal.find("iframe").contents().find("#EntityFormControl").show();
614        });
615
616        //Show the loader image at start
617        $modal.find(".form-loading").show();
618        $modal.find("iframe").contents().find("#EntityFormControl").hide();
619
620        $modal.on('show.bs.modal', function () {
621            $modal.attr("aria-hidden", "false");
622        });
623
624        $modal.off("hidden.bs.modal.entitygrid").on("hidden.bs.modal.entitygrid", function () {
625            if(formid === taskForm &&$("#formModalDialog iframe").contents().find(".alert-success").length > 0)
626            {
627                let t = {
628                    activityid: optionalParams.replace("&pid=",""),
629                    iscase:false
630                };
631
632                markNotificationRead(t);
633
634                if (typeof getNotificationData == 'function') {
635                    getNotificationData();
636                }
637            }
638            $modal.attr("aria-hidden", "true");
639            $("#formModalDialogClose").show();
640        });
641
642        $modal.modal();
643    }
644
645    function showContactForm(){
646        var portalId = "00000000-0000-0000-0000-000000000000";
647        var formid ="746ad67e-01d7-ec11-a7b6-002248186e31";
648        var url = "/_portal/modal-form-template-path/" + portalId + "?entityformid=" + formid;
649       
650        var $modal = $("#formModalDialog");
651        $("#formModalDialog #formModalTitle").text("Edit Contact");
652
653        //Retrieve the iframe of the modal and set it load the service
654        var $iFrame = $modal.find("iframe");
655
656        $iFrame.attr("src", url);
657
658        //Hook in handler to hide loader image when done loading
659        $iFrame.on("load", function () {
660            $modal.find(".form-loading").hide();
661            $modal.find("iframe").contents().find("#EntityFormControl").show();
662        });
663
664        //Show the loader image at start
665        $modal.find(".form-loading").show();
666        $modal.find("iframe").contents().find("#EntityFormControl").hide();
667
668        $modal.on('show.bs.modal', function () {
669            $modal.attr("aria-hidden", "false");
670        });
671
672        $modal.off("hidden.bs.modal.entitygrid").on("hidden.bs.modal.entitygrid", function () {
673            if(formid === taskForm &&$("#formModalDialog iframe").contents().find(".alert-success").length > 0)
674            {
675                let t = {
676                    activityid: optionalParams.replace("&pid=",""),
677                    iscase:false
678                };
679
680                markNotificationRead(t);
681
682                if (typeof getNotificationData == 'function') {
683                    getNotificationData();
684                }
685            }
686            $modal.attr("aria-hidden", "true");
687            $("#formModalDialogClose").show();
688        });
689
690        $modal.modal();
691    }
692
693    function showTaskForm(recordId, title, formid, optionalParams){
694        /*if(formid === taskForm){
695            $("#formModalDialogClose").hide();
696        }*/
697
698        var portalId = "00000000-0000-0000-0000-000000000000";
699        var url = "/_portal/modal-form-template-path/" + portalId + "?entityformid=" + formid + "&id=" + recordId ;
700        if(optionalParams !== undefined){
701            url += optionalParams;
702        }
703
704        var $modal = $("#formModalDialog");
705
706        $("#formModalDialog #formModalTitle").text(title);
707
708        //Retrieve the iframe of the modal and set it load the service
709        var $iFrame = $modal.find("iframe");
710
711        $iFrame.attr("src", url);
712
713        //Hook in handler to hide loader image when done loading
714        $iFrame.on("load", function () {
715            $modal.find(".form-loading").hide();
716            $modal.find("iframe").contents().find("#EntityFormControl").show();
717        });
718
719        //Show the loader image at start
720        $modal.find(".form-loading").show();
721        $modal.find("iframe").contents().find("#EntityFormControl").hide();
722
723        $modal.on('show.bs.modal', function () {
724            $modal.attr("aria-hidden", "false");
725        });
726
727        $modal.off("hidden.bs.modal.entitygrid").on("hidden.bs.modal.entitygrid", function () {
728            if(formid === taskForm &&$("#formModalDialog iframe").contents().find(".alert-success").length > 0)
729            {
730                let t = {
731                    activityid: optionalParams.replace("&pid=",""),
732                    iscase:false
733                };
734
735                markNotificationRead(t);
736
737                if (typeof getNotificationData == 'function') {
738                    getNotificationData();
739                }
740            }
741            $modal.attr("aria-hidden", "true");
742            $("#formModalDialogClose").show();
743        });
744
745        $modal.modal();
746    }   
747
748    function showNotificationsPopup(){
749        $('#signedInPopup').hide('slow');
750        var margin = ($('.navbar .container').outerWidth(true) - $('.navbar .container').outerWidth()) /2;
751        var padding = ($('.navbar .container').innerWidth() - $('.navbar .container').width()) /2;
752            
753        var newRight = (margin + padding +10 + 48 + 10) + "px";
754        if($(window).width() <= 400){
755            newRight = "48px";
756        }
757        $("#notificationsPopup").css("right", newRight );
758            window.setTimeout(function(){
759            $('#signedInPopup').hide('slow');
760        $("#notificationsPopup").show("slow").addClass("open");
761            },50);
762    }
763
764
765
766
767var myAccessTools = document.getElementById("accessTools");
768// Execute a function when the user releases a key on the keyboard
769if(myAccessTools != null){
770    myAccessTools.addEventListener("keyup", function(event) {
771      // Number 13 is the "Enter" key on the keyboard
772      if (event.keyCode === 13) {
773        // Trigger the button element with a click
774        myAccessTools.click();
775      }
776    });
777}
778
779var toolsBuilt = false;
780var decodeHTML = function (html) {
781    var txt = document.createElement('textarea');
782    txt.innerHTML = html;
783    return txt.value;
784};
785function showTools(){
786    if(!toolsBuilt){
787        buildToolsList();
788        toolsBuilt = true;
789    };
790    $("#toolsModal").modal();
791}
792
793function buildToolsList(){
794    var modalbody = document.getElementById("modalbody");
795
796    for (let i = 0; i < toolsObjects.length; i++) {
797      var iDiv = document.createElement('div');
798      iDiv.id = "pudiv"+toolsObjects[i]["name"].replace(/\s/g,'')
799      iDiv.title = toolsObjects[i]["name"];
800      iDiv.className="toolFlex-item";
801
802      var linkImageDiv = document.createElement('div');
803      linkImageDiv.className="toolFlex-innerItemBody";
804      var linkURLimage = document.createElement('a'); 
805
806      var linkImage = document.createElement('img');
807      linkImage.src = toolsObjects[i]["imageurl"];
808      linkImage.alt = toolsObjects[i]["imagealtertext"];
809
810      if(toolsObjects[i]["imagewidth"] != null){
811            linkImage.style.width = toolsObjects[i]["imagewidth"].toString() +"px";
812      }
813      if(toolsObjects[i]["imageheight"] != null){
814            linkImage.style.height = toolsObjects[i]["imageheight"].toString() +"px";
815      }
816      
817      linkURLimage.appendChild(linkImage); 
818      linkURLimage.href = toolsObjects[i]["url"]; 
819      linkURLimage.setAttribute("target", "_blank");
820      linkImageDiv.appendChild(linkURLimage)
821      
822      var linkButtonDiv = document.createElement('div');
823      linkButtonDiv.className="toolFlex-innerItemButton";
824      var linkURL = document.createElement('a'); 
825      linkURL.setAttribute("class","aVuwColor");
826      var linkText = document.createTextNode(toolsObjects[i]["imagealtertext"]);
827
828      linkURL.appendChild(linkText); 
829      linkURL.href = toolsObjects[i]["url"]; 
830      if(toolsObjects[i]["isnewwindow"]){
831            linkURL.setAttribute("target", "_blank");
832        }
833      linkButtonDiv.appendChild(linkURL);
834
835      iDiv.appendChild(linkImageDiv);
836      iDiv.appendChild(linkButtonDiv);
837      modalbody.appendChild(iDiv)
838    }
839};
840
841
842function fnBrowserDetect(){
843                 
844         let userAgent = navigator.userAgent;
845         let browserName;
846         
847         if(userAgent.match(/chrome|chromium|crios/i)){
848             browserName = "chrome";
849           }else if(userAgent.match(/firefox|fxios/i)){
850             browserName = "firefox";
851           }  else if(userAgent.match(/safari/i)){
852             browserName = "safari";
853           }else if(userAgent.match(/opr\//i)){
854             browserName = "opera";
855           } else if(userAgent.match(/edg/i)){
856             browserName = "edge";
857           }else{
858             browserName="No browser detection";
859           }
860         
861         return browserName;         
862  }
863
864
865</script>
865
866
867
868
869	
870
871	<!-- add anti-forgery token-->
872	<div id="antiforgerytoken" data-url="/_layout/tokenhtml"></div>
873
874	
875			<!-- Client Telemetry init if telemetry enabled-->
876			
876<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/client-telemetry.bundle-d490766e4f.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/client-telemetry.bundle-d490766e4f.js" type="text/javascript"></script>
876
877
878		
879	
880		<!-- Client Telemetry Wrapper init -->
881		
881<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/client-telemetry-wrapper.bundle-633e70f51b.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/client-telemetry-wrapper.bundle-633e70f51b.js" type="text/javascript"></script>
881
882
883		
883<script>
884			window.clientLogWrapper = new ClientLogWrapper();
885		</script>
885
886		
886<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/preform.moment_2_29_4.bundle-750b699ecd.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/preform.moment_2_29_4.bundle-750b699ecd.js" type="text/javascript"></script>
886
887
888		
889
890		
890<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/pcf-dependency.bundle-805a1661b7.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf-dependency.bundle-805a1661b7.js" type="text/javascript"></script>
890
891
892							   
892<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/pcf.bundle-60440c37cb.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf.bundle-60440c37cb.js" type="text/javascript"></script>
892
893
894							   
894<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/pcf-extended.bundle-b0e01b5622.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf-extended.bundle-b0e01b5622.js" type="text/javascript"></script>
894
895
896						
897		
898		<div id="content-container" class="container wrapper-body" role="main">
899			<div id="content">
900				
901	
902	
903	<ul class="nav nav-tabs nav-account" role="tablist" onkeydown="navigation(event)">
904		<li role="none" class="active"><a role="tab" aria-selected="True" href="javascript:void(0)" aria-label="Sign in" title="Sign in"><span class="fa fa-sign-in" aria-hidden="true"></span> Sign in</a></li>
905		
906			<li role="none" class="">
907				<a role="tab" aria-selected="False" href="/Account/Login/Register" aria-label="Register" title="Register">Register</a>
908			</li>
909		
910		<li role="none" class=""><a role="tab" aria-selected="False" href="/Register" aria-label="Redeem invitation" title="Redeem invitation">Redeem invitation</a></li>
911		
912	</ul> 
913
914<script type="text/javascript">
915
916	const keyCodes = {
917		END: 35,
918		HOME: 36,
919		LEFT: 37,
920		RIGHT: 39,
921		SPACE: 32
922	};
923
924	$(document).ready(function () {
925		//make the tabindex='0' for active tab and -1 for others
926		$(".nav.nav-tabs.nav-account > li > a").attr("tabindex", "-1");
927        $(".nav.nav-tabs.nav-account > li > a").attr("aria-selected", "false");
928		$(".nav.nav-tabs.nav-account > li.active > a").attr("tabindex", "0");
929		$(".nav.nav-tabs.nav-account > li.active > a").trigger("focus");
930        $(".nav.nav-tabs.nav-account > li.active > a").attr("aria-selected", "true");
931	});
932
933	function navigation(e)
934	{
935		//change tabindex dynamically for all the tabs on key press of left-right navigation keys or home/end keys
936		var tabs = $(".nav.nav-tabs.nav-account > li > a");
937		if (e.keyCode === keyCodes.END || e.keyCode === keyCodes.HOME || e.keyCode === keyCodes.LEFT || e.keyCode === keyCodes.RIGHT) {
938			var currentTab = $(document.activeElement);
939			for (index = 0; index < tabs.length; index++) {
940				if ($(tabs[index]).text() === currentTab.text()) {
941					e.keyCode === keyCodes.LEFT || e.keyCode === keyCodes.END ? (index == 0 || e.keyCode === keyCodes.END ? $(tabs[tabs.length - 1]).trigger("focus") :
942						$(tabs[index - 1]).trigger("focus")) : (index == (tabs.length - 1) || e.keyCode === keyCodes.HOME ? $(tabs[0]).focus() : $(tabs[index + 1]).trigger("focus"));
943				}
944			}
945		}
946		//open tab on click of SPACE key
947		if (e.keyCode == keyCodes.SPACE) {
948            e.preventDefault();
949			$(document.activeElement)[0].click();
950            tabs.attr("tabindex", "-1").attr("aria-selected", "false");
951        }
952	}
953</script>
953
954
955
956	<div class="page-content" id="mainContent">
957		
958	<div class="xrm-editable-html&#32;xrm-attribute&#32;page-copy" data-languageContext="English"><div class="xrm-attribute-value">
958<script>
959    $("body").hide();
960// see if we can auto trigger sign in button when going to this page.
961    $(document).ready(function() {
962        $("#external-login-heading").hide();
963        
964        //$("#content-container").removeClass("wrapper-body");
965        $("#content-container").addClass("externalSignInBackground");
966
967        $(".col-md-6").attr("class", "col-md-12");
968        $(".form-horizontal").attr("style","display: flex;flex-direction: column;align-items: center;flex-wrap: wrap;align-content: center;justify-content: center;");
969        var azureadbuttontext = "My University student account";
970        var azureb2cbuttontext = "Email or social account";
971
972        var azureadbutton = $('button[title="Sign in with your '+azureadbuttontext+' account."]');
973        var azureb2cbutton = $('button[title="Sign in with your '+azureb2cbuttontext+' account."]');
974        //var azureb2cbutton2 = $('button[title="Sign in with your '+azureb2cbuttontext+' account."]');
975        
976        azureadbutton.text("").append('<img class="signinbuttonimg" src="~/icons/source_verified-user.svg" /><span style="padding-left:10px;">'+azureadbuttontext+'</span>');
977        azureadbutton.attr('title', azureadbuttontext);
978        azureadbutton.addClass("aVuwColor signinbutton");
979        azureb2cbutton.text("").append('<img class="signinbuttonimg2" src="~/icons/source_icons_mail-opened.svg" /><img class="signinbuttonimg2" src="~/icons/icon_google.png" /><img class="signinbuttonimg2-withoutmargin" src="~/icons/icon_facebook.png" /><br/><span>'+azureb2cbuttontext+'</span>').button();
980        azureb2cbutton.attr('title', azureb2cbuttontext);
981        azureb2cbutton.addClass("aVuwColor signinbutton");
982        
983        $('<div id="titleheader" class="signintitle"/>').insertBefore(azureadbutton);
984        
985        $('<span class="pageMaoriTitle1">Whakaurua</span><br><span class="pageTitleEnglish1">Log in</span><br><br>').appendTo($('#titleheader'))
986
987        $('<div id="actionDiv" class="signinbody"/>').appendTo($(".form-horizontal"));
988
989        $('<span class="pageTitleEnglish2 signinsubtitle" id="signinsubtitle">Log in with</span>').appendTo("#actionDiv");
990        azureadbutton.appendTo("#actionDiv");
991        azureadbutton.attr("style","width:85%;");
992        azureb2cbutton.appendTo("#actionDiv");
993        azureb2cbutton.attr("style","width:85%;");
994        
995        $('<p class="pageTitleEnglish2 signinsubtitle" id="signinsubtitle2" style="text-align: center;padding-bottom: 0px;">New to the University? <br/><span style="font-size:1rem;">Register for an account using a method below:</span></p>').insertBefore(azureb2cbutton);
996        
997        
998
999        
1000
1001        $('<a class="linkButton aVuwColor redeembutton"  style="background-color: #CCDCD7;margin-top:25px;" href="/Register" target="_self">Received an invitation?   Redeem it now ></a>').insertAfter(azureb2cbutton);
1002        
1003        
1004        $('<a class="linkButton aVuwColor redeembutton"  style="background-color: #CCDCD7;margin-top:25px;" href="https://agent-partner.wgtn.ac.nz/" target="_self">Applying as an international agent or partner?</a>').insertAfter(azureb2cbutton);
1005        
1006
1007        var azureb2cbutton2 = azureb2cbutton.clone();
1008        azureb2cbutton2.insertBefore($("#signinsubtitle2"));
1009
1010        $(".nav").hide();
1011        $('button').show();
1012        $("body").show();
1013    });
1014</script>
1014
1015<style>
1016        body { 
1017            background-image: url("/icons/ExternalSignInBackground.jpg"); 
1018            background-size: cover;
1019            
1020            padding-bottom: 0px;
1021            
1022        }
1023
1024        footer{
1025            /*position: absolute!important;*/
1026            bottom: 0;
1027            width: 100%;
1028            }
1029        .footerContentPhoneNumb {
1030            width: 120px;
1031        }
1032        @media (min-width: 768px) {
1033            body{
1034               background-image: url("/icons/ExternalSignInBackground.jpg"); 
1035            }
1036            
1037            footer{
1038            /*position: absolute!important;*/
1039            bottom: 0;
1040            width: 100%;
1041            }
1042        }
1043        
1044        
1045
1046</style>
1047</div></div>
1048
1049		
1050	
1051	<div class="row">
1052		
1053			<div class="col-md-6">
1054				
1055
1056<form action="/Account/Login/ExternalLogin" method="post">
1057<input name="__RequestVerificationToken" type="hidden" value="vgeSGzrdQDH-Q6UjaCXJy60oYeFh5p1Cr7otKCkP0Va2naNiEZWHtUcraQMNNgF8cIv9yVSaTQKnEvxoRxnNPxdoFlS9taUFSOGZga--K-41" />
1058<div class="form-horizontal">
1059		  <!-- Check if external login is enabled -->
1060        <h2 class="login-heading-section" id="external-login-heading">
1061            <span class="xrm-editable-text&#32;xrm-attribute"><span class="xrm-attribute-value-encoded&#32;xrm-attribute-value">Sign in with an external account</span></span>
1062        </h2>
1063		<div aria-describedby="loginValidationSummary" aria-label="Sign&#32;in&#32;failed." class="validation-summary-valid&#32;listStyleTypeNone&#32;alert&#32;alert-block&#32;alert-danger" data-valmsg-summary="true" id="loginValidationSummary" tabindex="0"><ul><li style="display:none"></li>
1064</ul></div>
1065		<div id="4_ctl00_AzureADRebrandDisclaimer">
1066
1067</div>							
1068
1069
1070		
1071			<button
1072				name="provider" type="submit" class="btn btn-primary btn-line"
1073				id="https://login.wgtn.ac.nz/tfp/0bbbb963-9f90-4de8-b34f-34346004d86a/B2C_1A_VUW_S1_SIGNUP_SIGNIN_PORTAL/v2.0/"
1074				title="Sign in with your Email or social account account."
1075				value="https://login.wgtn.ac.nz/tfp/0bbbb963-9f90-4de8-b34f-34346004d86a/B2C_1A_VUW_S1_SIGNUP_SIGNIN_PORTAL/v2.0/">Email or social account
1076			</button>
1077		
1078			<button
1079				name="provider" type="submit" class="btn btn-primary btn-line"
1080				id="https://login.windows.net/cfe63e23-6951-427e-8683-bb84dcf1d20c/"
1081				title="Sign in with your My University student account account."
1082				value="https://login.windows.net/cfe63e23-6951-427e-8683-bb84dcf1d20c/">My University student account
1083			</button>
1084		
1085	
1086</div>
1087</form>
1088
1089			</div>
1090		
1091	</div>
1092	
1092<script type="text/javascript">
1093				$(document).ready(function () {
1094					document.querySelector('title').innerHTML = ($('.nav-tabs > li.active').text() + " | Pūaha | Victoria University of Wellington");
1095					shell.refreshToken();
1096				});
1097</script>
1097
1098
1099	</div>
1100
1101			</div>
1102		</div>
1103	
1104
1105	
1105<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/pcf-loader.bundle-f4a0e619b8.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/pcf-loader.bundle-f4a0e619b8.js" type="text/javascript"></script>
1105
1106
1107		
1108		
1109	
1110
1111	
1112		<div id="pp-native-controls-react-root"></div>
1113<script>window._nativeControlConfig = { "publicPath":"https://content.powerapps.com/resource/powerappsportal/controls", "versions": {"pcf_loader":"0.0.51","pcf_controls":"3.24.8","mf_shared":"0.2.32","host":"0.15.1","data_grid":"1.12.3","controls_fluent_v9":"0.0.54"}, "pvaEmbedded": { "defaultWidgetMode": "normal", "useCustomTypingIndicator": false, "skipSingleBotWelcomeScreen": false } }</script>
vendor: 1 bytes, line 1113
1113
1114<script defer="defer" src="https://content.powerapps.com/resource/powerappsportal/controls/host/main.3ee2491f78.chunk.js"></script>
1114
1115		
1116	
1117	
1118		<footer role="contentinfo">
1119  <div class="footer-bottom hidden-print">
1120    <div class="container">
1121      <div class="row">
1122            <div class="col-md-4 col-sm-12 col-xs-12"style="width: auto;" >
1123                <img alt="Victoria University of Wellington Student Portal" />
1124            </div>
1125            <div class="col-md-8 col-sm-11 col-xs-11 footerContent">
1126                <div class="col-md-6 col-sm-6 col-xs-6 footerContentPhoneNumbs">
1127                    <div class="footerContentPhoneNumb">
1128                        <a href='mailto:[email protected]'><u>Contact us</u></a> 
1129                    </div>
1130                    <div class="footerContentPhoneNumb">
1131                       <a href = "tel:0800040404"> 0800 04 04 04</a>
1132                    </div>
1133                    <div class="footerContentPhoneNumb">
1134                        <a href = "tel:6444721000"> +64 4 472 1000</a> 
1135                    </div>
1136                    
1137                </div>
1138                <div class="col-md-6 col-sm-6 col-xs-6">
1139                        Emergency: <a href= "tel:6444639999"><b>+64 4 463 9999</b></a> or ext. 8888 (internal)
1140                </div>
1141                </br>
1142                <div class="col-md-12">
1143                        By using our systems you agree to the University’s <a href="https://www.wgtn.ac.nz/site-info/privacy" target="_blank"><u>privacy notice</u></a> and <a href="https://www.wgtn.ac.nz/about/governance/policy/policies" target="_blank"><u>applicable policies</u></a>.
1144                </div>
1145            </div>
1146      </div>
1147      <!--<div class="row">
1148         <div class="col-md-8 col-sm-11 col-xs-11">
1149            <a href="https://www.wgtn.ac.nz/site-info/privacy">Privacy</a>
1150         </div>
1151      </div>
1152      <div class="row">
1153        <div class="col-md-11 col-sm-12 col-xs-12 text-right">
1154          <div class="xrm-editable-html&#32;xrm-attribute" data-languageContext="English"><div class="xrm-attribute-value"><p>Copyright © Victoria University of Wellington, New Zealand</p>
1155
1156
1157</div></div>
1158        </div>
1159
1160      </div>
1161    </div>-->
1162  </div>
1163</footer>
1164
1165
1166<script type="text/javascript" src="/f5common.js?v=2026-09-24T08:27:35Z" ></script>
1166
1167<script type="text/javascript" src="/intlTelInput.min.js?v=2026-09-24T08:27:35Z" ></script>
1167
1168<script class="iti-load-utils" async="" src="/utils.js?v=2026-09-24T08:27:35Z"></script>
1168
1169<script type="text/javascript" src="/moment-timezone-with-data-10-year-range.js?v=2026-09-24T08:27:35Z"></script>
1169
1170
1171<!--
1171<script src="https://maps.googleapis.com/maps/api/js?libraries=places&language=en&key=AIzaSyBfd6SSxekdva-kVGk2zJh_PFR0dyYt3Ag"></script>
1171
1172console.log(moment.utc());
1173console.log(moment.tz(moment.utc(),"NZ").format("YYYY-MM-DD HH:mm:ss"));
1174-->
1175
1176<script type="text/javascript">
1177       (function ($) {
1178         $(document).ready(function () {
1179             $(".dropdown-submenu").on("keydown", function (event) {
1180                if (event.keyCode == 9) {
1181                     $(this).toggleClass("open");
1182                }
1183            });
1184
1185            $("body").on("click",function(event){ 
1186              let tgt = $(event.target);
1187              let sipop = tgt.closest("#signedInPopup");
1188              let npop = tgt.closest("#notificationsPopup");
1189              if(tgt.prop("id") !== "signedInPopup" && sipop.length === 0){
1190                if($('#signedInPopup').hasClass("open")){
1191                    $('#signedInPopup').hide('slow').removeClass("open"); 
1192                }
1193              }
1194
1195              if(tgt.prop("id") !== "notificationsPopup" && npop.length === 0){
1196                if($('#notificationsPopup').hasClass("open")){
1197                    $('#notificationsPopup').hide('slow').removeClass("open"); 
1198                }
1199              }
1200            });
1201
1202
1203         });
1204        }(jQuery));
1205
1206
1207        function showLoader(show){
1208          if($(".overlay").length === 0) {
1209            $("body").append($("<div>",{ class: "overlay"}));
1210            var spanner = $("<div>",{ class: "spanner"});
1211            spanner.append($("<div>",{ class: "loader"}));
1212            spanner.append($("<p>",{ id: "loader-text", text:"Please wait."}));
1213            $("body").append(spanner);
1214          }
1215          
1216          if(show){
1217            $("div.spanner,div.overlay").addClass("show");
1218          } else {
1219            $("div.spanner,div.overlay").removeClass("show");
1220          }
1221        }
1222
1223
1224</script>
1224
1225	
1226
1227	
1227<script type="text/javascript">
1228
1229		function trackCopilotCustomUsage(botSchema) {
1230			const request = {
1231				botSchemaName: botSchema
1232			}
1233			var json = JSON.stringify(request);
1234			shell.ajaxSafePost({
1235				type: "POST",
1236				contentType: "application/json",
1237				url: "/_services/copilot/TrackUsage",
1238				data: json
1239			}).done(function () {
1240			}).fail(function (jqXhr) {
1241			});
1242		}
1243
1244		function findAndLogCustomCopilotUsage() {
1245			const pageSource = document.documentElement.outerHTML;
1246			const customPvaBotWebchatRegex = /api\.(preprod\.|test\.)?powerplatform\.(com|us|cn|appsplatform\.us)\/powervirtualagents\/botsbyschema\/([^/]+)\/directline\/token/;
1247			const customPvaBotIframeRegex = /powerva\.microsoft\.com\/environments\/([0-9a-fA-F\-]+)\/bots\/([^/]+)\/webchat/;
1248			const omniChannelRegex = /livechatwidget\/scripts\/LiveChatBootstrapper\.js/;
1249
1250			const matchPvaBotWebchat = pageSource.match(customPvaBotWebchatRegex);
1251			if (matchPvaBotWebchat && matchPvaBotWebchat[3]) {
1252				trackCopilotCustomUsage(matchPvaBotWebchat[3]);
1253			}
1254
1255			const matchPvaBotIframe = pageSource.match(customPvaBotIframeRegex);
1256			if (matchPvaBotIframe && matchPvaBotIframe[2]) {
1257				trackCopilotCustomUsage(matchPvaBotIframe[2]);
1258			}
1259
1260			const matchOmniChannel = pageSource.match(omniChannelRegex);
1261			if (matchOmniChannel && matchOmniChannel[0]) {
1262				trackCopilotCustomUsage("omnichannelWidget");
1263			}
1264		}
1265
1266		window.addEventListener("load", function () {
1267			findAndLogCustomCopilotUsage();
1268		});
1269	</script>
1269
1270
1271		
1272			
1273			
1274			
1275			
1276		
1277	
1277<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/bootstrap.bundle-105a4995b8.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/bootstrap.bundle-105a4995b8.js" type="text/javascript"></script>
1277
1278
1279	
1279<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/postpreform.bundle-4687dda8df.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/postpreform.bundle-4687dda8df.js" type="text/javascript"></script>
1279
1280
1281	
1281<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/app.bundle-1e948af604.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/app.bundle-1e948af604.js" type="text/javascript"></script>
1281
1282
1283	
1283<script onerror="javascript:&#32;var&#32;target&#32;=&#32;event.target;&#32;var&#32;script&#32;=&#32;document.createElement(&#39;script&#39;);&#32;script.crossOrigin&#32;=&#32;target.crossOrigin;&#32;script.src&#32;=&#32;&#39;/dist/default-1033.moment_2_29_4.bundle-eda4e638fd.js&#39;;&#32;script.type&#32;=&#32;&#39;text/javascript&#39;;&#32;target.insertAdjacentElement(&#39;afterend&#39;,script);" src="https://content.powerapps.com/resource/powerappsportal/dist/default-1033.moment_2_29_4.bundle-eda4e638fd.js" type="text/javascript"></script>
1283
1284
1285	
1286
1287	
1288	
1289	
1289<script type="text/javascript">
1290!function(T,l,y){var S=T.location,k="script",D="instrumentationKey",C="ingestionendpoint",I="disableExceptionTracking",E="ai.device.",b="toLowerCase",w="crossOrigin",N="POST",e="appInsightsSDK",t=y.name||"appInsights";(y.name||T[e])&&(T[e]=t);var n=T[t]||function(d){var g=!1,f=!1,m={initialize:!0,queue:[],sv:"5",version:2,config:d};function v(e,t){var n={},a="Browser";return n[E+"id"]=a[b](),n[E+"type"]=a,n["ai.operation.name"]=S&&S.pathname||"_unknown_",n["ai.internal.sdkVersion"]="javascript:snippet_"+(m.sv||m.version),{time:function(){var e=new Date;function t(e){var t=""+e;return 1===t.length&&(t="0"+t),t}return e.getUTCFullYear()+"-"+t(1+e.getUTCMonth())+"-"+t(e.getUTCDate())+"T"+t(e.getUTCHours())+":"+t(e.getUTCMinutes())+":"+t(e.getUTCSeconds())+"."+((e.getUTCMilliseconds()/1e3).toFixed(3)+"").slice(2,5)+"Z"}(),iKey:e,name:"Microsoft.ApplicationInsights."+e.replace(/-/g,"")+"."+t,sampleRate:100,tags:n,data:{baseData:{ver:2}}}}var h=d.url||y.src;if(h){function a(e){var t,n,a,i,r,o,s,c,u,p,l;g=!0,m.queue=[],f||(f=!0,t=h,s=function(){var e={},t=d.connectionString;if(t)for(var n=t.split(";"),a=0;a<n.length;a++){var i=n[a].split("=");
12902===i.length&&(e[i[0][b]()]=i[1])}if(!e[C]){var r=e.endpointsuffix,o=r?e.location:null;e[C]="https://"+(o?o+".":"")+"dc."+(r||"services.visualstudio.com")}return e}(),c=s[D]||d[D]||"",u=s[C],p=u?u+"/v2/track":d.endpointUrl,(l=[]).push((n="SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details)",a=t,i=p,(o=(r=v(c,"Exception")).data).baseType="ExceptionData",o.baseData.exceptions=[{typeName:"SDKLoadFailed",message:n.replace(/\./g,"-"),hasFullStack:!1,stack:n+"\nSnippet failed to load ["+a+"] -- Telemetry is disabled\nHelp Link: https://go.microsoft.com/fwlink/?linkid=2128109\nHost: "+(S&&S.pathname||"_unknown_")+"\nEndpoint: "+i,parsedStack:[]}],r)),l.push(function(e,t,n,a){var i=v(c,"Message"),r=i.data;r.baseType="MessageData";var o=r.baseData;return o.message='AI (Internal): 99 message:"'+("SDK LOAD Failure: Failed to load Application Insights SDK script (See stack for details) ("+n+")").replace(/\"/g,"")+'"',o.properties={endpoint:a},i}(0,0,t,p)),function(e,t){if(JSON){var n=T.fetch;if(n&&!y.useXhr)n(t,{method:N,body:JSON.stringify(e),mode:"cors"});else if(XMLHttpRequest){var a=new XMLHttpRequest;a.open(N,t),a.setRequestHeader("Content-type","application/json"),a.send(JSON.stringify(e))}}}(l,p))}function i(e,t){f||setTimeout(function(){!t&&m.core||a()},500)}var e=function(){var n=l.createElement(k);n.src=h;var e=y[w];return!e&&""!==e||"undefined"==n[w]||(n[w]=e),n.onload=i,n.onerror=a,n.onreadystatechange=function(e,t){"loaded"!==n.readyState&&"complete"!==n.readyState||i(0,t)},n}();y.ld<0?l.getElementsByTagName("head")[0].appendChild(e):setTimeout(function(){l.getElementsByTagName(k)[0].parentNode.appendChild(e)},y.ld||0)}try{m.cookie=l.cookie}catch(p){}function t(e){for(;e.length;)!function(t){m[t]=function(){var e=arguments;g||m.queue.push(function(){m[t].apply(m,e)})}}(e.pop())}var n="track",r="TrackPage",o="TrackEvent";t([n+"Event",n+"PageView",n+"Exception",n+"Trace",n+"DependencyData",n+"Metric",n+"PageViewPerformance","start"+r,"stop"+r,"start"+o,"stop"+o,"addTelemetryInitializer","setAuthenticatedUserContext","clearAuthenticatedUserContext","flush"]),m.SeverityLevel={Verbose:0,Information:1,Warning:2,Error:3,Critical:4};var s=(d.extensionConfig||{}).ApplicationInsightsAnalytics||{};if(!0!==d[I]&&!0!==s[I]){var c="onerror";t(["_"+c]);var u=T[c];T[c]=function(e,t,n,a,i){var r=u&&u(e,t,n,a,i);return!0!==r&&m["_"+c]({message:e,url:t,lineNumber:n,columnNumber:a,error:i}),r},d.autoExceptionInstrumented=!0}return m}(y.cfg);function a(){y.onInit&&y.onInit(n)}(T[t]=n).queue&&0===n.queue.length?(n.queue.push(a),n.trackPageView({})):a()}(window,document,{
1291src: "https://js.monitor.azure.com/scripts/b/ai.2.min.js", // The SDK URL Source
1292// name: "appInsights", // Global SDK Instance name defaults to "appInsights" when not supplied
1293// ld: 0, // Defines the load delay (in ms) before attempting to load the sdk. -1 = block page load and add to head. (default) = 0ms load after timeout,
1294// useXhr: 1, // Use XHR instead of fetch to report failures (if available),
1295crossOrigin: "anonymous", // When supplied this will add the provided value as the cross origin attribute on the script tag
1296// onInit: null, // Once the application insights instance has loaded and initialized this callback function will be called with 1 argument -- the sdk instance (DO NOT ADD anything to the sdk.queue -- As they won't get called)
1297onInit: function(appInsights) {
1298 
1299    appInsights.clearAuthenticatedUserContext();
1300 
1301    },
1302cfg: { // Application Insights Configuration
1303    instrumentationKey: "7257eebc-d2fe-43c7-af4d-e9c6b08fd777"
1304}});
1305</script>
1305
1306	
1306<script>
1307        //this event will update the title of the page based on active breadcrumb
1308        $('.breadcrumb').ready(function () {
1309            if ($('.breadcrumb').is(':visible')) {
1310                document.querySelector('title').innerHTML = ($('.breadcrumb > li.active').text() + " | Pūaha | Victoria University of Wellington");
1311            }
1312        });
1313
1314        function GoToNewEditor() {
1315            var editCmsUrlSegment = "EditInCms";
1316            var currentUrl = window.location.href;
1317            if (currentUrl.indexOf('?') > -1) {
1318                var urlSegments = currentUrl.split("?");
1319                window.location.href = window.location.origin + '/' + editCmsUrlSegment + window.location.pathname + '?' + urlSegments[1];
1320            }
1321            else {
1322                window.location.href = window.location.origin + '/' + editCmsUrlSegment + window.location.pathname;
1323            }
1324        }
1325    </script>
1325
1326	
1327		
1328		
1329	
1330		
1331				
1331<script>
1332					if ('serviceWorker' in navigator) {
1333						navigator.serviceWorker.getRegistrations().then(function (registrations) {
1334							for (let registration of registrations) {
1335								registration.unregister();
1336							}
1337						}).catch(function (err) {
1338							console.log('Service Worker unregister action failed: ', err);
1339						});
1340					}
1341				</script>
1341
1342			
1343	
1344		
1345	<!--Start Show Session Expire Warning Popup here -->
1346    
1347		
1348</body>
1349</html>
1350<!-- Generated at 9/24/2026 8:27:35 AM -->
1351<!-- Page OK -->

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.