PageSourceSearch

https://adfs.hv.se/adfs/ls/?wtrealm=https%3A%2F%2Fwww.hv.se&wctx=W…=wsignin1.0&wreply=https%3A%2F%2Fwww.hv.se

html hv.se collected 2026-09-24 17:17:22 UTC 32,393 bytes, 856 lines download raw bytes

1 <!DOCTYPE html>
2<html lang="en-US">
3    <head>
4        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
5        <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=1"/>
6        <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
7        <meta http-equiv="cache-control" content="no-cache,no-store"/>
8        <meta http-equiv="pragma" content="no-cache"/>
9        <meta http-equiv="expires" content="-1"/>
10        <meta name='mswebdialog-title' content='Connecting to H&#246;gskolan V&#228;st'/>
11
12        <title>Sign In</title>
13        
13<script type='text/javascript'>
14//<![CDATA[
15function LoginErrors(){this.userNameFormatError = 'Enter your user ID in the format \u0026quot;domain\\user\u0026quot; or \u0026quot;user@domain\u0026quot;.'; this.passwordEmpty = 'Enter your password.'; this.passwordTooLong = 'Password is too long (\u0026gt; 128 characters).';}; var maxPasswordLength = 128;
16//]]>
17</script>
17
18
19<script type='text/javascript'>
20//<![CDATA[
21// Copyright (c) Microsoft Corporation.  All rights reserved.
22function InputUtil(errTextElementID, errDisplayElementID, errTextPasswordElementID, errPasswordDisplayElementID, errTextOptionElementID, errOptionDisplayElementID) {
23
24    if (!errTextElementID) errTextElementID = 'errorText';
25    if (!errTextPasswordElementID) errTextPasswordElementID = 'errorTextPassword';
26    if (!errTextOptionElementID) errTextOptionElementID = 'errorTextOption';
27    if (!errDisplayElementID)  errDisplayElementID = 'error'; 
28    if (!errPasswordDisplayElementID) errPasswordDisplayElementID = 'errorPassword';
29    if (!errOptionDisplayElementID) errOptionDisplayElementID = 'errorOption';
30
31    this.hasFocus = false;
32    this.errLabel = document.getElementById(errTextElementID);
33    this.errDisplay = document.getElementById(errDisplayElementID);
34    this.errPassLabel = document.getElementById(errTextPasswordElementID);
35    this.errPassDisplay = document.getElementById(errPasswordDisplayElementID);
36    this.errOptionLabel = document.getElementById(errTextOptionElementID);
37    this.errOptionDisplay = document.getElementById(errOptionDisplayElementID);
38};
39InputUtil.prototype.canDisplayError = function () {
40    return (this.errLabel && this.errDisplay) || (this.errPassLabel && this.errPassDisplay) || (this.errOptionLabel && this.errOptionDisplay);
41}
42InputUtil.prototype.checkError = function () {
43    if (!this.canDisplayError){
44        throw new Error ('Error element not present');
45    }
46
47    var hasUserError = false;
48    var hasPassError = false;
49    var hasOptionError = false;
50    var cause;
51
52    if (this.errLabel && this.errLabel.innerHTML) {
53        this.errDisplay.style.display = '';
54        cause = this.errLabel.getAttribute('for');
55        hasUserError = true;
56    }
57
58    if (this.errPassLabel && this.errPassLabel.innerHTML)
59    {
60        this.errPassDisplay.style.display = '';
61        cause = this.errPassLabel.getAttribute('for');
62        hasPassError = true;
63    }
64
65    if (this.errOptionLabel && this.errOptionLabel.innerHTML) {
66        this.errOptionDisplay.style.display = '';
67        cause = this.errOptionLabel.getAttribute('for');
68        hasOptionError = true;
69    }
70
71    if (cause) {
72        var causeNode = document.getElementById(cause);
73        if (causeNode && causeNode.value) {
74            causeNode.focus();
75            this.hasFocus = true;
76        }
77    }
78
79    if (!hasUserError) {
80        if (this.errLabel && this.errLabel.innerHTML) {
81            this.errDisplay.style.display = 'none';
82        }
83    }
84
85    if (!hasPassError) {
86        if (this.errPassLabel && this.errPassLabel.innerHTML) {
87            this.errPassDisplay.style.display = 'none';
88        }
89    }
90
91    if (!hasOptionError) {
92        if (this.errOptionLabel && this.errOptionLabel.innerHTML) {
93            this.errOptionDisplay.style.display = 'none';
94        }
95    }
96};
97InputUtil.prototype.clearError = function() {
98    if (!this.canDisplayError) {
99        throw new Error('Error element not present');
100    }
101
102    if (this.errLabel && this.errLabel.innerHTML) {
103        this.errLabel.innerHTML = '';
104        this.errDisplay.style.display = 'none';
105    }
106
107    if (this.errPassLabel && this.errPassLabel.innerHTML) {
108        this.errPassLabel.innerHTML = '';
109        this.errPassDisplay.style.display = 'none';
110    }
111
112    if (this.errOptionLabel && this.errOptionLabel.innerHTML) {
113        this.errOptionLabel.innerHTML = '';
114        this.errOptionDisplay.style.display = 'none';
115    }
116};
117InputUtil.prototype.setInitialFocus = function (input) {
118    if (this.hasFocus) return;
119    var node = document.getElementById(input);
120    if (node) {
121        if ((/^\s*$/).test(node.value)) {
122            node.focus();
123            this.hasFocus = true;
124        }
125    }
126};
127InputUtil.prototype.setError = function (input, errorMsg, password) {
128    if (!this.canDisplayError) {
129        throw new Error('Error element not present');
130    }
131    input.focus();
132
133    if (errorMsg) {
134        if (password) {
135            this.errPassLabel.innerHTML = errorMsg;
136            this.errPassDisplay.style.display = '';
137        } else {
138            this.errLabel.innerHTML = errorMsg;
139            this.errDisplay.style.display = '';
140        }
141    }
142
143    if (password) {
144        this.errPassLabel.setAttribute('for', input.id);
145        this.errPassDisplay.style.display = '';
146    } else {
147        this.errLabel.setAttribute('for', input.id);
148        this.errDisplay.style.display = '';
149    }
150};
151InputUtil.makePlaceholder = function (input) {
152    var ua = navigator.userAgent;
153
154    if (ua != null && 
155        (ua.match(/MSIE 9.0/) != null || 
156         ua.match(/MSIE 8.0/) != null ||
157         ua.match(/MSIE 7.0/) != null)) {
158        var node = document.getElementById(input);
159        if (node) {
160            var placeholder = node.getAttribute("placeholder");
161            if (placeholder != null && placeholder != '') {
162                var label = document.createElement('input');
163                label.type = "text";
164                label.value = placeholder;
165                label.readOnly = true;
166                label.style.position = 'absolute';
167                label.style.borderColor = 'transparent';
168                label.className = node.className + ' hint';
169                label.tabIndex = -1;
170                label.onfocus = function () { this.nextSibling.focus(); };
171
172                node.style.position = 'relative';
173                node.parentNode.style.position = 'relative';
174                node.parentNode.insertBefore(label, node);
175                node.onkeyup = function () { InputUtil.showHint(this); };
176                node.onblur = function () { InputUtil.showHint(this); };
177                node.style.background = 'transparent';
178
179                node.setAttribute("placeholder", "");
180                InputUtil.showHint(node);
181            }
182        }
183    }
184};
185InputUtil.focus = function (inputField) {
186    var node = document.getElementById(inputField);
187    if (node) node.focus();
188};
189InputUtil.hasClass = function(node, clsName) {
190    return node.className.match(new RegExp('(\\s|^)' + clsName + '(\\s|$)'));
191};
192InputUtil.addClass = function(node, clsName) {
193    if (!this.hasClass(node, clsName)) node.className += " " + clsName;
194};
195InputUtil.removeClass = function(node, clsName) {
196    if (this.hasClass(node, clsName)) {
197        var reg = new RegExp('(\\s|^)' + clsName + '(\\s|$)');
198        node.className = node.className.replace(reg, ' ');
199    }
200};
201InputUtil.showHint = function (node, gotFocus) {
202    if (node.value && node.value != '') {
203        node.previousSibling.style.display = 'none';
204    }
205    else {
206        node.previousSibling.style.display = '';
207    }
208};
209InputUtil.updatePlaceholder = function (input, placeholderText) {
210    var node = document.getElementById(input);
211    if (node) {
212        var ua = navigator.userAgent;
213        if (ua != null &&
214            (ua.match(/MSIE 9.0/) != null ||
215            ua.match(/MSIE 8.0/) != null ||
216            ua.match(/MSIE 7.0/) != null)) {
217            var label = node.previousSibling;
218            if (label != null) {
219                label.value = placeholderText;
220            }
221        }
222        else {
223            node.placeholder = placeholderText;
224        }
225    }
226};
227
228//]]>
229</script>
229
230
231<script type='text/javascript'>
232//<![CDATA[
233/* 
234 * Copyright (c) Microsoft Corporation.  All rights reserved.
235 *
236 * Description: Functions to perform login page pagination
237 * 
238 */
239
240PaginationUtil = {
241    /*
242     * Helper to extract a query parameter. Taken from Main_Browser.js
243     *
244     * param: Name of the parameter to extract.
245     * returns: The query parameter value if it PaginationUtil.exists otherwise it returns
246     *     an empty string.
247     */
248    ExtractQSParam: function (param) {
249        var sQS = document.location.search.toLowerCase();
250        if (sQS)
251            sQS = sQS.substr(1);
252        return PaginationUtil.ExtractToken(sQS, param.toLowerCase(), "&", "=", "");
253    },
254
255    /* 
256     *  Extract a specific token from a string.    
257     *
258     *  Args:
259     *      sString - the full string
260     *      sName   - the name of the token
261     *      sDelim  - the token delimiter (default '&')
262     *      sSep    - the name=value pair separator (default '=')
263     *
264     *  Returns: string
265     *      the value of the token if PaginationUtil.exists
266     *      null otherwise
267     */
268    ExtractToken: function (sString, sName, sDelim, sSep, sDefault) {
269        sDelim = PaginationUtil.valOrDefault(sDelim, "&");
270        sSep = PaginationUtil.valOrDefault(sSep, "=");
271        var value = PaginationUtil.valOrDefault(sDefault, null);
272
273        if (!sString)
274            return value;
275
276        var start = sString.indexOf(sName + sSep);
277
278        if (0 == start) {
279            start += sName.length + 1;
280        }
281        else if (0 < start) {
282            start = sString.indexOf(sDelim + sName + sSep);
283            if (0 < start) { start += sDelim.length + sName.length + 1; }
284        }
285
286        if (-1 != start) {
287            var end = sString.indexOf(sDelim, start);
288            if (-1 == end) { end = sString.length; }
289            value = sString.substring(start, end);
290        }
291
292        return value;
293    },
294
295    // Helper to handle supporting default values.
296    valOrDefault: function (oVal, oDefault) {
297        return ((PaginationUtil.exists(oVal)) ? oVal : oDefault);
298    },
299
300    // Helper for testing existence.
301    exists: function (v) {
302        return ((v) ? true : (v == 0 || v == false || v == ""));
303    }
304}
305
306PaginationManager = {
307
308    /*
309     * Initialize state
310     * 'options' is an object with extra options to use. An example:
311     * {
312     *    pages: ["usernamePage", "primaryOptionsPage", "passwordPage"],     // required
313     *    currentPageIndex: 0                                                // optional - default 0 
314     * }
315     */
316    Initialize: function (options) {
317        this.options = options || { pages: ["usernamePage", "primaryOptionsPage", "passwordPage"], currentPageIndex: 0 };
318        this.debugMode = PaginationUtil.ExtractQSParam('debugMode').toLowerCase();
319
320        var pageElements = [];
321        for (var i = 0; i < this.options.pages.length; i++) {
322            pageElements.push(document.getElementById(this.options.pages[i]));
323        }
324
325        this.options.pages = pageElements;
326        this.initializePageDisplayedElements();
327    },
328
329    initializePageDisplayedElements: function() {
330        _self = this;
331
332        // Hide the back button on pages that can't go back
333        if (_self.options.pages && _self.options.pages[0]) {
334            var passwordBack = document.getElementById("backButtonArea");
335            var optionsBack = document.getElementById("optionsBackButtonArea");
336
337            if (passwordBack && _self.options.pages[0].id === "passwordPage") {
338                passwordBack.style.display = "none";
339                var submitButton = document.getElementById("submitButton");
340                if (submitButton && submitButton.classList) {
341                    submitButton.classList.remove("rightHalfWidthButton");
342                }
343            }
344
345            if (optionsBack && _self.options.pages[0].id === "primaryOptionsPage") {
346                optionsBack.style.display = "none";
347            }
348        }
349
350        // Hide all pages, and display the start page 
351        _self.adjustElementDisplay(_self.options.pages, "none");
352        _self.adjustElementDisplay([_self.options.pages[_self.options.currentPageIndex]], "block");
353        _self.setFocus();
354    },
355
356    adjustElementDisplay: function (elementList, display)
357    {
358        for ( var i = 0; i < elementList.length; i++ )
359        {
360            if ( elementList[i] && elementList[i].style )
361            {
362                elementList[i].style.display = display;
363            }
364        }
365    },
366
367    isValidIndex: function (index, arrayLength) {
368        if (arrayLength <= 0 || index < 0) {
369            return false;
370        }
371        
372        if (index <= arrayLength - 1) {
373            return true;
374        }
375    },
376
377    displayPage: function (args) {
378        var _self = this;
379        if (_self.options.pages && _self.options.pages.length > 0) {
380            var exp = 0;
381            if (args && args.backwards) {
382                exp = 1;
383            }
384            var pageToHideIndex = _self.options.currentPageIndex;
385            if (_self.isValidIndex(_self.options.currentPageIndex + Math.pow(-1, exp), _self.options.pages.length)) {
386                _self.options.currentPageIndex = _self.options.currentPageIndex + Math.pow(-1, exp);
387                _self.redrawPages(pageToHideIndex, _self.options.currentPageIndex);
388            } else {
389                if (_self.debugMode && console && console.log) {
390                    console.log("[ADFS]: Attempted to navigate to an invalid page index");
391                }
392            }
393        }
394    },
395
396    updatePagesWithUsername: function (username) {
397        var idBanner = document.getElementById("identityBanner");
398        var formUsernameInput = document.getElementById("userNameInputHolder");
399        var optionsUsernameInput = document.getElementById("userNameInputOptionsHolder");
400        var idBannerOptionsPage = document.getElementById("identityBannerOptions");
401        var kmsiHolder = document.getElementById("kmsiHolder");
402        var kmsiInput = document.getElementById("kmsiInput");
403        
404        if (idBanner) {
405            idBanner.innerText = username;
406        }
407
408        if (idBannerOptionsPage) {
409            idBannerOptionsPage.innerText = username;
410        }
411
412        if (formUsernameInput) {
413            formUsernameInput.value = username;
414        }
415
416        if (optionsUsernameInput) {
417            optionsUsernameInput.value = username;
418        }
419
420        if (kmsiInput && kmsiHolder) {
421            kmsiHolder.value = kmsiInput.value;
422        }
423    },
424
425    validateAndNext: function () {
426        var u = new InputUtil();
427        var e = new LoginErrors();
428
429        var userName = document.getElementById(Login.userNameInput);
430
431        if (!userName.value || !userName.value.match('[@\\\\]')) {
432            u.setError(userName, e.userNameFormatError);
433            return false;
434        }
435
436        _self.updatePagesWithUsername(userName.value);
437        u.clearError();
438
439        if (_self.options.currentPageIndex + 1 >= _self.options.pages.length) {
440            // POST back to ADFS since there are no more pages to go to 
441            document.forms['loginFormPaginated'].submit();
442            return true;
443        } else {
444            _self.displayNextPage();
445        }
446        
447        return true;
448    },
449
450    displayNextPage: function () {
451        _self = this;
452        _self.displayPage({ backwards: false });
453    },
454
455    displayPreviousPage: function () {
456        _self = this;
457        var u = new InputUtil();
458        u.clearError();
459        _self.displayPage({ backwards: true });
460    },
461
462    redrawPages: function (pageToHideIndex, pageToShowIndex) {
463        _self = this;
464        _self.adjustElementDisplay([_self.options.pages[pageToHideIndex]], "none");
465        _self.adjustElementDisplay([_self.options.pages[pageToShowIndex]], "block");
466        _self.setFocus();
467    },
468
469    setFocus: function () {
470        var usernameInput = document.getElementById(Login.userNameInput);
471        var passwordInput = document.getElementById(Login.passwordInput);
472        var optionInput = document.getElementsByClassName("optionButton");
473        
474        if (usernameInput && _self.options.pages[_self.options.currentPageIndex] && _self.options.pages[_self.options.currentPageIndex].id === "usernamePage") {
475            usernameInput.focus();
476        } else if (passwordInput && _self.options.pages[_self.options.currentPageIndex] && _self.options.pages[_self.options.currentPageIndex].id === "passwordPage") {
477            passwordInput.focus();
478        } 
479        else if (optionInput && optionInput.length > 0 && _self.options.pages[_self.options.currentPageIndex] && _self.options.pages[_self.options.currentPageIndex].id === "primaryOptionsPage") {
480            optionInput[0].focus();
481        } 
482    }
483};
484
485var paginationManager = PaginationManager;
486
487
488//]]>
489</script>
489
490
491<script type='text/javascript'>
492//<![CDATA[
493LoginManager = {
494    initialize: function () {
495        var u = new InputUtil();
496
497        this.userNameInput = 'userNameInput';
498        this.userNameInputHolder = 'userNameInputHolder';
499        this.passwordInput = 'passwordInput';
500
501        u.checkError();
502        u.setInitialFocus(Login.userNameInput);
503        u.setInitialFocus(Login.passwordInput);
504    },
505
506    submitLoginRequest: function () {
507        var u = new InputUtil();
508        var e = new LoginErrors();
509
510        var userName = document.getElementById(Login.userNameInput);
511        var userNamePaginated = document.getElementById(Login.userNameInputHolder);
512        var password = document.getElementById(Login.passwordInput);
513
514        if (!userName && userNamePaginated) {
515            userName = userNamePaginated;
516        }
517
518        if (!userName.value || !userName.value.match('[@\\\\]')) {
519            u.setError(userName, e.userNameFormatError);
520            return false;
521        }
522
523        if (!password.value) {
524            u.setError(password, e.passwordEmpty, true);
525            return false;
526        }
527
528        if (password.value.length > maxPasswordLength) {
529            u.setError(password, e.passwordTooLong, true);
530            return false;
531        }
532
533        document.forms['loginForm'].submit();
534        return false;
535    }
536};
537var Login = LoginManager;
538Login.initialize();
539InputUtil.makePlaceholder(Login.userNameInput);
540InputUtil.makePlaceholder(Login.passwordInput);
541//]]>
542</script>
542
543
544
545        
546        <link rel="stylesheet" type="text/css" href="/adfs/portal/css/style.css?id=3EC48654E517DC9E6F4B5B7A05BD0ACD52EF68DC860A2EA6F0216FB789FBEA6C" /><style>.illustrationClass {background-image:url(/adfs/portal/illustration/illustration.jpg?id=398B470934A884611E11C20C352E96B737A0B56B511AA8461D5E9B241B1FF5AC);}</style>
547
548    </head>
549    <body dir="ltr" class="body">
550    <div id="noScript" style="position:static; width:100%; height:100%; z-index:100">
551        <h1>JavaScript required</h1>
552        <p>JavaScript is required. This web browser does not support JavaScript or JavaScript in this web browser is not enabled.</p>
553        <p>To find out if your web browser supports JavaScript or to enable JavaScript, see web browser help.</p>
554    </div>
555    
555<script type="text/javascript" language="JavaScript">
556         document.getElementById("noScript").style.display = "none";
557    </script>
557
558    <div id="fullPage">
559        <div id="brandingWrapper" class="float">
560            <div id="branding"></div>
561        </div>
562        <div id="contentWrapper" class="float">
563            <div id="content">
564                <div id="header">
565                    <img class='logoImage' id='companyLogo' src='/adfs/portal/logo/logo.jpg?id=6D1437EEFACE17D171CC216186B230B253B417C82C5C6B0A3A734A9F4099BB3E' alt='H&#246;gskolan V&#228;st'/>
566                </div>
567                <main>
568                    <div id="workArea">
569                        
570    <div id="authArea" class="groupMargin">
571        
572        
573        <div id="loginArea">
574    <div id="usernamePage">        
575    <div id="loginMessage" class="groupMargin">Sign in</div>
576    <form method="post" id="loginFormPaginated" class="paginatedPageForm" autocomplete="off" novalidate="novalidate" onKeyPress="if (event && event.keyCode == 13) event.preventDefault();" action="/adfs/ls/?wtrealm=https%3A%2F%2Fwww.hv.se&wctx=WsFedOwinState%3D5y-uuPy_xAmRlNYqROITgKFc8mMeS0tQqSjGXMWZrwW6Nxw2tqw7iUoWmM5mdC2zXyaw-zENRtQdrd21zTWH99gxtK5aabT-fmoh2QO5SQtK80ViHrwuZ-oAeuiV_Jf3pSSuAd7wSZebYAOZuMFkjQ&wa=wsignin1.0&wreply=https%3A%2F%2Fwww.hv.se&client-request-id=083fbd65-8139-4810-de42-0080000000bc">
577        <div id="formsAuthenticationArea">
578            <div id="userNameArea">
579                <label id="userNameInputLabel" for="userNameInput" class="hidden">User Account</label>
580                <input id="userNameInput" name="UserName" type="email" value="" tabindex="1" class="text textPaginated fullWidth" onKeyPress="if (event && event.keyCode == 13) paginationManager.validateAndNext();"
581                       spellcheck="false" placeholder="[email protected]" autocomplete="off"/>
582            </div>
583            <div id="error" class="fieldMargin error errorUsernamePaginated smallText">
584                <span id="errorText" for="" class="errorText" aria-live="assertive" role="alert"></span>
585            </div>
586            <div id="introduction" class="groupMargin signInIntroduction">
587                <span style='font-size: 16px; line-height: 2; display: block;'>Use your username to log in<br /><br />Example:<br />[email protected] (Student)<br />[email protected] (Employees)</span>
588            </div>
589            <div id="kmsiArea" class="kmsiAreaPaginated" style="display:none">
590                <input type="checkbox" name="Kmsi" id="kmsiInput" value="true" tabindex="2"/>
591                <label for="kmsiInput">Keep me signed in</label>
592            </div>
593        </div>
594    </form>
595    <div id="nextButtonArea">
596        <span id="nextButton" class="next" tabindex="0" role="button"
597              onKeyPress="if (event && (event.keyCode == 32 || event.keyCode == 13)) paginationManager.validateAndNext();"
598              onclick="return paginationManager.validateAndNext();">Next</span>
599    </div>
600</div>
601
602    
603    <div id="passwordPage">
604    <div id="passwordBannerContainer" class="bannerContainer">
605        <div id="backButton" class="back" tabindex="0" role="button"
606             onKeyPress="if (event && (event.keyCode == 32 || event.keyCode == 13)) paginationManager.displayPreviousPage();"
607             onclick="return paginationManager.displayPreviousPage();" aria-label="Back">
608            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2048 2048" width="15" height="15" fill="currentColor" style="margin-top: 5Px;">
609                <path d="M2048 960q0 26-19 45t-45 19H219l786 787q19 19 19 45t-19 45-45 19q-26 0-45-19L22 1008q-11-11-16-22t-6-26q0-15 5-26t17-22L915 19q19-19 45-19t45 19 19 45q0 26-19 45L219 896h1765q26 0 45 19t19 45z"></path>
610            </svg>
611        </div>
612        <div id="identityBanner" class="identityBanner"></div>
613    </div>
614    <div id="formsAuthenticationAreaPassword">
615        <form method="post" id="loginForm" autocomplete="off" class="paginatedPageForm" novalidate="novalidate" onKeyPress="if (event && event.keyCode == 13) return Login.submitLoginRequest();" action="/adfs/ls/?wtrealm=https%3A%2F%2Fwww.hv.se&wctx=WsFedOwinState%3D5y-uuPy_xAmRlNYqROITgKFc8mMeS0tQqSjGXMWZrwW6Nxw2tqw7iUoWmM5mdC2zXyaw-zENRtQdrd21zTWH99gxtK5aabT-fmoh2QO5SQtK80ViHrwuZ-oAeuiV_Jf3pSSuAd7wSZebYAOZuMFkjQ&wa=wsignin1.0&wreply=https%3A%2F%2Fwww.hv.se&client-request-id=083fbd65-8139-4810-de42-0080000000bc">
616            <input id="userNameInputHolder" name="UserName" value="" type="hidden"/>
617            <input id="kmsiHolder" name="Kmsi" value="" type="hidden"/>
618            <input id="formsAuthMethod" type="hidden" name="AuthMethod" value="FormsAuthentication"/>
619            <div id="passwordArea">
620                <label id="passwordInputLabel" for="passwordInput" class="hidden">Password</label>
621                <input id="passwordInput" name="Password" type="password" tabindex="0" class="text textPaginated fullWidth"
622                       placeholder="Password" autocomplete="off"/>
623            </div>
624            <span id="submitButton" class="submit submitPaginated" tabindex="0" role="button"
625                  onKeyPress="if (event && (event.keyCode == 32 || event.keyCode == 13)) Login.submitLoginRequest();"
626                  onclick="return Login.submitLoginRequest();">Sign in</span>
627        </form>
628        <div id="errorPassword" class="fieldMargin error smallText">
629            <span id="errorTextPassword" for="" class="errorText" aria-live="assertive" role="alert"></span>
630        </div>
631    </div>
632</div>
633
634
635    
635<script type="text/javascript">
636        var options = {
637            pages: ["usernamePage","passwordPage"],
638            currentPageIndex: 0
639        };
640        paginationManager.Initialize(options);
641    </script>
641
642</div>
643
644    </div>
645
646                    </div>
647                </main>
648                <div id="footerPlaceholder"></div>
649            </div>
650            <footer id="footer">
651                <div id="footerLinks" class="floatReverse">
652                    <div><span id="copyright">&#169; 2018 Microsoft</span><a id="home" class="pageLink footerLink " href="https://www.hv.se">www.hv.se</a><a id="privacy" class="pageLink footerLink" href="https://www.hv.se/om-webbplatsen/integritetspolicy/">Dataskyddsf&#246;rordningen - GDPR</a><a id="helpDesk" class="pageLink footerLink" href="https://mittkonto.hv.se/">Forgot your username and/or password?</a></div>
653                </div>
654            </footer>
655        </div>     
656    </div>
657    
657<script type='text/javascript'>
658//<![CDATA[
659// HVLoginPage onload.js (AD FS 2019+)
660// Safe for Paginated (Identifier-first) + Classic UI + WCAG 2.1
661(function () {
662  "use strict";
663
664  var CONFIG = {
665    netbiosDomain: "WAD",
666    desiredUsernamePlaceholder: "Username",
667    desiredPasswordPlaceholder: "Password",
668    debug: false
669  };
670
671  function log() {
672    if (!CONFIG.debug || !window.console) return;
673    try { console.log.apply(console, arguments); } catch (e) { }
674  }
675
676  function $(id) { return document.getElementById(id); }
677
678  function safeAddEvent(el, evt, handler, capture) {
679    if (!el || !el.addEventListener) return;
680    el.addEventListener(evt, handler, !!capture);
681  }
682
683  // Normalize sAMAccountName -> DOMAIN\sAMAccountName
684  function shouldPrefix(value) {
685    if (!value) return false;
686    return value.indexOf("@") < 0 && value.indexOf("\\") < 0;
687  }
688
689  function normalizeUsernameField() {
690    var input = $("userNameInput");
691    if (!input) return false;
692
693    var v = (input.value || "").trim();
694    if (!v) return false;
695
696    if (shouldPrefix(v)) {
697      input.value = CONFIG.netbiosDomain + "\\" + v;
698      log("[HV] Normalized username =>", input.value);
699      return true;
700    }
701    return false;
702  }
703
704  // Enforce Placeholders and ARIA Attributes for WCAG / Screen Readers
705  function applyAccessibilityAndPlaceholders() {
706    var u = $("userNameInput");
707    if (u) {
708      if (u.getAttribute("placeholder") !== CONFIG.desiredUsernamePlaceholder) {
709        u.setAttribute("placeholder", CONFIG.desiredUsernamePlaceholder);
710      }
711      if (!u.getAttribute("aria-label")) {
712        u.setAttribute("aria-label", CONFIG.desiredUsernamePlaceholder);
713      }
714    }
715
716    var p = $("passwordInput") || document.querySelector('input[type="password"]');
717    if (p) {
718      if (p.getAttribute("placeholder") !== CONFIG.desiredPasswordPlaceholder) {
719        p.setAttribute("placeholder", CONFIG.desiredPasswordPlaceholder);
720      }
721      if (!p.getAttribute("aria-label")) {
722        p.setAttribute("aria-label", CONFIG.desiredPasswordPlaceholder);
723      }
724    }
725
726    // Fix for Next/Submit button screen reader accessibility
727    var btn = findContinueButton();
728    if (btn) {
729      if (!btn.getAttribute("aria-label")) {
730        btn.setAttribute("aria-label", "Next");
731      }
732      if (!btn.getAttribute("role")) {
733        btn.setAttribute("role", "button");
734      }
735    }
736  }
737
738  // DOM Reordering for Footer/Helpdesk (ensures correct Tab order for screen readers)
739  function reorderFooterDom() {
740    var footer = $("footer");
741    var opening = $("opening") || $("helpDesk");
742    var forgot = $("forgotPassword") || $("forgotPasswordLink");
743
744    if (footer && opening && opening.parentNode !== footer) {
745      footer.insertBefore(opening, footer.firstChild);
746    }
747    if (footer && forgot && forgot.parentNode !== footer) {
748      if (opening && opening.nextSibling) {
749        footer.insertBefore(forgot, opening.nextSibling);
750      } else {
751        footer.appendChild(forgot);
752      }
753    }
754  }
755
756  // Event Handlers
757  function findContinueButton() {
758    return $("nextButton") || $("submitButton") || null;
759  }
760
761  function handleEnterInUsername(e) {
762    e = e || window.event;
763    var isEnter = (e.key === "Enter") || (e.keyCode === 13);
764    if (!isEnter) return;
765
766    var u = $("userNameInput");
767    if (!u || document.activeElement !== u) return;
768
769    var changed = normalizeUsernameField();
770    if (!changed) return;
771
772    if (e.preventDefault) e.preventDefault();
773    if (e.stopPropagation) e.stopPropagation();
774    e.returnValue = false;
775
776    setTimeout(function () {
777      try {
778        var btn = findContinueButton();
779        if (btn && typeof btn.click === "function") {
780          btn.click();
781        }
782      } catch (ex) {
783        log("[HV] Enter continue failed:", ex);
784      }
785    }, 0);
786
787    return false;
788  }
789
790  function wireHandlers() {
791    var u = $("userNameInput");
792    if (u && !u.getAttribute("data-hv-wired")) {
793      u.setAttribute("data-hv-wired", "1");
794      safeAddEvent(u, "blur", normalizeUsernameField);
795      safeAddEvent(u, "change", normalizeUsernameField);
796      safeAddEvent(u, "keydown", handleEnterInUsername, true);
797    }
798
799    var next = $("nextButton");
800    if (next && !next.getAttribute("data-hv-wired")) {
801      next.setAttribute("data-hv-wired", "1");
802      safeAddEvent(next, "click", normalizeUsernameField, true);
803    }
804
805    var submit = $("submitButton");
806    if (submit && !submit.getAttribute("data-hv-wired")) {
807      submit.setAttribute("data-hv-wired", "1");
808      safeAddEvent(submit, "click", normalizeUsernameField, true);
809    }
810  }
811
812  // Single unified Observer for Paginated UI
813  function observeDom() {
814    if (window.__hvDomObserver) return;
815    try {
816      if (!window.MutationObserver) return;
817
818      window.__hvDomObserver = new MutationObserver(function () {
819        applyAccessibilityAndPlaceholders();
820        reorderFooterDom();
821        wireHandlers();
822      });
823
824      window.__hvDomObserver.observe(document.body || document.documentElement, {
825        childList: true,
826        subtree: true,
827        attributes: true,
828        attributeFilter: ["placeholder"]
829      });
830    } catch (e) {
831      // fail silent
832    }
833  }
834
835  function start() {
836    applyAccessibilityAndPlaceholders();
837    reorderFooterDom();
838    wireHandlers();
839    observeDom();
840    normalizeUsernameField();
841    log("[HV] onload.js initialized cleanly with accessibility enhancements");
842  }
843
844  if (document.readyState === "loading") {
845    document.addEventListener("DOMContentLoaded", start);
846  } else {
847    start();
848  }
849})();
850//]]>
851</script>
851
852
853
854    </body>
855</html> 
856

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.