window.onload = function () { // If we are replacing the current window with the logon page, initialize the logon page UI now // if (a_fRC) initLogon(); // Otherwise we need to find the window to replace with the logon page and redirect that window // else redir(); }; /// /// Initializes the logon page /// function initLogon() { try { // // we don't call document.execCommand("ClearAuthenticationCache","false"); anymore. As a part of the Pending-Notification // infrastructure, we are making a change to make sure startpage does not get loaded more than once. This solution is cookie // based. This execCommand was clearing all cookies in the scenario when a user logged on from a child window during an // FBA timeout. We do not want that to happen anymore. If this breaks anything, we may need to consider a different solution. // // Old Comments: // If the "Clear the Authentication Cache" flag is set to true and // we are coming from the logoff page , clear the cache. See bug 41770 and 5840 for details. // // Logoff the S-Mime control. // LogoffMime(); } catch (e) { } // Check for username cookie // var re = /(^|; )logondata=acc=([0|1])&lgn=([^;]+)(;|$)/; var rg = re.exec(document.cookie); if (rg) { // Fill in username, set security to private, and restore the "use basic" selection // gbid("username").value = rg[3]; try { var signInErrorElement = gbid("signInErrorDiv"); if (signInErrorElement) { signInErrorElement.focus(); } else { gbid("password").focus(); } } catch (e) {} if (gbid("chkPrvt") && !gbid("chkPrvt").checked) { gbid("chkPrvt").click(); } if (rg[2] == "1" && gbid("chkBsc")) // chkBsc doesn't exist if the request comes from ECP gbid("chkBsc").click(); } else { // The variable g_fFcs is set to false when the password gains focus, // so that we don't accidentally set focus to the username field while // the user is typing their password // if (g_fFcs) { try { gbid("username").focus(); } catch (e) { } } } // OWA Premium currently supports // IE 7+, Safari 3+, Firefox 3+ for Windows / Mac if (IsOwaPremiumBrowser() && gbid("chkBsc")) // chkBsc doesn't exist if the request comes from ECP gbid("chkBsc").disabled = false; // Are cookies enabled? // var sCN = "cookieTest"; document.cookie = sCN + "=1"; var cookiesEnabled = document.cookie.indexOf(sCN + "=") != -1; if (cookiesEnabled == false) { shw(gbid("cookieMsg")); hd(gbid("lgnDiv")); } // Show the public/private warning message clkSec(); } /// /// Finds the frame we want to load the logon page into, and then loads it there /// function redir() { var o = window; // If we're in a dialog, open a logon window and close the dialog - this // basically inlines a version of opnWin() so that we don't need to include // uglobal.js in logon.aspx // try { if (o.dialogArguments) { var sWN = new String(Math.round(Math.random() * 100000)); var sF = "toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=1,resizable=1,width=800,height=600"; var iT = Math.round((screen.availHeight - 600) / 2); var iL = Math.round((screen.availWidth - 800) / 2); sF += ",top=" + iT + ",left=" + iL; // Fix for E12 14838. Need to open this window from the window that opened us, because opening it from this dialog // which we are about to close can cause the auth cookies to not propagate to the window that opened this dialog. // var op = o.dialogArguments.opener; try { if (op) op.open(a_sCW, sWN, sF); } catch (e) { } o.close(); return; } } catch (e) { } // The url to redirect to after logon // var sUrl = a_sUrl; // Find the outermost OWA frame // while (1) { try { // Try to move up one window/frame // if (!(o.frameElement && o.frameElement.ownerDocument)) break; var oF = o.frameElement.ownerDocument.parentWindow || // IE name o.frameElement.ownerDocument.defaultView; // W3C name // If we're not in an OWA/ECP window, we've found the frame to replace // if (!oF || (!oF.g_fOwa && !oF.g_fEcp)) break; // Move up a frame // o = oF; // We're replacing something other than the current frame, we'll just // log back in to the default start page if the frame doesn't provide a url // for relogon. The frame should provide a global method GetReloadUrl // if it wants to keep current state. // $NOTES: ECP needs to keep the current frame state after re-logon. sUrl = o.GetReloadUrl ? "&url=" + encodeURIComponent(o.GetReloadUrl()) : ""; } // Either we're at the top, or access was denied - either way, stop // catch (e) { break; } } // See if the window was opened by another window // try { var oW = o.opener; // If it was opened by another OWA/ECP window, take it over // if (oW && (oW.g_fOwa || oW.g_fEcp)) { // Center and resize the window // var iX = Math.round((screen.availWidth - 800) / 2); var iY = Math.round((screen.availHeight - 600) / 2); o.moveTo(iX, iY); o.resizeTo(800, 600); // Close the window after logging in // sUrl = "&url=" + encodeURIComponent(a_sCW); } } // We don't have access to the opener window, so it couldn't be part of OWA // catch (e) { } // Redirect the window // if (o.navigate) o.navigate(a_sLgn + sUrl); else o.location = a_sLgn + sUrl; } /// /// Show an element /// /// Element to show function shw(o) { o.style.display = ""; } /// /// Hide an element /// /// Element to hide function hd(o) { o.style.display = "none"; } /// /// OnClick handler for the show private explanation /// function clkSecExp(id) { var o = gbid(id); if (o.tagName == "IMG") o = o.parentNode; switch (o) { case gbid("lnkShwSec"): hd(gbid("lnkShwSec")); shw(gbid("lnkHdSec")); shw(gbid("prvtExp")); gbid("lnkHdSec").focus(); break; case gbid("lnkHdSec"): shw(gbid("lnkShwSec")); hd(gbid("lnkHdSec")); hd(gbid("prvtExp")); gbid("lnkShwSec").focus(); break; } } /// /// onkeydown handler for the show private explanation /// function kdSecExp(id) { // When user press space bar, we shall treat it as click. if (window.event.keyCode == 32) { clkSecExp(id); } } /// /// OnClick handler for the security radio buttons /// function clkSec() { if (gbid("chkPrvt") == null) { // If the private checkbox is not present in the page there is nothing we should do here // return; } // Display/hide the warning message // var c = gbid("chkPrvt").checked; gbid("prvtWrn").style.display = c ? "" : "none"; // Update flags and username cookie // if (c) { document.logonForm["flags"].value |= 4; } else { document.logonForm["flags"].value &= ~4; // Remove the cookie by expiring it // var oD = new Date(); oD.setTime(oD.getTime() - 9999); document.cookie = "logondata=; expires=" + oD.toUTCString(); document.cookie = "PrivateComputer=; path=/; expires=" + oD.toUTCString(); } } /// /// OnClick handler for the use owa basic checkbox /// function clkBsc() { // Display/hide the warning message // var c = gbid("chkBsc").checked; gbid("bscExp").style.display = c ? "" : "none"; if (c) document.logonForm.flags.value |= 1; else document.logonForm.flags.value &= ~1; } function checkSubmit(e) { if (e && e.keyCode == 13) { // Since we are explicitly handling the click prevent the default implicit submit if (e.preventDefault) { e.preventDefault(); } clkLgn(); } } /// /// OnClick handler for the logon button /// function clkLgn() { // Add performance marker for Logon page as the item name defined in the spec: // http://exweb/14/Specs/E14 Spec Library/Client side perf marker definition.xlsx // addPerfMarker("Logon.Start"); var p = false; if (gbid("chkPrvt")) { p = p | gbid("chkPrvt").checked; } else { p = true; } // If security is set to private, add a cookie to persist username and basic setting // Cookie format: logondata=acc=<1 or 0>&lgn= // if (p) { // Calculate the expires time for two weeks // var oD = new Date(); oD.setTime(oD.getTime() + 2 * 7 * 24 * 60 * 60 * 1000); var sA = "acc=" + (gbid("chkBsc") && gbid("chkBsc").checked ? 1 : 0); var sL = "lgn=" + gbid("username").value; document.cookie = "logondata=" + sA + "&" + sL + "; expires=" + oD.toUTCString(); document.cookie = "PrivateComputer=true; path=/; expires=" + oD.toUTCString(); } if (gbid("showPasswordCheck").checked) { passwordElement = gbid("password"); passwordTextElement = gbid("passwordText"); passwordElement.value = passwordTextElement.value; } // We clean the post back cookie in order to indicate that the credentials post is legitimate (and not history postback) // document.cookie = "PBack=0; path=/"; document.logonForm.submit(); } /// /// OnClick handler for the retry button /// function clkRtry() { window.location.reload(); } /// /// OnClick handler for the ok button after changing password (will go to owa/) /// function clkReLgn() { window.location.href = '../'; } /// /// GetElementByID from Document /// /// Id of the Element function gbid(s) { return document.getElementById(s); } /// /// Is the Client IE 7, Safari 3, Firefox 3 or Above /// Note The rules should match owa\bin\core\Utlities.cs@IsDownLevelClient /// function IsOwaPremiumBrowser() { var ua = navigator.userAgent; var av = navigator.appVersion; var mac = (av.indexOf('Mac') != -1); var win = ((av.indexOf('Win') != -1) || (av.indexOf('NT') != -1)); // If you change the follow browser check logic, change utility.js as well. // We have duplicate logic because otherwise logon page must include more code than necessary. // var ie = (ua.indexOf("MSIE ") != -1); var firefox = (ua.indexOf("Firefox/") != -1 && ua.indexOf("Gecko/") != -1 && Array.every); var safari = (ua.indexOf("Safari") != -1 && ua.indexOf("WebKit") != -1); var version = 2.0; if (ie) { version = parseFloat(ua.replace(/^.*MSIE /, '')); } else if (firefox) { version = parseFloat(ua.replace(/^.*Firefox\//, '')); } else if (safari) { version = parseFloat(ua.replace(/^.*Version\//, '')); } else { version = parseInt(av); } if (win) { if (ie) return (version >= 7.0); else if (safari) return (version >= 3.0); else if (firefox) return (version >= 3.0); } else if (mac) { if (safari) return (version >= 2.0); else if (firefox) return (version >= 3.0); } return false; } /// /// Convert an error code to HRESULT. /// function hres(iErr) { return iErr + 0xffffffff + 1; } /// /// Log off S-MIME control if it presents. /// function LogoffMime() { try { if ((typeof (mimeLogoffE2k3) != "undefined" && null != mimeLogoffE2k3) && IsMimeCtlInst("MimeBhvr.MimeCtlVer")) mimeLogoffE2k3.Logoff(); if ((typeof (mimeLogoffE2k7SP1) != "undefined" && null != mimeLogoffE2k7SP1) && IsMimeCtlInst("OwaSMime.MimeCtlVer")) mimeLogoffE2k7SP1.Logoff(); if ((typeof (mimeLogoffE2k9) != "undefined" && null != mimeLogoffE2k9) && IsMimeCtlInst("OwaSMime2.MimeCtlVer")) mimeLogoffE2k9.Logoff(); } catch (e) { } } /// /// Add performance marker which can write ETW trace for clicking logon /// /// Identify string to say start clicking logon function addPerfMarker(sItemName) { try { if (window.msWriteProfilerMark) { window.msWriteProfilerMark(sItemName); } } catch (e) { // We don't care any exception caused by test code in product, swallow it } } // // NOTE: flogon.js does not contain a call to stJS("flogon.js"). This is because flogon.js is loaded at logon time before uglobal.js // //----------------------------------------------------------- // END flogon.js //-----------------------------------------------------------