<!doctypehtml><html dir=ltr xmlns=http://www.w3.org/1999/xhtml><head lang=en><meta http-equiv=X-UA-Compatible content="IE=edge"><meta content="text/html; charset=utf-8"http-equiv=Content-Type><meta name=viewport content="user-scalable=1,initial-scale=1,minimum-scale=1,maximum-scale=1"><meta name=apple-mobile-web-app-capable content=yes><meta name=format-detection content="telephone=no"><meta name=robots content=noindex,nofollow><link rel=manifest href={{{domainurl}}}manifest.json><link rel="shortcut icon"type=image/x-icon href={{{domainurl}}}favicon.ico><link keeplink=1 type=text/css href=styles/style.css media=screen rel=stylesheet title=CSS><link rel=apple-touch-icon href=/favicon-303x303.png><script src=scripts/common-0.0.1{{min}}.js></script><script keeplink=1 src=scripts/u2f-api{{min}}.js></script><title>{{{title}}} - Login</title><style>#body{background-color:#5f9ea0;background:linear-gradient(to bottom right,#369,#036)}#flink a:link{color:#c8c8c8}#flink a:visited{color:#c8c8c8}#flink a:hover{color:#c8c8c8}#flink a:active{color:#c8c8c8}#welcomeText a:link{color:#fff}#welcomeText a:visited{color:#fff}#welcomeText a:hover{color:#fff}#welcomeText a:active{color:#fff}</style><body id=body onload='"undefined"!=typeof startup&&startup()'class="arg_hide login"><div id=backgroundImage style="position:absolute;left:0;bottom:0;z-index:-1;height:60%;width:100%;opacity:.1;background-image:url(welcome.png);background-repeat:no-repeat;background-position:left bottom;background-size:contain"></div><table id=centralTable class=container style=height:100%;z-index:1><tr><td id=logincell>{{{titlehtml}}} <img id=loginPicture><div style="font-size:46px;font-family:Arial,Helvetica,sans-serif;font-weight:700;padding-bottom:10px;color:#c8c8c8;text-shadow:2px 2px 2px #000">{{{title1}}}<sup style=font-size:20px> {{{title2}}}</sup></div><div id=loginpanel style="display:none;box-shadow:1px 1px 4px #000"><form id=loginpanelform method=post><input type=hidden name=action value=login><div id=message1></div><div id=loginuserpassdiv style=display:none><table style=width:100%><tr><td><input id=username title=Käyttäjätunnus style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=username placeholder=Käyttäjätunnus maxlength=64 name=username required onchange=validateLogin(1) onkeyup=validateLogin(1,event)><tr><td><input id=password title=Salasana style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=current-password placeholder=Salasana type=password maxlength=256 name=password required onchange=validateLogin(2) onkeyup=validateLogin(2,event)><tr><td><div id=showPassHintLink title="Salasana Vihje"style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc;display:none><a onclick="return showPassHint(event)"href=# style=cursor:pointer>Näytä vihje</a></div><tr><td><input id=loginButton style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px onclick='submitButtonClicked("loginpanelform")'type=button value="Kirjaudu sisään"><tr id=topLanguageSelectRow style=display:none><td id=topLanguageSelect></table><div id=hrAccountDiv style=display:none><hr></div><div id=resetAccountDiv style=display:none;padding:2px><span id=resetAccountSpan>Unohditko käyttäjätunnuksen/salasanan?</span> <a onclick="return xgo(3,event)"href=# style=cursor:pointer>Nollaa tili</a>.</div><div id=newAccountDiv style=display:none;padding:2px;padding-top:10px>Eikö sinulla ole tiliä? <a onclick="return xgo(2,event)"href=# style=cursor:pointer>Luo yksi</a>.</div></div><input id=loginformargs name=urlargs type=hidden><div id=authStrategies style=display:none><hr id=loginuserpasshr style=display:none><div style=margin-bottom:8px>Kirjaudu sisään käyttämällä olemassa olevaa tiliä</div><a id=auth-twitter href=auth-twitter style=display:none><img src=images/login/twitter32.png srcset="images/login/twitter64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Kirjautuminen Twitterillä"></a><a id=auth-google href=auth-google style=display:none><img src=images/login/google32.png srcset="images/login/google64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Kirjautuminen Googlella"></a><a id=auth-github href=auth-github style=display:none><img src=images/login/github32.png srcset="images/login/github64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Kirjautuminen GitHubilla"></a><a id=auth-azure href=auth-azure style=display:none><img src=images/login/azure32.png srcset="images/login/azure64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Kirjautuminen Azuren avulla"></a><a id=auth-oidc href=auth-oidc style=display:none><img src=images/login/oidc32.png srcset="images/login/oidc64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Kirjaudu sisään OpenID Connectilla"></a><a id=auth-oidc-azure href=auth-oidc style=display:none><img src=images/login/azure32.png srcset="images/login/azure64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in with Azure using OpenID Connect"></a><a id=auth-oidc-google href=auth-oidc style=display:none><img src=images/login/google32.png srcset="images/login/google64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Sign-in with Google using OpenID Connect"></a><a id=auth-jumpcloud href=auth-jumpcloud style=display:none><img src=images/login/jumpcloud32.png srcset="images/login/jumpcloud64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Kirjautuminen JumpCloudilla"></a><a id=auth-intel href=auth-intel style=display:none><img src=images/login/intel32.png srcset="images/login/intel64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title="Kirjautuminen Intelin avulla"></a><a id=auth-saml href=auth-saml style=display:none><img src=images/login/generic32.png srcset="images/login/generic64.png 2x"loading=lazy width=32 height=32 style="margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer"title=Kertakirjautuminen></a></div></form></div><div id=createpanel style=display:none;position:relative><form id=createpanelform method=post><input type=hidden name=action value=createaccount><div id=message2></div><div><b>Tilin luominen</b></div><div id=passwordPolicyCallout style=display:none></div><table><tr id=nuUserRow><td id=nuUser align=right width=100>Käyttäjätunnus:<td><input id=ausername {{{autocomplete}}}=username name=username onchange=validateCreate(1) maxlength=64 onkeydown=haltReturn(event) onkeyup=validateCreate(1,event)><tr><td id=nuEmail align=right width=100>Sähköposti:<td><input id=aemail {{{autocomplete}}}=email inputmode=email name=email onchange=validateCreate(2) maxlength=256 onkeydown=haltReturn(event) onkeyup=validateCreate(2,event)><tr><td id=nuPass1 align=right>Salasana:<td><input id=apassword1 type=password name=password1 {{{autocomplete}}}=new-password maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(3,event) onkeyup=validateCreate(3,event)><tr><td id=nuPass2 align=right>Salasana:<td><input id=apassword2 type=password name=password2 {{{autocomplete}}}=new-password maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(4,event) onkeyup=validateCreate(4,event)><tr id=createPanelHint style=display:none><td id=nuHint align=right>Salasana Vihje:<td><input id=apasswordhint name=apasswordhint {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(5,event) onkeyup=validateCreate(5,event)><tr id=newAccountPass title="Anna tilin luontitunnus"><td id=nuToken align=right>Luontitunnus:<td><input id=anewaccountpass type=password name=anewaccountpass {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(6,event) onkeyup=validateCreate(6,event)><tr id=newAccountCaptchaImg title="CAPTCHA image"><td><td colspan=2><img src={{{newAccountCaptchaImage}}} loading=lazy><tr id=newAccountCaptcha title="Security check"><td id=nuCaptcha align=right>Security Check:<td><input id=anewaccountcaptcha name=anewaccountcaptcha {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validateCreate(7,event) onkeyup=validateCreate(7,event)><tr><td colspan=2><div style=float:right><input id=createButton type=button onclick='submitButtonClicked("createpanelform")'value="Luo käyttäjätunnus"disabled></div><div id=passWarning style=padding-top:6px></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Takaisin sisäänkirjautumiseen</a> <input id=createformargs name=urlargs type=hidden> <input id=createformcaptcha name=captchaargs type=hidden value={{{newAccountCaptcha}}}></form></div><div id=resetpanel style=display:none><form id=resetpanelform method=post><input type=hidden name=action value=resetaccount><div id=message3></div><div><b>Tilin palautus</b></div><table style=width:100%;margin-top:4px;margin-bottom:4px><tr><td><input id=remail title=Sähköposti style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc {{{autocomplete}}}=username placeholder=Sähköposti maxlength=256 name=email onchange=validateReset() onkeyup=validateReset(event)><tr><td><input id=eresetButton style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px type=button onclick='submitButtonClicked("resetpanelform")'value="Nollaa Tili"disabled></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Takaisin sisäänkirjautumiseen</a> <input id=resetformargs name=urlargs type=hidden></form></div><div id=tokenpanel style=display:none><form id=tokenpanelform method=post {{{autocomplete}}}=off><input type=hidden name=action value=tokenlogin> <input type=hidden name=hwstate value={{{hwstate}}}><div id=message4></div><table style=width:100%><tr><td><input id=tokenInput {{{autocomplete}}}=one-time-code title=Tunnus style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc placeholder=Tunnus maxlength=50 name=token onchange=checkToken(event) onpaste=checkToken(event) onkeyup=checkToken(event) onkeydown=checkToken(event)><br><input id=hwtokenInput name=hwtoken style=display:none><tr><td><div><input id=tokenOkButton style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px type=button onclick='submitButtonClicked("tokenpanelform")'value="Kirjaudu sisään"disabled></div><tr><td style=align-content:center;padding-top:10px><label id=tokenInputRememberLabel><input id=tokenInputRemember name=remembertoken type=checkbox><span id=tokenInputRememberSpan></span></label><tr id=2farow><td><hr><div><img id=securityKeyButton src=images/login/2fa-key-48.png srcset="images/login/2fa-key-96.png 2x"title="Käytä suojausavainta"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useSecurityKey(1)> <img id=smsKeyButton src=images/login/2fa-sms-48.png srcset="images/login/2fa-sms-96.png 2x"title=Tekstiviesti loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useSMSToken(1)> <img id=msgKeyButton src=images/login/2fa-messaging-48.png srcset="images/login/2fa-messaging-96.png 2x"title=Messaging loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useMsgToken(1)> <img id=emailKeyButton src=images/login/2fa-mail-48.png srcset="images/login/2fa-mail-96.png 2x"title=Sähköposti loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useEmailToken(1)> <img id=pushKeyButton src=images/login/2fa-push-48.png srcset="images/login/2fa-push-96.png 2x"title="Laitteen todennus"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=usePushToken(1)> <img id=duoKeyButton src=images/login/2fa-duo-48.png srcset="images/login/2fa-duo-96.png 2x"title="Duo Authentication"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useDuoToken(1)></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Takaisin sisäänkirjautumiseen</a> <input id=tokenformargs name=urlargs type=hidden></form></div><div id=resettokenpanel style=display:none><form id=resettokenpanelform method=post><input type=hidden name=action value=resetaccount><div id=message5></div><table style=width:100%><tr><td><input id=resetTokenInput {{{autocomplete}}}=one-time-code title=Tunnus style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px;background-color:#fff8cc placeholder=Tunnus maxlength=50 name=token onchange=resetCheckToken(event) onpaste=resetCheckToken(event) onkeyup=resetCheckToken(event) onkeydown=resetCheckToken(event)><br><input id=resetHwtokenInput name=hwtoken style=display:none><tr><td><div><input id=resetTokenOkButton style=box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:6px type=button onclick='submitButtonClicked("resettokenpanelform")'value="Kirjaudu sisään"disabled></div><tr id=2farow2><td colspan=2><hr><div><img id=securityKeyButton2 src=images/login/2fa-key-48.png srcset="images/login/2fa-key-96.png 2x"title="Käytä suojausavainta"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useSecurityKey(2)> <img id=smsKeyButton2 src=images/login/2fa-sms-48.png srcset="images/login/2fa-sms-96.png 2x"title=Tekstiviesti loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useSMSToken(2)> <img id=msgKeyButton2 src=images/login/2fa-msg-48.png srcset="images/login/2fa-msg-96.png 2x"title=Tekstiviesti loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useMsgToken(2)> <img id=emailKeyButton2 src=images/login/2fa-mail-48.png srcset="images/login/2fa-mail-96.png 2x"title=Sähköposti loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useEmailToken(2)> <img id=pushKeyButton2 src=images/login/2fa-push-48.png srcset="images/login/2fa-push-96.png 2x"title="Laitteen todennus"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=usePushToken(2)> <img id=duoKeyButton2 src=images/login/2fa-duo-48.png srcset="images/login/2fa-duo-96.png 2x"title="Duo Authentication"loading=lazy width=48 height=48 style="display:none;margin-left:3px;margin-right:3px;border-radius:3px;box-shadow:2px 2px 5px #000;cursor:pointer;background-color:#fff"onclick=useDuoToken(2)></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Takaisin sisäänkirjautumiseen</a> <input id=resettokenformargs name=urlargs type=hidden></form></div><div id=resetpasswordpanel style=display:none;position:relative><form id=resetpasswordpanelform method=post><input type=hidden name=action value=resetpassword><div id=message6></div><div id=rpasswordPolicyCallout style=display:none></div><table><tr><td id=rnuPass1 width=100 align=right>Salasana:<td><input id=rapassword1 type=password name=rpassword1 {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validatePassReset(3,event) onkeyup=validatePassReset(3,event)><tr><td id=rnuPass2 align=right>Salasana:<td><input id=rapassword2 type=password name=rpassword2 {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validatePassReset(4,event) onkeyup=validatePassReset(4,event)><tr id=resetpasswordpanelHint style=display:none><td id=rnuHint align=right>Salasana Vihje:<td><input id=rapasswordhint name=rpasswordhint {{{autocomplete}}}=off maxlength=256 onkeydown=haltReturn(event) onchange=validatePassReset(5,event) onkeyup=validatePassReset(5,event)><tr><td colspan=2><div style=float:right><input id=resetPassButton type=button onclick='submitButtonClicked("resetpasswordpanelform")'value="Nollaa Salasana"disabled></div><div id=rpassWarning style=padding-top:6px></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Takaisin sisäänkirjautumiseen</a> <input id=resetpasswordformargs name=urlargs type=hidden></form></div><div id=checkemailpanel style=display:none;position:relative><form id=checkemailpanelform method=post><input type=hidden name=action value=checkemail><div id=message7></div><table id=checkCheckOperations style=width:100%;display:none><tr><td><div id=unconfirmedEmail></div><br><tr><td><div><input id=changeEmailButton type=button value="Vaihda sähköpostiosoite"onclick=changeEmailAddress()> <input id=checkEmailButton2 type=button value="Lähetä vahvistussähköposti uudelleen"onclick=resentEmailConfirmation()> <input id=checkEmailButton type=button onclick='submitButtonClicked("checkemailpanelform")'style=display:none> <input id=checkEmailVal name=email type=hidden></div></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Takaisin sisäänkirjautumiseen</a> <input id=checkemailformargs name=urlargs type=hidden></form></div><div id=waitpushpanel style=display:none><form id=waitpushpanelform method=post><input type=hidden name=action value=pushlogin><div id=message8></div><table style=width:100%><tr><td style=align-content:center;padding-top:10px><img id=waitpushpanelimage src=images/login/push-150.png srcset="images/login/push-300.png 2x"style=opacity:.3 loading=lazy width=265 height=150><tr><td style=align-content:center;padding-top:10px><label id=tokenInputRememberLabel2><input id=tokenInputRemember2 name=remembertoken type=checkbox><span id=tokenInputRememberSpan2></span></label></table><hr><a onclick="return xgo(1,event)"href=# style=cursor:pointer>Takaisin sisäänkirjautumiseen</a> <input id=pushtokenformargs name=urlargs type=hidden> <input id=pushtokenInput name=hwstate type=hidden> <input id=pushOkButton onclick='submitButtonClicked("waitpushpanelform")'style=display:none></form></div><tr id=welcomeTextRow><td><div id=welcomeText style=color:#fff;text-align:center;margin-left:20px;margin-right:20px></div><tr id=bottomLanguageSelectRow style=display:none;text-align:center><td id=bottomLanguageSelect><tr style=height:20px><td><div><div id=flink style=float:right;margin-right:4px;color:#c8c8c8>{{{rootCertLink}}}&nbsp;<a href=terms>Ehdot ja yksityisyys</a></div><div id=flink style=margin-left:4px;color:#c8c8c8>{{{footer}}}</div></div></table><div id=dialog style=display:none><div id=dialogHeader><div id=id_dialogclose style=float:right;padding:5px;cursor:pointer onclick=setDialogMode()><b>X</b></div><div id=id_dialogtitle style=padding:5px></div><div style=width:100%;margin:6px></div></div><div id=dialogBody><div id=dialog1><div id=id_dialogMessage></div></div><div id=dialog2><div id=id_dialogOptions></div></div></div><div id=idx_dlgButtonBar><input id=idx_dlgCancelButton type=button value=Peruuta onclick=dialogclose(0)> <input id=idx_dlgOkButton type=button value=OK onclick=dialogclose(1)></div></div><script>var xxdialogMode,xxdialogFunc,xxdialogButtons,xxdialogTag,random="{{{randomlength}}}",welcomePictureFullScreen="true"===decodeURIComponent("{{{welcomePictureFullScreen}}}"),passlogin="{{{passlogin}}}",passhint="{{{passhint}}}",loginMode="{{{loginmode}}}",newAccount="{{{newAccount}}}",newAccountPass=parseInt("{{{newAccountPass}}}"),newAccountCaptcha="{{{newAccountCaptcha}}}",emailCheck="{{{emailcheck}}}",passRequirements="{{{passRequirements}}}",hardwareKeyChallenge=decodeURIComponent("{{{hkey}}}"),passRequirementsEx=null!=(passRequirements=""!=passRequirements?JSON.parse(decodeURIComponent(passRequirements)):{}).min||null!=passRequirements.max||null!=passRequirements.upper||null!=passRequirements.lower||null!=passRequirements.numeric||null!=passRequirements.nonalpha,features=parseInt("{{{features}}}"),welcomeText=decodeURIComponent("{{{welcometext}}}"),currentpanel=0,publicKeyCredentialRequestOptions=null,otpduo="true"===decodeURIComponent("{{{otpduo}}}"),otpemail="true"===decodeURIComponent("{{{otpemail}}}"),otpsms="true"===decodeURIComponent("{{{otpsms}}}"),otpmsg="true"===decodeURIComponent("{{{otpmsg}}}"),otppush="true"===decodeURIComponent("{{{otppush}}}"),autofido="true"===decodeURIComponent("{{{autofido}}}"),twoFactorCookieDays=parseInt("{{{twoFactorCookieDays}}}"),authStrategies="{{{authStrategies}}}".split(","),tokenTimeout=parseInt("{{{tokenTimeout}}}"),websocket=null,formSubmitted=!1,serverLangs="{{{renderLanguages}}}".split(","),loclist={af:"afrikaans",sq:"Albanialainen",ar:"Arabia (vakio)","ar-dz":"Arabia (Algeria)","ar-bh":"Arabia (Bahrain)","ar-eg":"Arabia (Egypti)","ar-iq":"Arabia (Irak)","ar-jo":"Arabia (Jordania)","ar-kw":"Arabia (Kuwait)","ar-lb":"Arabia (Libanon)","ar-ly":"Arabia (Libya)","ar-ma":"Arabia (Marokko)","ar-om":"Arabia (Oman)","ar-qa":"Arabia (Qatar)","ar-sa":"Arabia (Saudi-Arabia)","ar-sy":"Arabia (Syyria)","ar-tn":"Arabia (Tunisia)","ar-ae":"Arabia (U..E.)","ar-ye":"Arabia (Jemen)",an:"Aragonian",hy:"Armenian",as:"Assami",ast:"Asturian",az:"Azerbaidžanin",eu:"Baski",bg:"Bulgarialainen",be:"Valkovenäjä",bn:"Bengali",bs:"Bosnia",br:"Breton",my:"Burmalainen",ca:"Katalaani",ch:"Chamorro",ce:"Tšetšenian",zh:"Kiinalainen","zh-hk":"Kiinalainen (Hong Kong)","zh-cn":"Kiinalainen (PRC)","zh-sg":"Kiinalainen (Singapore)","zh-tw":"Kiinalainen (Taiwan)",cv:"Tšuvassi",co:"Korsikalainen",cr:"Cree",hr:"Kroatialainen",cs:"Tshekkiläinen",da:"Tanskalainen",nl:"Hollantilainen (standardi)","nl-be":"Hollantilainen (Belgialainen)",en:"Englanti","en-au":"Englanti (Australia)","en-bz":"Englanti (Belize)","en-ca":"Englanti (Kanada)","en-ie":"Englanti (Irlanti)","en-jm":"Englanti (Jamaika)","en-nz":"Englanti (Uusi-Seelanti)","en-ph":"Englanti (Filippiinit)","en-za":"Englanti (Etelä-Afrikka)","en-tt":"Englanti (Trinidad ja Tobago)","en-gb":"Englanti (Yhdistynyt kuningaskunta)","en-us":"Englanti (Yhdysvallat)","en-zw":"Englanti (Zimbabwe)",eo:"Esperanto",et:"Virolainen",fo:"Färsaarelainen",fa:"Persia (persia)",fj:"Fidzi",fi:"Suomalainen",fr:"Ranska (standardi)","fr-be":"Ranska (Belgia)","fr-ca":"Ranska (Kanada)","fr-fr":"Ranska (Ranska)","fr-lu":"Ranska (Luxemburg)","fr-mc":"Ranska (Monaco)","fr-ch":"Ranska (Sveitsi)",fy:"Friisiläinen",fur:"Friulilainen",gd:"Gaeli (Skotlantilainen)","gd-ie":"Gaeli (Irlantilainen)",gl:"Gaelinkielinen",ka:"Georgialainen",de:"Saksalainen (Standardi)","de-at":"Saksalainen (Itävalta)","de-de":"Saksalainen (Saksa)","de-li":"Saksalainen (Liechtenstein)","de-lu":"Saksalainen (Luxemburg)","de-ch":"Saksalainen (Sveitsi)",el:"Kreikkalainen",gu:"Gujurati",ht:"Haitilainen",he:"Heprealainen",hi:"Hindi",hu:"Unkarilainen",is:"Islantilainen",id:"Indonesialainen",iu:"Inuktitut",ga:"Irlantilainen",it:"Italialainen (Standardi)","it-ch":"Italialainen (Sveitsi)",ja:"Japanilainen",kn:"Kannada",ks:"Kashmiri",kk:"Kazakstan",km:"Khmer",ky:"Kirghiz",tlh:"Klingon",ko:"Korealainen","ko-kp":"Korealainen (Pohjois-Korea)","ko-kr":"Korealainen (Etelä-Korea)",la:"Latinalainen",lv:"Latvialainen",lt:"Liettualainen",lb:"Luxemburgilainen",mk:"FYRO Makedonialainen",ms:"Malaiji",ml:"Malajalam",mt:"Maltalainen",mi:"Maori",mr:"Marathi",mo:"Moldovalainen",nv:"Navajo",ng:"Ndonga",ne:"Nepali",no:"Norjalainen",nb:"Norjalainen (Bokmal)",nn:"Norjalainen (Nynorks)",oc:"Occitan",or:"Oriya",om:"Oromo","fa-ir":"Persia / Iran",pl:"Puolalainen",pt:"Portugalilainen","pt-br":"Portugalilainen (Brasilia)",pa:"Punjabi","pa-in":"Punjabi (Intia)","pa-pk":"Punjabi (Pakistan)",qu:"Ketšua",rm:"Retoromaani",ro:"Romania","ro-mo":"Romania (Moldova)",ru:"Venäläinen","ru-mo":"Venäläinen (Moldavia)",sz:"Saamen kieli",sg:"Sango",sa:"Sanskritin kieli",sc:"Sardinialainen",sd:"Sindhi",si:"Singhalese",sr:"Serbia",sk:"Slovakian",sl:"Sloveeni",so:"Somani",sb:"Sorbi",es:"Espanjalainen","es-ar":"Espanjalainen (Argentina)","es-bo":"Espanjalainen (Bolivia)","es-cl":"Espanjalainen (Chile)","es-co":"Espanjalainen (Kolumbia)","es-cr":"Espanjalainen (Costa Rica)","es-do":"Espanjalainen (Dominikaaninen tasavalta)","es-ec":"Espanjalainen (Ecuador)","es-sv":"Espanjalainen (El Salvador)","es-gt":"Espanjalainen (Guatemala)","es-hn":"Espanjalainen (Honduras)","es-mx":"Espanjalainen (Meksiko)","es-ni":"Espanjalainen (Nicaragua)","es-pa":"Espanjalainen (Panama)","es-py":"Espanjalainen (Paraguay)","es-pe":"Espanjalainen (Peru)","es-pr":"Espanjalainen (Puerto Rico)","es-es":"Espanjalainen (Espanja)","es-uy":"Espanjalainen (Uruguay)","es-ve":"Espanjalainen (Venezuela)",sx:"Sutu",sw:"Swahili",sv:"Ruotsalainen","sv-fi":"Ruotsalainen (Suomi)","sv-sv":"Ruotsalainen (Ruotsi)",ta:"Tamili",tt:"Tataari",te:"Teluga",th:"Thai",tig:"Tigre",ts:"Tsonga",tn:"Tswana",tr:"Turkkilainen",tk:"Turkmenia",uk:"Ukrainalainen",hsb:"Ylempi sorbi",ur:"Urdu",ve:"Venda",vi:"Vietnamilainen",vo:"Volapuk",wa:"Vallonia",cy:"Walesin",xh:"Xhosa",ji:"Jiddiš",zu:"Zulu"},loclistex={"zh-chs":"Kiinalainen (yksinkertaistettu)","zh-cht":"Kiinalainen perinteinen)"},showLanguageSelect="{{{showLanguageSelect}}}";function startup(){"true"==decodeURIComponent("{{{loginpicture}}}")&&(Q("loginPicture").src="loginlogo.png"),QV("welcomeTextRow",""!=welcomeText),QH("welcomeText",welcomeText),welcomePictureFullScreen&&(QS("backgroundImage").height="100%",QS("backgroundImage").opacity="1",QS("backgroundImage")["background-position"]="center center",QS("backgroundImage")["background-size"]="cover");var e=parseInt("{{{messageid}}}"),a=["","Salasanan nollaus viesti lähetetty, jos sähköposti osoite on kelvollinen.","Sähköposti lähetetty.","Sähköposti vahvistus vaaditaan, tarkista postilaatikkosi ja napsauta vahvistuslinkkiä.","Tekstiviesti lähetetty.","Ilmoitusta lähetetään ...","Message sent."],n=["Tiliä ei voitu luoda.","Tiliraja saavutettu.","Olemassa oleva tili tällä sähköpostiosoitteella.","Virheellinen tilin luontitunnus.","Käyttäjätunnus on jo olemassa.","Salasana hylätty, käytä toista salasanaa.","Virheellinen sähköpostiosoite.","Tiliä ei löytynyt.","Virheellinen tunnus, yritä uudelleen.","Sähköpostin lähettäminen epäonnistui.","Tili lukittu","Pääsy evätty.","Sisäänkirjautuminen epäonnistui, tarkista käyttäjänimi ja salasana.","Salasanan vaihtoa pyydetty.","IP-osoite estetty, yritä myöhemmin uudelleen.","Palvelinta ylläpidetään.","Laiteilmoituksen lähettäminen ei onnistu.","Invalid security check."];if(0<e){var t="";if(e<100&&e<a.length?t=a[e]:100<=e&&e-100<n.length&&(t=n[e-100]),""!=t)for(t=100<=e?'<span class="msg error"><b style=color:#8C001A>'+t+"<b></span><br /><br />":'<span class="msg success"><b>'+t+"</b></span><br /><br />",i=1;i<9;i++)QH("message"+i,t)}var o=JSON.parse("{{{flashErrors}}}");if(o&&0<o.length){t="";for(i=0;i<o.length;i++)o[i]&&(t+='<span class="msg error"><b style=color:#8C001A>'+o[i]+"<b></span><br /><br />");QH("message1",t),QV("message1",!0)}var s=parseUriArgs();if("top"===showLanguageSelect||"bottom"===showLanguageSelect){var i,l='<select id=d2langselect style="box-sizing:border-box;width:280px;border:0;border-radius:4px;padding:8px" onChange="changeLanguage()">';for(i in l+='<option value="*">Use Browser Language</option>',serverLangs){var r=serverLangs[i];l+='<option value="'+r+'"'+(s.lang==r?" selected":"")+">"+r+" - "+(loclist[r]||loclistex[r])+"</option>"}QH(showLanguageSelect+"LanguageSelect",l),"top"===showLanguageSelect&&(QS(showLanguageSelect+"LanguageSelect")["padding-top"]="5px"),QV(showLanguageSelect+"LanguageSelectRow",!0)}if(passlogin="true"==passlogin,1===s.passlogin&&(passlogin=!0),0===s.passlogin&&(passlogin=!1),QV("loginuserpassdiv",passlogin),QV("loginuserpasshr",passlogin),0<twoFactorCookieDays?(QV("tokenInputRememberLabel",!0),QH("tokenInputRememberSpan",format("Muista tämä laite {0} päivän ajan.",twoFactorCookieDays)),QV("tokenInputRememberLabel2",!0),QH("tokenInputRememberSpan2",format("Muista tämä laite {0} päivän ajan.",twoFactorCookieDays))):(QV("tokenInputRememberLabel",!1),QV("tokenInputRememberLabel2",!1)),0<window.location.href.indexOf("?")&&(a=window.location.href.substring(window.location.href.indexOf("?")),Q("loginformargs").value=a,Q("createformargs").value=a,Q("resetformargs").value=a,Q("tokenformargs").value=a,Q("pushtokenformargs").value=a,Q("resettokenformargs").value=a,Q("resetpasswordformargs").value=a,Q("checkemailformargs").value=a),0==(32&features)){n=null;try{n=top.location.toString().toLowerCase()}catch(e){}if(top!=self&&(null==n||0==top.active))return void(top.location=self.location)}if(2097152&features&&(Q("username").placeholder="Sähköposti",QH("resetAccountSpan","Unohtuiko salasana?"),QV("nuUserRow",!1)),QV("createPanelHint",!0===passRequirements.hint),QV("resetpasswordpanelHint",!0===passRequirements.hint),""!=authStrategies&&(QV("authStrategies",!0),0<=authStrategies.indexOf("twitter")&&QV("auth-twitter",!0),0<=authStrategies.indexOf("google")&&QV("auth-google",!0),0<=authStrategies.indexOf("github")&&QV("auth-github",!0),0<=authStrategies.indexOf("azure")&&QV("auth-azure",!0),0<=authStrategies.indexOf("oidc")&&QV("auth-oidc",!0),0<=authStrategies.indexOf("oidc-azure")&&QV("auth-oidc-azure",!0),0<=authStrategies.indexOf("oidc-google")&&QV("auth-oidc-google",!0),0<=authStrategies.indexOf("jumpcloud")&&QV("auth-jumpcloud",!0),0<=authStrategies.indexOf("intel")&&QV("auth-intel",!0),0<=authStrategies.indexOf("saml"))&&QV("auth-saml",!0),validateCreate(),0!=loginMode.length?go(parseInt(loginMode)):go(1),QV("newAccountDiv","1"===newAccount||"true"===newAccount),null!=passhint&&0<passhint.length&&QV("showPassHintLink",!0),QV("newAccountPass",1==newAccountPass),QV("newAccountCaptcha",""!=newAccountCaptcha),QV("newAccountCaptchaImg",""!=newAccountCaptcha),QV("resetAccountDiv","true"==emailCheck),QV("hrAccountDiv","true"==emailCheck||1==newAccountPass),"4"==loginMode){0<tokenTimeout&&setTimeout(function(){Q("hwtokenInput").value="**timeout**",QE("tokenOkButton",!0),Q("tokenOkButton").click()},tokenTimeout);try{hardwareKeyChallenge=0<hardwareKeyChallenge.length?JSON.parse(hardwareKeyChallenge):null}catch(e){hardwareKeyChallenge=null}var u=null!=hardwareKeyChallenge&&"webAuthn"==hardwareKeyChallenge.type,c=otpemail&&2!=e&&4!=e&&6!=e,p=otpsms&&2!=e&&4!=e&&6!=e,d=otpmsg&&2!=e&&4!=e&&6!=e,g=otppush&&2!=e&&4!=e&&6!=e,m=otpduo&&2!=e&&4!=e&&6!=e;QV("securityKeyButton",u),QV("emailKeyButton",c),QV("smsKeyButton",p),QV("msgKeyButton",d),QV("pushKeyButton",g),QV("duoKeyButton",m),QV("2farow",u||c||p||d||g||m),autofido&&u&&setTimeout(function(){useSecurityKey(1)},300)}if("5"==loginMode){0<tokenTimeout&&setTimeout(function(){Q("hwtokenInput").value="**timeout**",QE("tokenOkButton",!0),Q("tokenOkButton").click()},tokenTimeout);try{hardwareKeyChallenge=0<hardwareKeyChallenge.length?JSON.parse(hardwareKeyChallenge):null}catch(e){hardwareKeyChallenge=null}u=null!=hardwareKeyChallenge&&"webAuthn"==hardwareKeyChallenge.type,c=otpemail&&2!=e&&4!=e&&6!=e,p=otpsms&&2!=e&&4!=e&&6!=e,d=otpmsg&&2!=e&&4!=e&&6!=e,g=otppush&&2!=e&&4!=e&&6!=e,m=otpduo&&2!=e&&4!=e&&6!=e;QV("securityKeyButton2",u),QV("emailKeyButton2",c),QV("smsKeyButton2",p),QV("msgKeyButton2",d),QV("pushKeyButton2",g),QV("duoKeyButton2",m),QV("2farow2",u||c||p||d||g||m),autofido&&u&&setTimeout(function(){useSecurityKey(2)},300)}"8"==loginMode&&((websocket=new WebSocket(passhint)).onopen=function(e){QS("waitpushpanelimage").opacity="1"},websocket.onmessage=function(e){"string"!=typeof e.data&&this.close();var a=null;try{a=JSON.parse(e.data)}catch(e){}!0===a.sent?QH("message8",'<span class="msg success"><b>'+format("Pyyntö lähetetty, {0}.",a.code)+"</b></span><br /><br />"):!1===a.sent?(QH("message8",'<span class="msg error"><b style=color:#8C001A>Pyynnön lähettäminen epäonnistui.<b></span><br /><br />'),QV("tokenInputRememberLabel2",!1),this.close()):!0===a.approved?(this.close(),QV("tokenInputRememberLabel2",!1),QH("message8",'<span class="msg success"><b>Pyyntö hyväksytty.</b></span><br /><br />'),Q("pushtokenInput").value=a.token,Q("pushOkButton").click()):(QH("message8",'<span class="msg error"><b style=color:#8C001A>Pääsy hylätty.<b></span><br /><br />'),QV("tokenInputRememberLabel2",!1),this.close())},websocket.onclose=function(e){QS("waitpushpanelimage").opacity="0.3"},websocket.onerror=function(e){QH("message8",'<span class="msg error"><b style=color:#8C001A>Yhteysvirhe<b></span><br /><br />'),QS("waitpushpanelimage").opacity="0.5"})}function changeLanguage(){var e=Q("d2langselect").value,a=new URLSearchParams(window.location.search),e=("*"==e?a.delete("lang"):a.set("lang",e),window.location.pathname+"?"+a.toString());window.location.href=e}function useSecurityKey(a){if(null!=hardwareKeyChallenge&&"webAuthn"==hardwareKeyChallenge.type){"string"==typeof hardwareKeyChallenge.challenge&&(hardwareKeyChallenge.challenge=Uint8Array.from(atob(hardwareKeyChallenge.challenge),function(e){return e.charCodeAt(0)}).buffer),publicKeyCredentialRequestOptions={challenge:hardwareKeyChallenge.challenge,allowCredentials:[],timeout:hardwareKeyChallenge.timeout};for(var e=0;e<hardwareKeyChallenge.keyIds.length;e++)publicKeyCredentialRequestOptions.allowCredentials.push({id:Uint8Array.from(atob(hardwareKeyChallenge.keyIds[e]),function(e){return e.charCodeAt(0)}),type:"public-key",transports:["usb","ble","nfc","internal"]});navigator.credentials.get({publicKey:publicKeyCredentialRequestOptions}).then(function(e){e={id:btoa(String.fromCharCode.apply(null,new Uint8Array(e.rawId))),clientDataJSON:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.clientDataJSON))),userHandle:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.userHandle))),signature:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.signature))),authenticatorData:btoa(String.fromCharCode.apply(null,new Uint8Array(e.response.authenticatorData)))};1==a?(Q("hwtokenInput").value=JSON.stringify(e),QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==a&&(Q("resetHwtokenInput").value=JSON.stringify(e),QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())},function(e){console.log("credentials-get error",e)})}}function useEmailToken(e){1==otpemail&&setDialogMode(1,"Suojattu kirjautuminen",3,useEmailKeyEx,"Lähetetäänkö tunnus rekisteröityyn sähköpostiosoitteeseen?",e)}function useEmailKeyEx(e,a){1==a?(Q("hwtokenInput").value="**email**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==a&&(Q("resetHwtokenInput").value="**email**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function useSMSToken(e){1==otpsms&&setDialogMode(1,"Suojattu kirjautuminen",3,useSMSTokenEx,"Lähetetäänkö tunnus rekisteröityyn puhelinnumeroon?",e)}function useSMSTokenEx(e,a){1==a?(Q("hwtokenInput").value="**sms**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==a&&(Q("resetHwtokenInput").value="**sms**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function useMsgToken(e){1==otpmsg&&setDialogMode(1,"Suojattu kirjautuminen",3,useMsgTokenEx,"Send token to messaging application?",e)}function useMsgTokenEx(e,a){1==a?(Q("hwtokenInput").value="**msg**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==a&&(Q("resetHwtokenInput").value="**msg**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function usePushToken(e){1==e?(Q("hwtokenInput").value="**push**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==e&&(Q("resetHwtokenInput").value="**push**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function useDuoToken(e){1==e?(Q("hwtokenInput").value="**duo**",QE("tokenOkButton",!0),Q("tokenOkButton").click()):2==e&&(Q("resetHwtokenInput").value="**duo**",QE("resetTokenOkButton",!0),Q("resetTokenOkButton").click())}function showPassHint(e){return messagebox("Salasana Vihje",passhint),haltEvent(e),!1}function xgo(e,a){return QV("message1",!1),QV("message2",!1),QV("message3",!1),QV("message4",!1),QV("message5",!1),QV("message6",!1),QV("message7",!1),go(e),haltEvent(a),!1}function go(e){currentpanel=e,setDialogMode(0),QV("showPassHintLink",!1),QV("loginpanel",1==e),QV("createpanel",2==e),QV("resetpanel",3==e),QV("tokenpanel",4==e),QV("resettokenpanel",5==e),QV("resetpasswordpanel",6==e),QV("checkemailpanel",7==e),QV("waitpushpanel",8==e),1==e&&Q("username").focus(),2==e&&(2097152&features?Q("aemail"):Q("ausername")).focus(),3==e&&Q("remail").focus(),4==e&&Q("tokenInput").focus(),5==e&&Q("resetTokenInput").focus(),6==e&&Q("rapassword1").focus(),7==e&&(QH("unconfirmedEmail",passhint),QV("checkCheckOperations",""!=Q("unconfirmedEmail").innerHTML),QH("checkEmailVal",passhint))}function submitButtonClicked(e){formSubmitted||(formSubmitted=!0,document.getElementById(e).submit())}function validateLogin(e,a){setTimeout(function(){setDialogMode(0),null!=a&&13==a.keyCode&&(1==e&&""!=Q("username").value?Q("password").focus():2==e&&""!=Q("password").value&&Q("loginButton").click()),null!=a&&haltEvent(a)},100)}function validateCreate(e,a){setDialogMode(0);var n=!1,n=!!(2097152&features)||0<Q("ausername").value.length&&-1==Q("ausername").value.indexOf(" ")&&-1==Q("ausername").value.indexOf('"')&&-1==Q("ausername").value.indexOf(","),t=1==validateEmail(Q("aemail").value),o=0<Q("apassword1").value.length,s=0<Q("apassword2").value.length&&Q("apassword2").value==Q("apassword1").value,i=0==newAccountPass||0<Q("anewaccountpass").value.length,l=""==newAccountCaptcha||0<Q("anewaccountcaptcha").value.length,r=n&&t&&o&&s&&i;QS("nuUser").color=n?"black":"#7b241c",QS("nuEmail").color=t?"black":"#7b241c",QS("nuPass1").color=o?"black":"#7b241c",QS("nuPass2").color=s?"black":"#7b241c",QS("nuToken").color=i?"black":"#7b241c",QS("nuCaptcha").color=l?"black":"#7b241c",""==Q("apassword1").value?(QH("passWarning",""),QV("passwordPolicyCallout",!1)):passRequirementsEx?0==checkPasswordRequirements(Q("apassword1").value,passRequirements)?(r=!1,QS("nuPass1").color="#7b241c",QS("nuPass2").color="#7b241c",QH("passWarning","<div style=color:red;cursor:pointer onclick=showPasswordPolicy()><b>Salasana käytäntö</b><div>"),QV("passwordPolicyCallout",!0),QH("passwordPolicyCallout",passwordPolicyText(Q("apassword1").value))):(QH("passWarning",""),QV("passwordPolicyCallout",!1)):80<=(i=checkPasswordStrength(Q("apassword1").value))?QH("passWarning","<span style=color:green><b>Vahva Salasana</b><span>"):60<=i?QH("passWarning","<span style=color:blue><b>Hyvä salasana</b><span>"):QH("passWarning","<span style=color:red><b>Heikko Salasana</b><span>"),null!=a&&13==a.keyCode&&(1==e&&n&&Q("aemail").focus(),2==e&&t&&Q("apassword1").focus(),3==e&&o&&Q("apassword2").focus(),4==e&&s&&(!0===passRequirements.hint?Q("apasswordhint").focus():e=5),5==e&&(1==newAccountPass?Q("anewaccountpass").focus():e=6),6==e&&(""!=newAccountCaptcha?Q("anewaccountcaptcha").focus():e=7),7==e)&&Q("createButton").click(),null!=a&&haltEvent(a),QE("createButton",r)}function validatePassReset(e,a){setDialogMode(0);var n=0<Q("rapassword1").value.length,t=0<Q("rapassword2").value.length&&Q("rapassword2").value==Q("rapassword1").value,o=n&&t;QS("rnuPass1").color=n?"black":"#7b241c",QS("rnuPass2").color=t?"black":"#7b241c",""==Q("rapassword1").value?(QH("rpassWarning",""),QV("rpasswordPolicyCallout",!1)):passRequirementsEx?0==checkPasswordRequirements(Q("rapassword1").value,passRequirements)?(o=!1,QS("rnuPass1").color="#7b241c",QS("rnuPass2").color="#7b241c",QH("rpassWarning","<div style=color:red;cursor:pointer onclick=showPasswordPolicy()><b>Salasana käytäntö</b><div>"),QV("rpasswordPolicyCallout",!0),QH("rpasswordPolicyCallout",passwordPolicyText(Q("rapassword1").value))):(QH("rpassWarning",""),QV("rpasswordPolicyCallout",!1)):80<=(n=checkPasswordStrength(Q("rapassword1").value))?QH("rpassWarning","<span style=color:green><b>Vahva Salasana</b><span>"):60<=n?QH("rpassWarning","<span style=color:blue><b>Hyvä salasana</b><span>"):QH("rpassWarning","<span style=color:red><b>Heikko Salasana</b><span>"),null!=a&&13==a.keyCode&&(2==e&&Q("rapassword1").focus(),3==e&&Q("rapassword2").focus(),4==e&&Q("rapasswordhint").focus(),6==e)&&Q("resetPassButton").click(),null!=a&&haltEvent(a),QE("resetPassButton",o)}function passwordPolicyText(e){var a="<div style=text-align:left>",n=strCount(e);return passRequirements.min&&(null==e||e.length<passRequirements.min)&&(a+=format("Vähimmäispituus {0}",passRequirements.min)+"<br />"),passRequirements.max&&(null==e||e.length>passRequirements.max)&&(a+=format("Enimmäispituus {0}",passRequirements.max)+"<br />"),passRequirements.upper&&(null==e||n.upper<passRequirements.upper)&&(a+=format("{0} isot kirjaimet",passRequirements.upper)+"<br />"),passRequirements.lower&&(null==e||n.lower<passRequirements.lower)&&(a+=format("{0} pienet kirjaimet",passRequirements.lower)+"<br />"),passRequirements.numeric&&(null==e||n.numeric<passRequirements.numeric)&&(a+=format("{0} numeerinen",passRequirements.numeric)+"<br />"),passRequirements.nonalpha&&(null==e||n.nonalpha<passRequirements.nonalpha)&&(a+=format("{0} ei-aakkosnumeerinen",passRequirements.nonalpha)+"<br />"),a+="</div>"}function showPasswordPolicy(){messagebox("Salasana käytäntö",passwordPolicyText())}function validateReset(e){setDialogMode(0);var a=validateEmail(Q("remail").value);QE("eresetButton",a),null!=e&&13==e.keyCode&&1==a&&Q("eresetButton").click(),null!=e&&haltEvent(e)}function checkPasswordStrength(e){var a=0,n={},t=0,o={digits:/\d/.test(e),lower:/[a-z]/.test(e),upper:/[A-Z]/.test(e),nonWords:/\W/.test(e)};if(!e)return 0;for(var s,i=0;i<e.length;i++)n[e[i]]=(n[e[i]]||0)+1,a+=5/n[e[i]];for(s in o)t+=1==o[s]?1:0;return parseInt(a+10*(t-1))}function checkPasswordRequirements(e,a){return null==a||""==a||"object"!=typeof a||!(a.min&&e.length<a.min||a.max&&e.length>a.max||(e=strCount(e),a.numeric&&e.numeric<a.numeric)||a.lower&&e.lower<a.lower||a.upper&&e.upper<a.upper||a.nonalpha&&e.nonalpha<a.nonalpha)}function strCount(e){var a={numeric:0,lower:0,upper:0,nonalpha:0};if("string"==typeof e)for(var n=0;n<e.length;n++)/\d/.test(e[n])&&a.numeric++,/[a-z]/.test(e[n])&&a.lower++,/[A-Z]/.test(e[n])&&a.upper++,/\W/.test(e[n])&&a.nonalpha++;return a}function checkToken(e){var a=Q("tokenInput").value,n=a.split(" ").join(""),a=(a!=n&&(Q("tokenInput").value=n),6==Q("tokenInput").value.length||8==Q("tokenInput").value.length||44==Q("tokenInput").value.length);QE("tokenOkButton",a),a&&null!=e&&13==e.keyCode&&submitButtonClicked("tokenpanelform")}function resetCheckToken(e){var a=Q("resetTokenInput").value,n=a.split(" ").join(""),a=(a!=n&&(Q("resetTokenInput").value=n),6==Q("resetTokenInput").value.length||8==Q("resetTokenInput").value.length||44==Q("resetTokenInput").value.length);QE("resetTokenOkButton",a),a&&null!=e&&13==e.keyCode&&submitButtonClicked("resettokenpanelform")}function changeEmailAddress(){setDialogMode(1,"Sähköpostivarmistus",3,changeEmailAddressEx,addHtmlValue("Sähköposti",'<input id=dp1email style=width:230px maxlength=256 value="'+Q("unconfirmedEmail").innerHTML+'" {{{autocomplete}}}=off onchange=validateEmailAddress() onkeyup=validateEmailAddress() />')),validateEmailAddress()}function validateEmailAddress(){QE("idx_dlgOkButton",1==validateEmail(Q("dp1email").value))}function changeEmailAddressEx(){Q("checkEmailVal").value=Q("dp1email").value,QH("unconfirmedEmail",Q("dp1email").value),Q("checkEmailButton").click()}function resentEmailConfirmation(){Q("checkEmailVal").value=Q("unconfirmedEmail").innerHTML,Q("checkEmailButton").click()}var xxcurrentView=0;function setDialogMode(e,a,n,t,o,s){xxdialogMode=e,xxdialogFunc=t,xxdialogButtons=n,xxdialogTag=s,QE("idx_dlgOkButton",!0),QV("idx_dlgOkButton",1&n),QV("idx_dlgCancelButton",2&n),QV("id_dialogclose",2&n||8&n),QV("idx_dlgButtonBar",7&n),a&&QH("id_dialogtitle",a);for(var i=1;i<24;i++)QV("dialog"+i,i==e);QV("dialog",e),o&&(2==e?QH("id_dialogOptions",o):QH("id_dialogMessage",o))}function dialogclose(e){var a=xxdialogFunc,n=xxdialogButtons,t=xxdialogTag;setDialogMode(),(8&n||e)&&a&&a(e,t)}function messagebox(e,a){QH("id_dialogMessage",a),setDialogMode(1,e,1)}function statusbox(e,a){QH("id_dialogMessage",a),setDialogMode(1,e)}function getDocWidth(){return window.innerWidth||(document.documentElement&&document.documentElement.clientWidth&&0!=document.documentElement.clientWidth?document.documentElement:document.getElementsByTagName("body")[0]).clientWidth}function haltEvent(e){return e.preventDefault&&e.preventDefault(),e.stopPropagation&&e.stopPropagation(),!1}function haltReturn(e){13==e.keyCode&&haltEvent(e)}function validateEmail(e){return/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(e)}function putstore(e,a){try{"undefined"!=typeof localStorage&&localStorage.setItem(e,a)}catch(e){}}function getstore(e,a){try{var n;return"undefined"==typeof localStorage?a:null==(n=localStorage.getItem(e))?a:n}catch(e){return a}}function format(e){var n=Array.prototype.slice.call(arguments,1);return e.replace(/{(\d+)}/g,function(e,a){return void 0!==n[a]?n[a]:e})}function addTextLink(e,a,n){var t=a.toLowerCase().indexOf(e.toLowerCase());return-1==t?a:a.substring(0,t)+'<a href="'+n+'">'+e+"</a>"+a.substring(t+e.length)}function addHtmlValue(e,a){return"<table><td style=width:120px;text-align:left>"+e+"<td><b>"+a+"</b></table>"}</script>