|
|
<HTML> <HEAD> <TITLE>Microsoft Out-of-Box Experience</TITLE> <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script language=jscript src="oobeutil.js"></script> <script language=jscript>
// This is intended to hold all the script needed // in the default & offline OOBE HTML pages. // // We want to separate the layout (HTML) from the script. // At the same time, it's helpful to have all the code // in one place to make it easier to understand the flow // from page to page.
// Status location constants var STATUS_MSN = 0; var STATUS_OEM = 1; var STATUS_NONE = 2; var STATUS_OFF = 3; var STATUS_MAX = 4; var SNDX_WELCOME = 0; var SNDX_MSN_ISP = 1; var SNDX_MSN_REG = 2; var SNDX_MSN_FINISH = 3; var SNDX_OEM_REG = 1; var SNDX_OEM_ISP = 2; var SNDX_OEM_FINISH = 3; var SNDX_NONE_REG = 1; var SNDX_NONE_FINISH = 2; function CheckPoint(strURL, i1, i2, i3, i4) { this.strURL = strURL; this.rgindex = new Array(STATUS_MAX); this.rgindex[STATUS_MSN] = i1; this.rgindex[STATUS_OEM] = i2; this.rgindex[STATUS_NONE] = i3; this.rgindex[STATUS_OFF] = i4; }
// Checkpoint constants var CKPT_START = 1; var CKPT_TAPI = 2; var CKPT_CONNECT = 3; var CKPT_MODEMCANCEL = 4; var CKPT_DIALTONE = 5; var CKPT_NOTAVAIL = 6; var CKPT_SRVERROR = 7; var CKPT_TOOBUSY = 8; var CKPT_CONNECTERROR = 9; var CKPT_NOANSWER = 10; var CKPT_HANDSHAKE = 11; var CKPT_INSERROR = 12; var CKPT_ISPTOOBUSY = 13; var CKPT_ISPNOCONNECT = 14; var CKPT_ISPRESET = 15; var CKPT_MAX = 16; // ALWAYS set this to be the biggest value! var dnCKPT = new Array(CKPT_MAX);
// Checkpoint breadcrumbs var g_CurrentCKPT = null; var g_DialCKPT = null; var HKEY_LOCAL_MACHINE = 0x80000002; var OOBE_MAIN_REG_KEY = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\OOBE"; var CKPT_REG_KEY = "\\CKPT"; var TOS_REG_VALUE = "TOS";
// CheckDialReady errors var ERR_COMM_NO_ERROR = 0; var ERR_COMM_OOBE_COMP_MISSING = 1; var ERR_COMM_UNKNOWN = 2; // Unknow error, check input parameters var ERR_COMM_NOMODEM = 3; // There is no modem installed var ERR_COMM_RAS_TCP_NOTINSTALL = 4;
// Dialing errors. Look at raserror.h for details var DERR_DIALTONE = 680; var DERR_BUSY = 676; var DERR_VOICEANSWER = 677; var DERR_NOANSWER = 678; var DERR_NO_CARRIER = 679; var DERR_HARDWARE_FAILURE = 630; // modem turned off var DERR_PORT_ALREADY_OPEN = 602; // procomm/hypertrm/RAS has COM port var DERR_PORT_OR_DEVICE = 692; // got this when hypertrm had the device open -- jmazner var DERR_PPP_TIMEOUT = 718;
// Finish errors var FINISH_OK = 0x00000000; var FINISH_REBOOT = 0x00000001;
// Language reboot return codes var LANGUAGE_REBOOT_NEVER = 0; var LANGUAGE_REBOOT_NOW = 1; var LANGUAGE_REBOOT_END = 2;
// on-the-fly button hiding var HIDE_BACK = 0x0001; var HIDE_NEXT = 0x0002; var HIDE_CANCEL = 0x0004; var HIDE_RESTORE = 0x0008;
// BUGBUG temp GUIDs var NOLAUNCHISPSIGNUP = "{C37D92A5-CA34-11d2-B71C-00C04F794977}"; var MSNCOMPLETED = "{1C0A22F2-CB6B-11d2-B544-00A0C949DA70}";
// window.external object caches var TapiObj = null; var InfoObj = null; var StatusObj = null; var DirObj = null; var ApiObj = null;
// general globals and status var g_strISPFile = ""; var g_bStartup; var g_LastButtonText = null; var g_FirstFocusElement = null; var g = null; var g_SpecialChars = ".'-` "; var g_OOBEDir = "file://" + window.external.API.get_SystemDirectory() + "\\oobe\\"; var g_bRedial = false; var g_LineProblem = 0; var g_bFirstServerError = true; var g_status = STATUS_OFF; var g_ServerErrorCount = 0; var g_DialingAvailableInCountry = true; var g_ModalDialogUp = false;
// preload image caches
var g_ImgClick = new Image(); var g_ImgDisabled = new Image(); var g_ImgHover = new Image(); var g_ImgDefault = new Image();
var g_ImgLeftClickSingle = new Image(); var g_ImgLeftDefaultSingle = new Image(); var g_ImgLeftDisabledSingle = new Image(); var g_ImgLeftHoverSingle = new Image(); var g_ImgRightClickSingle = new Image(); var g_ImgRightDefaultSingle = new Image(); var g_ImgRightDisabledSingle = new Image(); var g_ImgRightHoverSingle = new Image();
var g_ImgLeftClick = new Image(); var g_ImgLeftDefault = new Image(); var g_ImgLeftDisabled = new Image(); var g_ImgLeftHover = new Image(); var g_ImgRightClick = new Image(); var g_ImgRightDefault = new Image(); var g_ImgRightDisabled = new Image(); var g_ImgRightHover = new Image();
var g_ImgLeftClickWide = new Image(); var g_ImgLeftDefaultWide = new Image(); var g_ImgLeftDisabledWide = new Image(); var g_ImgLeftHoverWide = new Image(); var g_ImgRightClickWide = new Image(); var g_ImgRightDefaultWide = new Image(); var g_ImgRightDisabledWide = new Image(); var g_ImgRightHoverWide = new Image();
var ImgDialingAni = new Image(); var ImgNegotiatingAni = new Image(); var ImgConnectedAni = new Image(); var ImgLastConnectImage = new Image(); ImgDialingAni.src = g_OOBEDir + "images/dial_ani.gif"; ImgNegotiatingAni.src = g_OOBEDir + "images/neg_ani.gif"; ImgConnectedAni.src = g_OOBEDir + "images/con_ani.gif";
var g_ImagesAtStage = new Array(4); var g_ImgConfetti = new Image(); var g_ImgFlagAni = new Image(); g_ImgFlagAni.src = g_OOBEDir + "images/flagani.gif"
g_ImgClick.src = g_OOBEDir + "images/click.gif"; g_ImgDisabled.src = g_OOBEDir + "images/disabled.gif"; g_ImgHover.src = g_OOBEDir + "images/hover.gif"; g_ImgDefault.src = g_OOBEDir + "images/default.gif";
g_ImgLeftClickSingle.src = g_OOBEDir + "images/clickl.gif"; g_ImgLeftDefaultSingle.src = g_OOBEDir + "images/defaultl.gif"; g_ImgLeftDisabledSingle.src = g_OOBEDir + "images/disabldl.gif"; g_ImgLeftHoverSingle.src = g_OOBEDir + "images/hoverl.gif"; g_ImgRightClickSingle.src = g_OOBEDir + "images/clickr.gif"; g_ImgRightDefaultSingle.src = g_OOBEDir + "images/defaultr.gif"; g_ImgRightDisabledSingle.src = g_OOBEDir + "images/disabldr.gif"; g_ImgRightHoverSingle.src = g_OOBEDir + "images/hoverr.gif";
g_ImgLeftClick.src = g_OOBEDir + "images/lftclk.gif"; g_ImgLeftDefault.src = g_OOBEDir + "images/lftdef.gif"; g_ImgLeftDisabled.src = g_OOBEDir + "images/lftdsld.gif"; g_ImgLeftHover.src = g_OOBEDir + "images/lfthvr.gif"; g_ImgRightClick.src = g_OOBEDir + "images/rhtclk.gif"; g_ImgRightDefault.src = g_OOBEDir + "images/rhtdef.gif"; g_ImgRightDisabled.src = g_OOBEDir + "images/rhtdsld.gif"; g_ImgRightHover.src = g_OOBEDir + "images/rhthvr.gif";
g_ImgLeftClickWide.src = g_OOBEDir + "images/lftclkw.gif"; g_ImgLeftDefaultWide.src = g_OOBEDir + "images/lftdefw.gif"; g_ImgLeftDisabledWide.src = g_OOBEDir + "images/lftdsldw.gif"; g_ImgLeftHoverWide.src = g_OOBEDir + "images/lfthvrw.gif"; g_ImgRightClickWide.src = g_OOBEDir + "images/rhtclkw.gif"; g_ImgRightDefaultWide.src = g_OOBEDir + "images/rhtdefw.gif"; g_ImgRightDisabledWide.src = g_OOBEDir + "images/rhtdsldw.gif"; g_ImgRightHoverWide.src = g_OOBEDir + "images/rhthvrw.gif";
// Mandatory Initialization Code if (null == ApiObj) { ApiObj = new Object; ApiObj = window.external.API; } if (null == StatusObj) { StatusObj = new Object; StatusObj = window.external.Status; } if (null == DirObj) { DirObj = new Object; DirObj = window.external.Directions; } if (null == InfoObj) { InfoObj = new Object; InfoObj = window.external.UserInfo; } // END Initialization Code
////////////////////////////////////////////////////////////////////////////////////// // tapi.htm ////////////////////////////////////////////////////////////////////////////////////// function TapiLoadMe() { InitFrameRef(); ResetDialing(); g_FirstFocusElement = g.selCountry;
if (null == TapiObj) { TapiObj = new Object; TapiObj = window.external.Tapi; }
RetrieveTapi(); Tapi_CountryChange(); g_FirstFocusElement.focus(); }
function Tapi_AreaCodeChange() { try { if (g.event == null) return; } catch(e) { return; }
if (window.external.Tapi.IsAreaCodeRequired(g.selCountry.selectedIndex) && window.external.CheckPhoneBook("msobe.isp") && g.edtAreaCode.value.length == 0) g.btnNext.disabled = true; else g.btnNext.disabled = false; InitButtons(); } function Tapi_CountryChange() { try { if (g.event == null) return; } catch(e) { return; }
TapiObj.set_CountryIndex = g.selCountry.selectedIndex; if (window.external.CheckPhoneBook("msobe.isp")) { g.div_MSNNotAvailable.style.visibility = "hidden"; g.spn_AdditionalSettings.style.visibility = "visible"; g_DialingAvailableInCountry = true; } else { g.div_MSNNotAvailable.style.visibility = "visible"; g.spn_AdditionalSettings.style.visibility = "hidden"; g_DialingAvailableInCountry = false; } tapi_OutsideLineClicked(); Tapi_AreaCodeChange(); } function StoreTapi() { TapiObj.set_CountryIndex = g.selCountry.selectedIndex; TapiObj.set_AreaCode = g.edtAreaCode.value;
if(g.radioTouchToneYes.checked) TapiObj.set_PhoneSystem = 1; //touch tone else TapiObj.set_PhoneSystem = 0; //rotary
TapiObj.set_DialOut = g.edtOutsideLine.value; }
function RetrieveTapi() { var fTapi = TapiObj.IsTAPIConfigured;
g.selCountry.selectedIndex = TapiObj.get_CountryIndex;
g.edtAreaCode.value = TapiObj.get_AreaCode;
if(1 == TapiObj.get_PhoneSystem) g.radioTouchToneYes.checked = true; //touch tone else g.radioTouchToneNo.checked = true; //rotary
g.edtOutsideLine.value = TapiObj.get_DialOut;
if(g.edtOutsideLine.value != "") g.radioOutSideLineYes.checked = true; //use a number to dial out else g.radioOutSideLineNo.checked = true; //don't use a number to dial out }
function tapi_OutsideLineClicked() { var L_OutSideLine_Text = "9"; //global variable number used to dial outside line try { if (g.event == null) return; } catch(e) { return; }
if (g.radioOutSideLineYes.checked == true && g.spn_AdditionalSettings.style.visibility == "visible") { g.spanOutsideLine.style.visibility = "visible"; g.edtOutsideLine.style.visibility = "visible"; g.edtOutsideLine.value = TapiObj.get_DialOut; if (g.edtOutsideLine.value.length == 0) g.edtOutsideLine.value = L_OutSideLine_Text; } else { g.spanOutsideLine.style.visibility = "hidden"; g.edtOutsideLine.style.visibility = "hidden"; g.spanOutsideLine.style.visibility = "hidden"; g.edtOutsideLine.value = ""; //nuke out any outside line value } } // END tapi.htm
////////////////////////////////////////////////////////////////////////////////////// // connect.htm ////////////////////////////////////////////////////////////////////////////////////// function connect_LoadMe() { InitFrameRef(); g_FirstFocusElement = g.btnCancelText; if (g != null) { if (g.btnBack != null) { g.btnBack.disabled = true; } }
InitButtons();
setTimeout("DoDialExternal()" , 40); //BUGBUG #define this at the top, and why do we have to wait 40 milliseconds anyway? g_FirstFocusElement.focus(); }
function ResetDialing() { g_bRedial = false; g_LineProblem = 0; g_bFirstServerError = true; g_strISPFile = ""; window.external.Hangup(); }
function SetDialing(strISPFile) { g_strISPFile = strISPFile;
g_DialCKPT = g_CurrentCKPT;
g_ModalDialogUp = false; }
function DoDialExternal() { SetDialing("msobe.isp");
DoDial(); }
function DoDial() { if (g != null) { if (g.spnDialing != null) g.spnDialing.style.color = 0x990000; if (g.imgDialing != null) { ImgLastConnectImage.src = g.imgDialing.src; g.imgDialing.src = ImgDialingAni.src; } }
if (g_bRedial) { window.external.ReDial(g_strISPFile); } else { window.external.Dial(g_strISPFile); } }
function Redial() { if (g != null && g.Connect_REDIALINFO != null) { g.Connect_REDIALINFO.style.visibility = "visible"; } if (g != null && g.btnBack != null) { g.btnBack.disabled = true; } DoDial(); }
<!--REQUIRED FUNCTION NAME:: DO NOT OVERLOAD OR ALTER--> function OnDialingEx() { g_bRedial = true; if (g != null && g.spnDialing != null) g.spnDialing.innerText = window.external.get_DialNumber; if (g != null) { if (g.btnBack != null) { g.btnBack.disabled = false; } InitPairedButton(g.spanBack, g.btnBack, g.btnBackText, g_ImgLeftDefault, g_ImgLeftDisabled, g_ImgLeftDefaultSingle, g_ImgLeftDisabledSingle, g.spanNext, "backButton", "backButtonText"); } }
<!--REQUIRED FUNCTION NAME:: DO NOT OVERLOAD OR ALTER--> function OnConnectingEx() { //alert("Connecting");
if (g != null) { if (g.spnDialing != null) g.spnDialing.style.color = 0x999999;
if (g.imgDialing != null) g.imgDialing.src = "../images/dial_off.gif";
if (g.imgNegotiating != null) { ImgLastConnectImage.src = g.imgNegotiating.src; g.imgNegotiating.src = ImgNegotiatingAni.src; } } }
<!--REQUIRED FUNCTION NAME:: DO NOT OVERLOAD OR ALTER--> function OnDownloadingEx() { //alert("Downloading");
if (g != null) { if (g.spnDialing != null) g.spnDialing.style.color = 0x999999;
if (g.imgNegotiating != null) g.imgNegotiating.src = "../images/neg_off.gif";
if (g.imgConnected != null) g.imgConnected.src = ImgConnectedAni.src; } }
<!--REQUIRED FUNCTION NAME:: DO NOT OVERLOAD OR ALTER--> function OnDisconnectEx() { //alert("Disconnected"); }
<!--REQUIRED FUNCTION NAME:: DO NOT OVERLOAD OR ALTER--> function OnDialingErrorEx(derr) { if (g_ModalDialogUp) { g_ModalDialogUp = false; return; }
window.external.Hangup(); g_LineProblem++;
if (g_CurrentCKPT == g_DialCKPT) { switch (derr) { case DERR_PORT_OR_DEVICE: case DERR_PORT_ALREADY_OPEN: case DERR_HARDWARE_FAILURE: case DERR_DIALTONE: GoNavigate(CKPT_DIALTONE); break;
case DERR_BUSY: if (g_LineProblem < 3) { window.setTimeout("Redial()", 1000); } else GoNavigate(CKPT_TOOBUSY); break;
case DERR_VOICEANSWER: case DERR_PPP_TIMEOUT: GoNavigate(CKPT_HANDSHAKE); break;
case DERR_NO_CARRIER: GoNavigate(CKPT_CONNECTERROR); break;
case DERR_NOANSWER: if (g_LineProblem < 3) { window.setTimeout("Redial()", 1000); } else { GoNavigate(CKPT_HANDSHAKE); } break;
default: GoNavigate(CKPT_SRVERROR); break; } } }
<!--REQUIRED FUNCTION NAME:: DO NOT OVERLOAD OR ALTER--> function OnServerErrorEx(derr) { if (g_CurrentCKPT == g_DialCKPT) { if (g_bFirstServerError) { var url = window.external.GetReconnectURL if (url != null && url.length !=0) ifrmMainFrame.window.navigate(url);
g_bFirstServerError = false; } else { GoNavigate(CKPT_SRVERROR); } } }
// END connect.htm
////////////////////////////////////////////////////////////////////////////////////// // General Default LoadMe function ////////////////////////////////////////////////////////////////////////////////////// function _Default_LoadMe() { InitFrameRef();
if (g.btnCancelText != null) g_FirstFocusElement = g.btnCancelText; else if (g.btnRestoreText != null) g_FirstFocusElement = g.btnRestoreText; else if (g.btnBackText != null) g_FirstFocusElement = g.btnBackText; else if (g.btnNextText != null) g_FirstFocusElement = g.btnNextText;
InitButtons(); if (g_FirstFocusElement != null) g_FirstFocusElement.focus(); else g.document.body.focus(); }
////////////////////////////////////////////////////////////////////////////////////// // usemodem.htm ////////////////////////////////////////////////////////////////////////////////////// function usemodem_LoadMe() { InitFrameRef(); ResetDialing(); g_FirstFocusElement = g.UseModem_Yes; InitButtons(); g_FirstFocusElement.focus(); }
////////////////////////////////////////////////////////////////////////////////////// // hndshake.htm ////////////////////////////////////////////////////////////////////////////////////// function hndshake_OnKeyPress() { try { if (g.event == null) return; } catch(e) { return; }
// Treat the enter key like the next button // since the user hasn't gone through the mouse tutorial yet. if ((g.event.keyCode == 13) && (g.btnNext.disabled == false)) { GoNext(); } else { KeyPressIsValid(); } }
function hndshake_CheckEdits() { try { if (g.event == null) return; } catch(e) { return; }
if (g.event.srcElement != g.edtMSNPhoneNumber) { hndshake_CheckEnableNextButton(); } }
function hndshake_CheckEnableNextButton() { try { if (g.event == null) return; } catch(e) { return; }
if (g.edtMSNPhoneNumber.value.length) { g.btnNext.disabled = false; } else { g.btnNext.disabled = true; }
InitButtons(); }
function hndshake_LoadMe() { InitFrameRef();
g_FirstFocusElement = g.edtMSNPhoneNumber;
hndshake_CheckEnableNextButton();
g_FirstFocusElement.focus(); }
////////////////////////////////////////////////////////////////////////////////////// // MISC Functions //////////////////////////////////////////////////////////////////////////////////////
// Page Navigation
// InitCKPT, PushCKPT, PopCKPT, CKPTFromVal are meant to handle the behavior for GoBack. // We only go back to certain pages (i.e., Mouse Tutorial, Sound Check). // And on some of the pages, we only go back if they haven't been // completed (i.e., EULA, PID). // // So, we push checkpoints if we intend to all coming back to that page. // We pop checkpoints if we no longer want to come back (e.g., we've // completed that page.
function InitCKPT() { dnCKPT[CKPT_START] = new CheckPoint("msnsetup\\mstart.htm", SNDX_WELCOME, SNDX_WELCOME, SNDX_WELCOME, SNDX_WELCOME); dnCKPT[CKPT_TAPI] = new CheckPoint("msnsetup\\mtapi.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_CONNECT ] = new CheckPoint("msnsetup\\mconnect.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_MODEMCANCEL] = new CheckPoint("msnsetup\\musemode.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_DIALTONE] = new CheckPoint("msnerror\\mdialton.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_NOTAVAIL] = new CheckPoint("msnerror\\mnotavai.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_SRVERROR] = new CheckPoint("msnerror\\msrverro.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_TOOBUSY] = new CheckPoint("msnerror\\mtoobusy.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_CONNECTERROR] = new CheckPoint("msnerror\\mcnncter.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_NOANSWER] = new CheckPoint("msnerror\\mnoanswe.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_HANDSHAKE] = new CheckPoint("msnerror\\mhndshak.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_INSERROR] = new CheckPoint("msnerror\\minserro.htm", SNDX_MSN_ISP, SNDX_OEM_REG, SNDX_NONE_REG, 0); dnCKPT[CKPT_ISPTOOBUSY] = new CheckPoint("msnerror\\misp2bus.htm", 0, SNDX_OEM_ISP, 0, 0); dnCKPT[CKPT_ISPNOCONNECT] = new CheckPoint("msnerror\\mispcnnc.htm", 0, SNDX_OEM_ISP, 0, 0); dnCKPT[CKPT_ISPRESET] = new CheckPoint("msnerror\\misprese.htm", 0, SNDX_OEM_ISP, 0, 0);
PopCKPT(); }
function PushCKPT(ckpt) { if (ckpt > 0 && ckpt < CKPT_MAX) { var tos = 0; try { tos = ApiObj.get_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, TOS_REG_VALUE); } catch (e) {} ApiObj.set_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, tos.toString(), ckpt); ApiObj.set_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, TOS_REG_VALUE, ++tos); g_CurrentCKPT = ckpt; } }
function PopCKPT(ckptCheck) { var ckpt = 0; try { var tos = ApiObj.get_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, TOS_REG_VALUE); if (tos > 0) { ckpt = ApiObj.get_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, (tos - 1).toString());
if (null == ckptCheck || ckpt == ckptCheck) { ApiObj.set_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, TOS_REG_VALUE, --tos); ApiObj.DeleteRegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, tos.toString()); } } } catch (e) {}
if (ckpt > 0 && ckpt < CKPT_MAX) { g_CurrentCKPT = ckpt; } else g_CurrentCKPT = null; }
function URLFromCKPT(ckpt) { var str = ""; if (ckpt > 0 && ckpt < CKPT_MAX) { str = dnCKPT[ckpt].strURL; } return str; }
function IndexFromCKPT(ckpt, status) { var index = 0; if (ckpt > 0 && ckpt < CKPT_MAX) { var checkpoint = dnCKPT[ckpt]; index = checkpoint.rgindex[status]; } return index; }
function SetButtonImageToClick() { try { if (g.event != null) { switch(g.event.srcElement.parentElement.id) { case "spanCancel": if (g.spanRestore != null && true != g.spanRestore.Hide) { g.btnCancel.src = g_ImgLeftClickWide.src; } else { g.btnCancel.src = g_ImgClick.src; } break; case "spanRestore": if (g.spanCancel != null && true != g.spanCancel.Hide) { g.btnRestore.src = g_ImgRightClickWide.src; } else { g.btnRestore.src = g_ImgClick.src; } break; case "spanBack": if (g.spanNext != null && true != g.spanNext.Hide) { g.btnBack.src = g_ImgLeftClick.src; } else { g.btnBack.src = g_ImgLeftClickSingle.src; } break; case "spanNext": if (g.spanBack != null && true != g.spanBack.Hide) { g.btnNext.src = g_ImgRightClick.src; } else { g.btnNext.src = g_ImgRightClickSingle.src; } break; } } } catch(e) { return; } }
function IsLocalFile() { try { return (-1 != g.location.protocol.indexOf("file")); } catch (e) { return false; } }
////////////////////////////////////////////////////////////////////////////////////// // public navigation APIs ////////////////////////////////////////////////////////////////////////////////////// //Some server page is calling this function that used to set g_OEMAddBackURL. function SetBack(strURL) { }
function GoCancel(ckpt) { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
SetButtonImageToClick();
switch (g_CurrentCKPT) { case CKPT_CONNECT: ResetDialing(); // fall through...
case CKPT_TAPI: GoNavigate(CKPT_MODEMCANCEL); break; } }
function GoBack(ckpt) { var ckptPrevious = g_CurrentCKPT;
try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
SetButtonImageToClick();
if (g_CurrentCKPT == g_DialCKPT) ResetDialing();
PopCKPT();
if (ckptPrevious == g_CurrentCKPT) { // This handles the case where the current page pushed itself on the stack. PopCKPT(); }
if (g_CurrentCKPT > 0 && g_CurrentCKPT < CKPT_MAX) { GoNavigate(g_CurrentCKPT); } }
function StatusNavigate() { var iMove = IndexFromCKPT(g_CurrentCKPT, g_status) - window.external.get_StatusIndex; while (iMove > 0) { window.external.MoveNext(); --iMove; } while (iMove < 0) { window.external.MovePrevious(); ++iMove; } }
//////////////////////////////////////////////////////////////////// // DON'T MUCK WITH THE POSITIONING OF THE CASES IN THE SWITCHS BELOW //////////////////////////////////////////////////////////////////// function GoNavigate(ckptGoHere) { try { if (g_bStartup == false) { if (IsLocalFile()) { if (g.event != null) { g.event.returnValue = false; g.event.cancelBubble = true; } } } else g_bStartup = false;
} catch(e) { return; }
SetButtonImageToClick();
switch (ckptGoHere) { case CKPT_START: PushCKPT(CKPT_START); //BUGBUG do we want to do this? g.navigate(g_OOBEDir + URLFromCKPT(g_CurrentCKPT)); break;
case CKPT_TAPI: PushCKPT(CKPT_TAPI); g.navigate(g_OOBEDir + URLFromCKPT(g_CurrentCKPT)); break;
case CKPT_CONNECT: g_CurrentCKPT = CKPT_CONNECT; g.navigate(g_OOBEDir + URLFromCKPT(CKPT_CONNECT)); break;
case CKPT_NOTAVAIL: g_CurrentCKPT = CKPT_NOTAVAIL; g.navigate(g_OOBEDir + URLFromCKPT(CKPT_NOTAVAIL)); break;
case CKPT_DIALTONE: g_CurrentCKPT = CKPT_DIALTONE; g.navigate(g_OOBEDir + URLFromCKPT(CKPT_DIALTONE)); break;
case CKPT_TOOBUSY: g_CurrentCKPT = CKPT_TOOBUSY; g.navigate(g_OOBEDir + URLFromCKPT(CKPT_TOOBUSY)); break;
case CKPT_SRVERROR: g_CurrentCKPT = CKPT_SRVERROR; g.navigate(g_OOBEDir + URLFromCKPT(CKPT_SRVERROR)); break;
case CKPT_MODEMCANCEL: g_CurrentCKPT = CKPT_MODEMCANCEL; g.navigate(g_OOBEDir + URLFromCKPT(CKPT_MODEMCANCEL)); break;
case CKPT_INSERROR: g_CurrentCKPT = CKPT_INSERROR; g.navigate(g_OOBEDir + URLFromCKPT(CKPT_INSERROR)); break;
case CKPT_HANDSHAKE: g_CurrentCKPT = CKPT_HANDSHAKE; g.navigate(g_OOBEDir + URLFromCKPT(CKPT_HANDSHAKE)); break;
case CKPT_CONNECTERROR: g_CurrentCKPT = CKPT_CONNECTERROR; g.navigate(g_OOBEDir + URLFromCKPT(g_CurrentCKPT)); break;
case CKPT_ISPTOOBUSY: g_CurrentCKPT = CKPT_ISPTOOBUSY; g.navigate(g_OOBEDir + URLFromCKPT(g_CurrentCKPT)); break;
case CKPT_ISPRESET: g_CurrentCKPT = CKPT_ISPRESET; g.navigate(g_OOBEDir + URLFromCKPT(g_CurrentCKPT)); break; }
StatusNavigate(); }
function GoNext() { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
SetButtonImageToClick();
switch (g_CurrentCKPT) { case CKPT_HANDSHAKE: window.external.set_DialNumber(g.edtMSNPhoneNumber.value); case CKPT_SRVERROR: case CKPT_ISPRESET: case CKPT_CONNECTERROR: case CKPT_DIALTONE: case CKPT_TOOBUSY: GoNavigate(g_DialCKPT); break;
case CKPT_START: GoNavigate(CKPT_TAPI); break;
case CKPT_TAPI: StoreTapi();
if ( dnCKPT[CKPT_CONNECT].strURL.toUpperCase() == "MSNSETUP\\MLAN.HTM" || window.external.CheckPhoneBook("msobe.isp") ) { GoNavigate(CKPT_CONNECT); } break;
default: // BUGBUG should we remove the default altogether? break; } }
// BUGBUG temporary until MSN changes code function GoOffline() { GoNext(); }
// Button Event Handlers and Initialization function SetLastButtonText() { if (g.btnNext != null) g_LastButtonText = g.btnNextText; else if (g.btnBack != null) g_LastButtonText = g.btnBackText; else if (g.btnRestore != null) g_LastButtonText = g.btnRestoreText; else if (g.btnCancel != null) g_LastButtonText = g.btnCancelText; }
// Function: InitFrameRef // Description: Sets up globals to point to buttons // Since the buttons exist on the child frame, // we want to have quick access to them without // going through the collections. // WARNING: Call this function at the top of XXX_LoadMe() // function InitFrameRef() { g_LastButtonText = null; g_FirstFocusElement = null; g_LastKeyDown = null;
g = document.frames("msoobeMain");
try { if (g.StageImage != null && g.StageImage.readyState == "complete") { g.StageImage.style.display = "none"; }
g.document.body.onkeydown = OnKeyDown; SetLastButtonText(); } catch(e){}
}
function HideButtons(buttons) { if (null != g.spanBack && (buttons & HIDE_BACK)) { g.spanBack.Hide = true; g.btnBack.Hide = true; }
if (null != g.spanNext && (buttons & HIDE_NEXT)) { g.spanNext.Hide = true; g.btnNext.Hide = true; }
if (null != g.spanCancel && (buttons & HIDE_CANCEL)) { g.spanCancel.Hide = true; g.btnCancel.Hide = true; }
if (null != g.spanRestore && (buttons & HIDE_RESTORE)) { g.spanRestore.Hide = true; g.btnRestore.Hide = true; } }
function InitButtons() { if (g.btnNextText && (g.btnBackText && (g.btnBack.Hide == null || g.btnBack.Hide == false))) g.btnNextText.style.textAlign="left"; else if (g.btnNextText) g.btnNextText.style.textAlign="center";
if (g.btnBackText && (g.btnNextText && (g.btnNext.Hide == null || g.btnNext.Hide == false))) g.btnBackText.style.textAlign="right"; else if (g.btnBackText) g.btnBackText.style.textAlign="center";
if (g.btnRestoreText && (g.btnCancelText && (g.btnCancel.Hide == null || g.btnCancel.Hide == false))) g.btnRestoreText.style.textAlign="left"; else if (g.btnRestoreText) g.btnRestoreText.style.textAlign="center";
if (g.btnCancelText && (g.btnRestoreText && (g.btnRestore.Hide == null || g.btnRestore.Hide == false))) g.btnCancelText.style.textAlign="right"; else if(g.btnCancelText) g.btnCancelText.style.textAlign="center";
InitPairedButton(g.spanNext, g.btnNext, g.btnNextText, g_ImgRightDefault, g_ImgRightDisabled, g_ImgRightDefaultSingle, g_ImgRightDisabledSingle, g.spanBack, "backButton", "backButtonText"); InitPairedButton(g.spanBack, g.btnBack, g.btnBackText, g_ImgLeftDefault, g_ImgLeftDisabled, g_ImgLeftDefaultSingle, g_ImgLeftDisabledSingle, g.spanNext, "backButton", "backButtonText"); InitPairedButton(g.spanRestore, g.btnRestore, g.btnRestoreText, g_ImgRightDefaultWide, g_ImgRightDisabledWide, g_ImgDefault, g_ImgDisabled, g.spanCancel, "cancelButton", "cancelButtonText"); InitPairedButton(g.spanCancel, g.btnCancel, g.btnCancelText, g_ImgLeftDefaultWide, g_ImgLeftDisabledWide, g_ImgDefault, g_ImgDisabled, g.spanRestore, "cancelButton", "cancelButtonText"); }
function InitPairedButton(span, btn, btnText, img, imgDisabled, imgSingle, imgSingleDisabled, span2, btnClass, btnTextClass) { if (span != null) { if (span2 == null || true == span2.Hide) { btn.className = btnClass; btnText.className = btnTextClass; btnText.style.textAlign="center"; } if (btn.disabled == null || !btn.disabled) { if (span2 == null || true == span2.Hide) { btn.src = imgSingle.src; } else { btn.src = img.src; } btnText.style.color= "black"; } else { if (span2 == null || true == span2.Hide) { btn.src = imgSingleDisabled.src; } else { btn.src = imgDisabled.src; } btnText.style.color= "gray"; }
span.onmouseover = HoverOnButton; span.onmouseout = HoverOffButton; btnText.onblur = BlurBtnText; btnText.onkeydown = KeyDownBtnText; btnText.onfocus = FocusBtnText;
// set sibling associations. btn.sibling = btnText; btnText.sibling = btn;
if (null == btn.Hide || false == btn.Hide) { btn.style.visibility = "visible"; btnText.style.visibility = "visible"; switch (btnText.style.textAlign.toUpperCase()) { case "CENTER": btnText.style.posLeft = btn.offsetLeft + (btn.width / 2 - btnText.offsetWidth / 2); break; case "RIGHT": btnText.style.posLeft = btn.offsetLeft + btn.width - ( btnText.offsetWidth + 10); break; } } } }
/////////////////////////////////////////////////////////// // Function: HoverOnButton // Description: This function is attached to a onmouseover // event for a button span. We use the event source to // determine which button it occured on and change that // button to it's higlighted or hover state. // function HoverOnButton() { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
switch (g.event.srcElement.parentElement) { case g.spanCancel: case g.btnCancelText: HoverOnPairedButton(g.btnCancel, g.btnCancelText, g_ImgLeftHoverWide, g_ImgHover, g.btnRestore); break;
case g.spanRestore: case g.btnRestoreText: HoverOnPairedButton(g.btnRestore, g.btnRestoreText, g_ImgRightHoverWide, g_ImgHover, g.btnCancel); break;
case g.spanBack: case g.btnBackText: HoverOnPairedButton(g.btnBack, g.btnBackText, g_ImgLeftHover, g_ImgLeftHoverSingle, g.btnNext); break;
case g.spanNext: case g.btnNextText: HoverOnPairedButton(g.btnNext, g.btnNextText, g_ImgRightHover, g_ImgRightHoverSingle, g.btnBack); break; } }
function HoverOnPairedButton(btn, btnText, img, imgSingle, btn2) { if (btn.disabled == null || !btn.disabled) { if (!btn.parentElement.contains(g.event.fromElement)) { if (btn2 == null || true == btn2.Hide) { btn.src = imgSingle.src; } else { btn.src = img.src; }
btnText.style.fontWeight = "bold"; switch (btnText.style.textAlign.toUpperCase()) { case "CENTER": btnText.style.posLeft = btn.offsetLeft + (btn.offsetWidth / 2 - btnText.offsetWidth / 2); break; case "RIGHT": btnText.style.posLeft = btn.offsetLeft + btn.offsetWidth - ( btnText.offsetWidth + 10); break; } } } }
var g_LastKeyDown = null; function OnKeyDown() { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
if (g.event.altKey) { g_LastKeyDown = String.fromCharCode(g.event.keyCode); if (g_LastKeyDown != null) g_LastKeyDown = g_LastKeyDown.toUpperCase(); } else g_LastKeyDown = null; }
function FocusBtnText() { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
if (g.event.srcElement.sibling == null || g.event.srcElement.sibling.disabled == null || g.event.srcElement.sibling.disabled == false) { var accessKey = g.event.srcElement.accessKey; if(g.event.altKey && !g.event.button && accessKey != null && g_LastKeyDown == accessKey.toUpperCase()) g.event.srcElement.parentElement.click(); } else g.event.srcElement.blur();
g.event.returnValue = false; g.event.cancelBubble = true; }
function KeyDownBtnText() { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
var keyPressed = String.fromCharCode(g.event.keyCode); if (g.event.keyCode == 13 || (g.event.altKey && keyPressed.toUpperCase() == g.event.srcElement.accessKey.toUpperCase())) { g.event.keyCode = 0; g.event.returnValue = false; g.event.cancelBubble = true; g.event.srcElement.parentElement.click(); }
if (g_LastButtonText != null && g.event.srcElement == g_LastButtonText && g.event.keyCode == 9 && null != g_FirstFocusElement && g_FirstFocusElement.isTextEdit && !g.event.altKey) { g_FirstFocusElement.focus(); g_FirstFocusElement.select();
g.event.returnValue = false; // BUGBUG should we keyCode 0 here? g.event.keyCode = 0; } }
function BlurBtnText() { // need this stinking thing here for the // case when we have an onblur happen and the page is not valid // so we are in a transition. this way we don't get a mesagebox // about an error try { if (g.event.type == "blur") { if (!g.event.altKey && g_LastButtonText != null && g_FirstFocusElement != null && g.event.srcElement == g_LastButtonText) { g_FirstFocusElement.focus(); } } } catch(e) { return; } } /////////////////////////////////////////////////////////// // Function: HoverOffButton // Description: This function is attached to a onmouseout // event for a button span. We use the event source to // determine which button it occured on and change that // button back to it's normal state. // function HoverOffButton() { // need this stinking thing here for the // case when we have an onblur happen and the page is not valid // so we are in a transition. this way we don't get a mesagebox // about an error try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
switch (g.event.srcElement.parentElement) { case g.spanCancel: case g.btnCancelText: HoverOffPairedButton(g.btnCancel, g.btnCancelText, g_ImgLeftDefaultWide, g_ImgDefault, g.btnRestore); break;
case g.spanRestore: case g.btnRestoreText: HoverOffPairedButton(g.btnRestore, g.btnRestoreText, g_ImgRightDefaultWide, g_ImgDefault, g.btnCancel); break;
case g.spanBack: case g.btnBackText: HoverOffPairedButton(g.btnBack, g.btnBackText, g_ImgLeftDefault, g_ImgLeftDefaultSingle, g.btnNext); break;
case g.spanNext: case g.btnNextText: HoverOffPairedButton(g.btnNext, g.btnNextText, g_ImgRightDefault, g_ImgRightDefaultSingle, g.btnBack); break; } // BlurText(); }
function HoverOffPairedButton(btn, btnText, img, imgSingle, btn2) { if (btn.disabled == null || !btn.disabled) { if (!btn.parentElement.contains(g.event.toElement)) { if (btn2 == null || true == btn2.Hide) { btn.src = imgSingle.src; } else { btn.src = img.src; } btnText.style.fontWeight = "normal"; btnText.style.color = "black"; switch (btnText.style.textAlign.toUpperCase()) { case "CENTER": btnText.style.posLeft = btn.offsetLeft + (btn.offsetWidth / 2 - btnText.offsetWidth / 2); break; case "RIGHT": btnText.style.posLeft = btn.offsetLeft + btn.offsetWidth - ( btnText.offsetWidth + 10); break; } } } } // END Button Event Handlers and Initialization
// VALIDATION ROUTINES function KeyPressIsNumeric() { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
if (!IsNumeric(g.event.keyCode)) { g.event.keyCode = 0; g.event.returnValue = false; } }
function IsNumeric(keyCode) { if ((keyCode >= 48/*0*/) && (keyCode <= 57/*9*/)) return true; else return false; }
function IsSpecial(keyCode) { // BUGBUG DISABLED FOR BETA /* var bFound = false; var iPosition = 0; for (;iPosition < g_SpecialChars.length; iPosition++) { if (g_SpecialChars.charCodeAt(iPosition) == keyCode) { bFound = true; break; } } return bFound; */ return false; }
function KeyPressIsValid() { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
if (!IsAlpha(g.event.keyCode) && !IsSpecial(g.event.keyCode) && !IsNumeric(g.event.keyCode)) { g.event.keyCode = 0; g.event.returnValue = false; } }
function KeyPressIsAlpha() { try { if (IsLocalFile() && g.event == null) return; } catch(e) { return; }
if (!IsAlpha(g.event.keyCode)) { g.event.keyCode = 0; g.event.returnValue = false; } }
function IsAlpha(keyCode) { // BUGBUG DISABLED FOR BETA /* var strKeyCode = String.fromCharCode(keyCode); var re1 = new RegExp("\w"); var re2 = new RegExp("\D");
strKeyCode.match(re1); strKeyCode.match(re2); //return ((strKeyCode.match(re1) != null) && (strKeyCode.match(re2) != null)); */ // if ((keyCode >= 97/*a*/ && keyCode <= 122/*z*/) || // (keyCode >= 65/*A*/ && keyCode <= 90 /*Z*/)) return true; // else // return false; }
function NumberOfSpaces(strValue) { /* var NASexp = RegExp("\s"); var result = strValue.match(NASexp); return ((result == null) || (result.length != strValue.length)); */ var iSpaceCount = 0; for (iPosition = 0; iPosition < strValue.length; iPosition ++) { if (strValue.charAt(iPosition) == ' ') { iSpaceCount++; } } return iSpaceCount; } function KeyCodeToUpper() { var strKeyCode = String.fromCharCode(g.event.keyCode); strKeyCode = strKeyCode.toUpperCase(); g.event.keyCode = strKeyCode.charCodeAt(0); }
// END VALIDATION ROUTINES
function SetupPageLayout() { document.all.ifrmMainFrame.style.height = document.body.clientHeight; }
window.onresize = SetupPageLayout;
function ReCheckModem() { if ( 1 == DirObj.get_Offline() || window.external.CheckDialReady() != ERR_COMM_NO_ERROR) { g_status = STATUS_OFF; StatusObj.set_Status(NOLAUNCHISPSIGNUP, true); } else { g_status = STATUS_MSN; } }
function InitApplication() { SetupPageLayout(); g_bStartup = true; InitFrameRef(); if ( 1 == DirObj.get_Offline() || window.external.CheckDialReady() != ERR_COMM_NO_ERROR) { g_status = STATUS_OFF; StatusObj.set_Status(NOLAUNCHISPSIGNUP, true); } else { g_status = STATUS_MSN; }
InitCKPT();
do { PopCKPT(); } while (null != g_CurrentCKPT);
GoNavigate(CKPT_START); spnPage.style.visibility = "visible"; }
</script>
</HEAD>
<BODY bgColor=#ffffff leftMargin=0 onload=InitApplication(); scroll=no tabIndex=-1 topMargin=0> <SPAN id=spnPage style="VISIBILITY: hidden" tabIndex=-1> <SPAN id=spnMainFrame style="LEFT: 0px; POSITION: absolute; TOP: 0px" tabIndex=-1> <IFRAME frameBorder=no height="100%" id=ifrmMainFrame name=msoobeMain src="about:blank" tabIndex=-1 width="100%"></IFRAME> </SPAN> </SPAN> </BODY> </HTML>
|