mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1918 lines
50 KiB
1918 lines
50 KiB
<HTML>
|
|
<HEAD>
|
|
<TITLE>Microsoft Out-of-Box Experience</TITLE>
|
|
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<LINK REL="stylesheet" TYPE="text/css" HREF="setup\oobestyl.css">
|
|
|
|
<script language=jscript src="AgtCore.js"></script>
|
|
<script language=jscript src="AgtScrpt.js"></script>
|
|
|
|
<script language=jscript src="oobeutil.js"></script>
|
|
|
|
<script language=jscript src="migrate.js"></script>
|
|
|
|
<script language=jscript src="dialmgr.js"></script>
|
|
|
|
<script language=jscript src="error.js"></script>
|
|
|
|
<script language=jscript src="icsmgr.js"></script>
|
|
|
|
<script language=jscript src="isptype.js"></script>
|
|
|
|
<script language=jscript src="iconnect.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.
|
|
|
|
var APP_OOBE_MODE = 0;
|
|
var APP_MSN_MODE = 4;
|
|
var APP_DESKTOP_MODE = 2;
|
|
|
|
// Status location constants
|
|
var STATUS_ISP = 0; // Do either MSN or local OEM offer
|
|
var STATUS_PRECONFIG = 1; // Do the pre-configured OEM INS file
|
|
var STATUS_NONE = 2; // Don't do any ISP offer
|
|
var STATUS_OFF = 3; // Don't connect to the Internet
|
|
var STATUS_MAX = 4;
|
|
|
|
|
|
// For the new status pane, don't allow half way status
|
|
var SNDX_WELCOME = 0;
|
|
var SNDX_HW = 1;
|
|
var SNDX_LEGAL = 2;
|
|
var SNDX_REG = 3;
|
|
var SNDX_ISP = 4;
|
|
var SNDX_IDENTITIES = 5;
|
|
var SNDX_FINI = 6;
|
|
|
|
// holds non-checkpoint next navigation
|
|
var g_SimpleNavMap = null;
|
|
|
|
var g_CountryIdx=-1;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// CheckPoint
|
|
//
|
|
// Constructor for CheckPoint object.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function CheckPoint(strURL, i1, i2, i3, i4)
|
|
{
|
|
this.strURL = strURL;
|
|
this.rgindex = new Array(STATUS_MAX);
|
|
this.rgindex[STATUS_ISP] = i1;
|
|
this.rgindex[STATUS_PRECONFIG] = i2;
|
|
this.rgindex[STATUS_NONE] = i3;
|
|
this.rgindex[STATUS_OFF] = i4;
|
|
}
|
|
|
|
var curCKPT = 1;
|
|
var CKPT_ISPSIGNUP = curCKPT++;
|
|
var CKPT_MIGLIST = curCKPT++;
|
|
var CKPT_ISPDIAL = curCKPT++;
|
|
var CKPT_REFDIAL = curCKPT++;
|
|
var CKPT_MIGDIAL = curCKPT++;
|
|
var CKPT_ICONNECT = curCKPT++;
|
|
var CKPT_OEMISP = curCKPT++;
|
|
var CKPT_OEMCUST = curCKPT++;
|
|
var CKPT_DONE = curCKPT++;
|
|
var CKPT_MAX = curCKPT; // ALWAYS set this to be the biggest value!
|
|
|
|
var dnCKPT = new Array(CKPT_MAX);
|
|
|
|
var CKPT_REGDIAL = CKPT_MAX+1;
|
|
var CKPT_REGISTER1 = CKPT_MAX+2;
|
|
var CKPT_REGISTER3 = CKPT_MAX+3;
|
|
var CKPT_ACT_MSG = CKPT_MAX+4;
|
|
|
|
// 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 = "TopOfStack";
|
|
|
|
var POWERDOWN_SHUTDOWN = 0;
|
|
var POWERDOWN_REBOOT = 1;
|
|
|
|
// CheckDialReady errors
|
|
var ERR_COMM_NO_ERROR = 0;
|
|
var ERR_COMM_OOBE_COMP_MISSING = 1;
|
|
var ERR_COMM_UNKNOWN = 2; // Unknown error, check input parameters
|
|
var ERR_COMM_NOMODEM = 3; // There is no modem installed
|
|
var ERR_COMM_RAS_TCP_NOTINSTALL = 4;
|
|
var ERR_COMM_ISDN = 5;
|
|
var ERR_COMM_PHONE_AND_ISDN = 6;
|
|
|
|
// 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;
|
|
var DERR_REMOTE_DISCONNECT = 629; // Connection interrupted
|
|
|
|
// Types of dialing using ISP files. e.g. Dial to registration, ISP, referral server
|
|
var CONNECTED_REFFERAL = 1
|
|
var CONNECTED_ISP_SIGNUP = 2
|
|
var CONNECTED_ISP_MIGRATE = 3
|
|
var CONNECTED_REGISTRATION = 4
|
|
|
|
// Finish errors
|
|
//
|
|
// These MUST be kept in sync with the values in MSOBMAIN.H.
|
|
//
|
|
var FINISH_OK = 0x00000000;
|
|
var FINISH_REBOOT = 0x00000001;
|
|
var FINISH_BAD_PID = 0x00000002;
|
|
var FINISH_BAD_EULA = 0x00000004;
|
|
var FINISH_BAD_STAMP = 0x00000008;
|
|
|
|
// Dictionary compare modes
|
|
var COMPAREMODE_BINARY = 0;
|
|
var COMPAREMODE_TEXT = 1;
|
|
|
|
// on-the-fly button hiding
|
|
var HIDE_BACK = 0x0001;
|
|
var HIDE_NEXT = 0x0002;
|
|
var HIDE_CANCEL = 0x0004;
|
|
var HIDE_RESTORE = 0x0008;
|
|
|
|
// Language reboot return codes
|
|
var LANGUAGE_REBOOT_NEVER = 0;
|
|
var LANGUAGE_REBOOT_NOW = 1;
|
|
var LANGUAGE_REBOOT_END = 2;
|
|
|
|
// keycode consts
|
|
var KeyEsc = 0x1B;
|
|
var KeyEnter = 0xD;
|
|
var KeyBackSpc = 0x8;
|
|
var KeyDelete = 0x2E;
|
|
var KeyTab = 0x9;
|
|
var KeyDwnArrow = 0x28;
|
|
var KeyUpArrow = 0x26;
|
|
var KeyLeftArrow = 0x25;
|
|
var KeyRightArrow = 0x27;
|
|
|
|
// 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 EulaObj = null;
|
|
var LangObj = null;
|
|
var PidObj = null;
|
|
var StatusObj = null;
|
|
var DirObj = null;
|
|
var ApiObj = null;
|
|
var RegisterObj = null;
|
|
var FileSystemObj = null;
|
|
var g_Identities2_OK;
|
|
|
|
// 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_OOBEDirPath = window.external.API.get_SystemDirectory() + "\\oobe\\";
|
|
var g_WaterMarkFileNameStr= window.external.API.get_SystemDirectory() + "\\OOBE\\images\\watermrk.gif";
|
|
var g_WaterMarkFileSize = 29683; // size of default watermrk.gif
|
|
var g_bRedial = false;
|
|
var g_LineProblem = 0;
|
|
var g_bFirstServerError = true;
|
|
var g_status = STATUS_OFF;
|
|
var g_ServerErrorCount = 0;
|
|
var g_OEMAddBackURL = "";
|
|
var g_DialingAvailableInCountry = true;
|
|
var g_ModalDialogUp = false;
|
|
var g_OEMNameStr = window.external.Signup.get_OEMName();
|
|
var g_bTapiDone = false;
|
|
|
|
// Mandatory Initialization Code
|
|
if (null == FileSystemObj) {
|
|
FileSystemObj = new ActiveXObject("Scripting.FileSystemObject");
|
|
}
|
|
|
|
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;
|
|
}
|
|
if (null == TapiObj)
|
|
{
|
|
TapiObj = new Object;
|
|
TapiObj = window.external.Tapi;
|
|
}
|
|
if (null == RegisterObj)
|
|
{
|
|
RegisterObj = new Object;
|
|
RegisterObj = window.external.Register;
|
|
}
|
|
if (null == LangObj)
|
|
{
|
|
LangObj = new Object;
|
|
LangObj = window.external.Language;
|
|
}
|
|
|
|
// END Initialization Code
|
|
|
|
// another global, need DirObj first though
|
|
var g_AgentDisabled = true;
|
|
|
|
var L_ContStr_Text="To continue, click";
|
|
var L_NextStr_Text="Next";
|
|
var L_Period_Text=".";
|
|
var L_ClickNextLocStr_Text=""; // for localizers to add stuff without affecting L_Period_Text
|
|
|
|
var L_NextStrTopPercent_Text="83%";
|
|
var L_ClickNextStrTopPercent800_Text="78%";
|
|
var L_ClickNextStrTopPercent1024_Text="84%";
|
|
var L_ClickNextStrLeftPercent_Text="30%";
|
|
|
|
var g_ClickNextStr = " "
|
|
|
|
var g_ClickNextStrWelcome = "";
|
|
|
|
// Set up labelS for various getting connected Congratulations.
|
|
var L_ConnectedDefaultHeading_Text = "Congratulations";
|
|
var L_ConnectedNoInternetHeading_Text = "Could not find the Internet";
|
|
|
|
var L_ConnectedDefault_Text = "You are now connected to the Internet.";
|
|
var L_ConnectedViaICS_Text = "You are now connected to the Internet using ICS connection.";
|
|
var L_ConnectedViaDSLCable_Text = "You are now connected to the Internet via your DSL/Cable connection.";
|
|
var L_ConnectedViaLAN_Text = "You are now connected to the Internet using your LAN connection.";
|
|
var L_ConnectedNoInternet_Text = "Windows was not able to connect to the Internet using your network hardware. You can connect to the Internet later by clicking the Start button, then click <B>Internet</B>. Please click the <B>Next</B> button below to continue setting up Windows.";
|
|
|
|
|
|
var g_Congrats_Type_Heading = L_ConnectedDefaultHeading_Text;
|
|
var g_Congrats_Type = L_ConnectedDefault_Text;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// logError
|
|
//
|
|
// Log information from an error object. trace will send the info to
|
|
// setuplog.txt and the debugger. If
|
|
// HKLM\Software\Microsoft\Windows\CurrentVersion\Setup\OOBE\MsDebug=DWORD:1
|
|
// an alert will be displayed as well.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function logError(funcName, errObj)
|
|
{
|
|
trace( "Exception in " + funcName
|
|
+ " (" + errObj.number.toString(16) + ") "
|
|
+ errObj.description + "\n"
|
|
);
|
|
if (true == DebugObj.get_MsDebugMode())
|
|
{
|
|
alert("OOBE ERROR\n"
|
|
+ "\n Function: " + funcName
|
|
+ "\n Error: " + errObj.number.toString(16)
|
|
+ "\nDescription: " + errObj.description
|
|
);
|
|
}
|
|
}
|
|
|
|
function FormatRequiredFieldLabel(element,error)
|
|
{
|
|
if (error)
|
|
{
|
|
element.className = "text-error";
|
|
if (!(element.innerHTML.charAt(0) == "*"))
|
|
{
|
|
element.innerHTML = "* " + element.innerHTML
|
|
}
|
|
}
|
|
else
|
|
{
|
|
element.className = "text-primary";
|
|
if ((element.innerHTML.charAt(0) == "*"))
|
|
{
|
|
element.innerHTML = element.innerHTML.substring(2,(element.innerHTML.length - 1));
|
|
}
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// General Default LoadMe function
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function _Default_LoadMe(SimpleBack, SimpleNext)
|
|
{
|
|
InitFrameRef();
|
|
|
|
InitButtons(SimpleBack, SimpleNext);
|
|
|
|
if (g.btnNext.style.visibility == "visible")
|
|
g_FirstFocusElement = g.btnNext;
|
|
else if (g.btnSkip.style.visibility == "visible")
|
|
g_FirstFocusElement = g.btnSkip;
|
|
else if (g.btnBack.style.visibility == "visible")
|
|
g_FirstFocusElement = g.btnBack;
|
|
|
|
if (g_FirstFocusElement != null)
|
|
g_FirstFocusElement.focus();
|
|
else
|
|
g.document.body.focus();
|
|
}
|
|
|
|
function New_Default_LoadMe(SimpleBack, SimpleNext)
|
|
{
|
|
InitFrameRef();
|
|
InitNewButtons(SimpleBack, SimpleNext);
|
|
|
|
if (g.btnNext.style.visibility == "visible")
|
|
g_FirstFocusElement = g.btnNext;
|
|
else if (g.btnSkip.style.visibility == "visible")
|
|
g_FirstFocusElement = g.btnSkip;
|
|
else if (g.btnBack.style.visibility == "visible")
|
|
g_FirstFocusElement = g.btnBack;
|
|
|
|
if (g_FirstFocusElement != null)
|
|
g_FirstFocusElement.focus();
|
|
else
|
|
g.document.body.focus();
|
|
}
|
|
|
|
// fini.htm
|
|
|
|
// These vars are set on oobeutil.jsx
|
|
var g_IsActivationSuccessful = false;
|
|
var g_IsMSRegistrationSuccessful = false;
|
|
var g_IsOEMRegistrationSuccessful = false;
|
|
|
|
var g_ShowParagraph = false;
|
|
function ShowFinish_Paragraph_Header()
|
|
{
|
|
if (g_ShowParagraph)
|
|
{
|
|
g.FiniSummaryIntro2.style.display = "inline";
|
|
}
|
|
}
|
|
|
|
function FinishPage_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
|
|
if (g_IsActivationSuccessful)
|
|
{
|
|
var L_ActivateWindows_Text = "You activated your copy of Windows.<BR>";
|
|
|
|
g_ShowParagraph = true;
|
|
g.FiniSummary0.innerHTML = L_ActivateWindows_Text;
|
|
g.FiniSummary0.style.display = "inline";
|
|
}
|
|
|
|
// OEM didn't Pre-reg the machine
|
|
if (1 != window.external.get_RegStatus())
|
|
{
|
|
if (1 == RegisterObj.get_PostToOEM && g_IsOEMRegistrationSuccessful)
|
|
{
|
|
var strOEMName = g_OEMNameStr;
|
|
|
|
if (strOEMName == null || (strOEMName != null && strOEMName.length == 0))
|
|
{
|
|
var L_RegisterdWith_Text = "You registered your computer with the OEM.<BR>";
|
|
|
|
g.FiniSummary1.innerHTML = L_RegisterdWith_Text;
|
|
}
|
|
else
|
|
{
|
|
var L_RegisterdWith_Text = "You registered your computer with %1.<BR>";
|
|
|
|
g.FiniSummary1.innerHTML = ApiObj.FormatMessage(L_RegisterdWith_Text, strOEMName);
|
|
}
|
|
|
|
g_ShowParagraph = true;
|
|
g.FiniSummary1.style.display = "inline";
|
|
}
|
|
|
|
if (g_IsMSRegistrationSuccessful)
|
|
{
|
|
var L_RegisterdWithMS_Text = "You registered your copy of Windows with Microsoft.<BR>";
|
|
|
|
g_ShowParagraph = true;
|
|
g.FiniSummary2.innerHTML = L_RegisterdWithMS_Text;
|
|
g.FiniSummary2.style.display = "inline";
|
|
}
|
|
}
|
|
|
|
var bHasSignup = 0;
|
|
try
|
|
{
|
|
bHasSignup = ApiObj.get_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + "\\TEMP", "ISPSignup");
|
|
}
|
|
catch (e) { bHasSignup = 0;}
|
|
|
|
if (bHasSignup || ConnectedToInternetEx(false))
|
|
{
|
|
var L_SignupWith_Text = "Your computer is configured for Internet access.<BR>";
|
|
|
|
g_ShowParagraph = true;
|
|
g.FiniSummary3.innerHTML = L_SignupWith_Text;
|
|
g.FiniSummary3.style.display = "inline";
|
|
}
|
|
|
|
ShowFinish_Paragraph_Header();
|
|
|
|
if (LANGUAGE_REBOOT_END == LangObj.get_RebootState())
|
|
{
|
|
g.finishmsg.style.display="none";
|
|
g.rebootfinishmsg.style.display="inline";
|
|
}
|
|
|
|
g.msgspan.style.display="inline";
|
|
|
|
if (g.btnNext != null)
|
|
g_FirstFocusElement = g.btnNext;
|
|
else if (g.btnBack != null)
|
|
g_FirstFocusElement = g.btnBack;
|
|
|
|
InitNewButtons();
|
|
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
|
|
if ((g.event.keyCode == KeyEnter) &&
|
|
(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;
|
|
}
|
|
|
|
InitNewButtons();
|
|
}
|
|
|
|
|
|
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., 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()
|
|
{
|
|
|
|
// STATUS_ISP(0) STATUS_PRECONFIG STATUS_NONE STATUS_OFF
|
|
// ------------ ------------- ------------- --------------
|
|
dnCKPT[CKPT_ISPSIGNUP] = new CheckPoint("setup\\isp.htm", SNDX_ISP, SNDX_ISP, SNDX_ISP, SNDX_ISP);
|
|
dnCKPT[CKPT_MIGLIST] = new CheckPoint("setup\\miglist.htm", SNDX_ISP, SNDX_ISP, SNDX_ISP, SNDX_ISP);
|
|
dnCKPT[CKPT_ISPDIAL] = new CheckPoint("setup\\drdyisp.htm", SNDX_ISP, SNDX_ISP, SNDX_ISP, SNDX_ISP);
|
|
dnCKPT[CKPT_REFDIAL] = new CheckPoint("setup\\drdyref.htm", SNDX_ISP, SNDX_ISP, SNDX_ISP, SNDX_ISP);
|
|
dnCKPT[CKPT_MIGDIAL] = new CheckPoint("setup\\drdymig.htm", SNDX_ISP, SNDX_ISP, SNDX_ISP, SNDX_ISP);
|
|
dnCKPT[CKPT_ICONNECT] = new CheckPoint("html\\iconnect\\iconnect.htm",SNDX_ISP, SNDX_ISP, SNDX_ISP, SNDX_ISP);
|
|
dnCKPT[CKPT_OEMISP] = new CheckPoint("html\\ispsgnup\\ispsgnup.htm", SNDX_ISP, SNDX_ISP, SNDX_ISP, SNDX_ISP);
|
|
dnCKPT[CKPT_OEMCUST] = new CheckPoint("html\\oemcust\\oemcust.htm", SNDX_ISP, SNDX_ISP, SNDX_ISP, SNDX_ISP);
|
|
dnCKPT[CKPT_DONE] = new CheckPoint("setup\\fini.htm", SNDX_FINI, SNDX_FINI, SNDX_FINI, SNDX_FINI);
|
|
|
|
PopCKPT();
|
|
|
|
// init simple navigation mappings
|
|
|
|
g_SimpleNavMap= new ActiveXObject("Scripting.Dictionary");
|
|
g_SimpleNavMap.CompareMode = COMPAREMODE_TEXT;
|
|
|
|
iconnect_InitSimpleNavMap();
|
|
}
|
|
|
|
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);
|
|
ApiObj.FlushRegKey(HKEY_LOCAL_MACHINE);
|
|
g_CurrentCKPT = ckpt;
|
|
}
|
|
}
|
|
|
|
function ClearStatusBar()
|
|
{
|
|
StatusBar1.style.backgroundColor = "#bbbbbb";
|
|
StatusBar2.style.backgroundColor = "#bbbbbb";
|
|
StatusBar3.style.backgroundColor = "#bbbbbb";
|
|
StatusBar4.style.backgroundColor = "#bbbbbb";
|
|
StatusBar5.style.backgroundColor = "#bbbbbb";
|
|
}
|
|
|
|
function PaintStatusBar(WhatBar)
|
|
{
|
|
// We use this method so that whenever we skip a step, that step is highlighted as well.
|
|
|
|
var HighlightColor = "#00cc00"; // Green
|
|
|
|
if (WhatBar == "1")
|
|
{
|
|
StatusBar1.style.backgroundColor = HighlightColor;
|
|
}
|
|
if (WhatBar == "2")
|
|
{
|
|
StatusBar1.style.backgroundColor = HighlightColor;
|
|
StatusBar2.style.backgroundColor = HighlightColor;
|
|
}
|
|
if (WhatBar == "3")
|
|
{
|
|
StatusBar1.style.backgroundColor = HighlightColor;
|
|
StatusBar2.style.backgroundColor = HighlightColor;
|
|
StatusBar3.style.backgroundColor = HighlightColor;
|
|
}
|
|
if (WhatBar == "4")
|
|
{
|
|
StatusBar1.style.backgroundColor = HighlightColor;
|
|
StatusBar2.style.backgroundColor = HighlightColor;
|
|
StatusBar3.style.backgroundColor = HighlightColor;
|
|
StatusBar4.style.backgroundColor = HighlightColor;
|
|
}
|
|
if (WhatBar == "5")
|
|
{
|
|
StatusBar1.style.backgroundColor = HighlightColor;
|
|
StatusBar2.style.backgroundColor = HighlightColor;
|
|
StatusBar3.style.backgroundColor = HighlightColor;
|
|
StatusBar4.style.backgroundColor = HighlightColor;
|
|
StatusBar5.style.backgroundColor = HighlightColor;
|
|
}
|
|
}
|
|
|
|
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());
|
|
ApiObj.FlushRegKey(HKEY_LOCAL_MACHINE);
|
|
}
|
|
}
|
|
}
|
|
catch (e) {}
|
|
|
|
if (ckpt > 0 && ckpt < CKPT_MAX)
|
|
{
|
|
g_CurrentCKPT = ckpt;
|
|
}
|
|
else
|
|
g_CurrentCKPT = null;
|
|
}
|
|
|
|
function EmptyCKPTStack()
|
|
{
|
|
while (null != g_CurrentCKPT)
|
|
{
|
|
PopCKPT();
|
|
}
|
|
}
|
|
|
|
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 IsLocalFile()
|
|
{
|
|
try
|
|
{
|
|
return (-1 != g.location.protocol.indexOf("file"));
|
|
}
|
|
catch (e)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// public navigation APIs
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
function SetBack(strURL)
|
|
{
|
|
g_OEMAddBackURL = strURL;
|
|
}
|
|
|
|
// this handles the user's "Skip" requests
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// GoCancel
|
|
//
|
|
// This function is responsible for
|
|
// * Saving state for a page when the Skip button is clicked.
|
|
// * Calling GoNavigate with the checkpoint id of the next checkpoint
|
|
//
|
|
// This function is NOT responsible for
|
|
// * Setting state for the next page. That should be done in GoNavigate.
|
|
//
|
|
// Default behavior is to navigate to the first page of the next checkpoint.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function GoCancel(ckpt)
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null && (g_CurrentCKPT != g_DialCKPT))
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DisableAllButtons();
|
|
|
|
switch (g_CurrentCKPT)
|
|
{
|
|
case CKPT_ISPSIGNUP:
|
|
GoNavigate(CKPT_OEMCUST);
|
|
break;
|
|
|
|
case CKPT_MIGLIST:
|
|
// When skip on the referral dialing, go to finish
|
|
GoNavigate(CKPT_OEMCUST);
|
|
break;
|
|
|
|
case CKPT_REFDIAL:
|
|
case CKPT_MIGDIAL:
|
|
case CKPT_ISPDIAL:
|
|
// When skip on the referral dialing, go to finish
|
|
GoNavigate(CKPT_OEMCUST);
|
|
break;
|
|
|
|
default:
|
|
GoNext();
|
|
break;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// GoBack
|
|
//
|
|
// This function is responsible for
|
|
// * Saving state for a page when the Back button is clicked.
|
|
// * Popping the current checkpoint off the checkpoint stack
|
|
// * Navigating to the previous checkpoint
|
|
//
|
|
// This function is NOT responsible for
|
|
// * Setting state for the next page. That should be done in GoNavigate.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function GoBack(ckpt)
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null && (g_CurrentCKPT != g_DialCKPT))
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DisableAllButtons();
|
|
|
|
if(g_CurrentCKPT == g_DialCKPT)
|
|
ResetDialing();
|
|
else if(g_CurrentCKPT == CKPT_ISPSIGNUP)
|
|
ResetDialing();
|
|
// end if
|
|
|
|
{
|
|
var ckptPrevious = g_CurrentCKPT;
|
|
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()
|
|
{
|
|
window.external.set_StatusIndex(IndexFromCKPT(g_CurrentCKPT, g_status));
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// GoNavigate
|
|
//
|
|
// This function is responsible for setting state prior to navigating to the
|
|
// first page of a checkpoint. This includes:
|
|
// * determining whether the page should be displayed
|
|
// * pushing the checkpoint id on the checkpoint stack
|
|
// * calling Navigate to navigate to the page
|
|
//
|
|
// Default behavior is to push the checkpoint id and navigate to the first page
|
|
// of the checkpoint. If this is the only processing required, use the
|
|
// default case instead of adding a case for the checkpoint.
|
|
//
|
|
// Calling GoNavigate recursively can cause navigation problems. If a page
|
|
// will not be displayed for a checkpoint, the code should fall through to the
|
|
// next case statement instead of calling GoNavigate.
|
|
//
|
|
// DON'T MUCK WITH THE ORDER OF THE CASES IN THE SWITCHES BELOW WITHOUT
|
|
// CONSIDERING FALL-THROUGH
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
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;
|
|
}
|
|
|
|
switch (ckptGoHere)
|
|
{
|
|
case CKPT_ISPSIGNUP:
|
|
trace("GoNavigate: CKPT_ISPSIGNUP");
|
|
|
|
if (HasAnalogModem())
|
|
{
|
|
PushCKPT(CKPT_ISPSIGNUP);
|
|
if (window.external.CalledFromMsn())
|
|
{
|
|
trace("GoNavigate: CKPT_ISPDIAL");
|
|
PushCKPT(CKPT_ISPDIAL);
|
|
Navigate(URLFromCKPT(CKPT_ISPDIAL));
|
|
}
|
|
else
|
|
{
|
|
Navigate(URLFromCKPT(CKPT_ISPSIGNUP));
|
|
}
|
|
break;
|
|
}
|
|
// fall through...
|
|
|
|
// BEGIN OEM CASES. DO NOT ADD CASES between here and CKPT_DONE. Doing so
|
|
// will break navigation.
|
|
//
|
|
case CKPT_OEMISP: // PreConfig case
|
|
trace("GoNavigate: CKPT_OEMISP");
|
|
|
|
if ( (STATUS_PRECONFIG == g_status) && !window.external.GetNoIspPreconfig())
|
|
{
|
|
ResetDialing();
|
|
PushCKPT(CKPT_OEMISP);
|
|
Navigate(URLFromCKPT(CKPT_OEMISP));
|
|
break;
|
|
}
|
|
|
|
// fall through...
|
|
|
|
case CKPT_OEMCUST:
|
|
|
|
trace("GoNavigate: CKPT_OEMCUST");
|
|
// Next line of code added by TandyT to support special ISP signup process commands
|
|
// Calls to function in agtcore.js
|
|
|
|
|
|
|
|
ResetDialing();
|
|
if (1 == DirObj.get_OEMCust)
|
|
{
|
|
PushCKPT(CKPT_OEMCUST);
|
|
Navigate(URLFromCKPT(CKPT_OEMCUST));
|
|
break;
|
|
}
|
|
// fall through...
|
|
|
|
//
|
|
// END OEM CASES
|
|
|
|
case CKPT_DONE:
|
|
trace("GoNavigate: CKPT_DONE");
|
|
ResetDialing();
|
|
PushCKPT(CKPT_DONE);
|
|
Navigate(URLFromCKPT(CKPT_DONE));
|
|
break;
|
|
|
|
default:
|
|
trace("GoNavigate: default (" + ckptGoHere + ")");
|
|
PushCKPT(ckptGoHere); // sets g_CurrentCKPT = ckptGoHere;
|
|
Navigate(URLFromCKPT(ckptGoHere));
|
|
break;
|
|
}
|
|
|
|
StatusNavigate();
|
|
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// GoNext
|
|
//
|
|
// This function is responsible for
|
|
// * Saving state for a page when the Next button is clicked.
|
|
// * Calling GoNavigate with the checkpoint id of the next checkpoint
|
|
//
|
|
// This function is NOT responsible for
|
|
// * Setting state for the next page. That should be done in GoNavigate.
|
|
//
|
|
// Default behavior is to call GoNavigate with an invalid checkpoint id.
|
|
// Therefore each checkpoint MUST have a case in the switch statement.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
function GoNext()
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DisableAllButtons();
|
|
|
|
switch (g_CurrentCKPT)
|
|
{
|
|
case CKPT_ISPSIGNUP:
|
|
trace("GoNext: CKPT_ISPSIGNUP");
|
|
|
|
|
|
if (g.radioGetNewISP.checked)
|
|
{
|
|
if (window.external.CheckOnlineStatus && window.external.CheckStayConnected("msobe.isp"))
|
|
{
|
|
PushCKPT(CKPT_ISPDIAL);
|
|
g_IgnoreDialErr = false;
|
|
window.external.Connect(CONNECTED_ISP_SIGNUP, "msobe.isp");
|
|
}
|
|
else
|
|
{
|
|
window.external.Hangup();
|
|
GoNavigate(CKPT_ISPDIAL); // Getting Online
|
|
}
|
|
}
|
|
else if (g.radioMigrateISP.checked)
|
|
{
|
|
// We want the default behavior to be showing the migration path if ISPMigrate = 0 or
|
|
// is not specified
|
|
if (!DirObj.get_ShowISPMigration())
|
|
{
|
|
if (window.external.CheckOnlineStatus && window.external.CheckStayConnected("migrate.isp"))
|
|
{
|
|
g_bTapiDone = false;
|
|
GoNavigate(CKPT_REFDIAL);
|
|
}
|
|
else
|
|
{
|
|
window.external.Hangup();
|
|
GoNavigate(CKPT_REFDIAL);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GoNavigate(CKPT_ICONNECT);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GoCancel(); // skip checked
|
|
}
|
|
|
|
break;
|
|
|
|
case CKPT_REFDIAL:
|
|
GoNavigate(CKPT_ICONNECT);
|
|
break;
|
|
|
|
case CKPT_ICONNECT:
|
|
GoNavigate(CKPT_OEMCUST);
|
|
break;
|
|
|
|
case CKPT_ISPDIAL:
|
|
GoNavigate(CKPT_OEMCUST);
|
|
break;
|
|
|
|
case CKPT_OEMISP:
|
|
GoNavigate(CKPT_OEMCUST);
|
|
break;
|
|
|
|
case CKPT_OEMCUST:
|
|
GoNavigate(CKPT_DONE);
|
|
break;
|
|
|
|
case CKPT_DONE:
|
|
window.external.Finish();
|
|
break;
|
|
|
|
default:
|
|
// BUGBUG should we remove the default altogether?
|
|
GoNavigate(Need_to_handle_this_CKPT_in_GoNext);
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
// BUGBUG temporary until MSN changes code
|
|
function GoOffline()
|
|
{
|
|
GoNext();
|
|
}
|
|
|
|
|
|
function GetCurrentPageName() {
|
|
|
|
var re = new RegExp("\\\\([^\\\\]+)$");
|
|
re.exec(g.window.location.pathname);
|
|
|
|
return RegExp.$1;
|
|
}
|
|
|
|
// these handle next/back navigation for non-checkpoint pages
|
|
function SimpleNavBack()
|
|
{
|
|
g.window.history.back();
|
|
}
|
|
|
|
/*
|
|
This version of SimpleNavNext contains the workaround for IE 90257. not enabled yet
|
|
another part of 90527 fix is in InitButtons()
|
|
*/
|
|
|
|
function SimpleNavNext() // original version that does not fix IE 90257
|
|
{
|
|
var CurPage = GetCurrentPageName();
|
|
var NextPage = g_SimpleNavMap.Item(CurPage);
|
|
Navigate(NextPage);
|
|
}
|
|
|
|
// Description: Disable all the buttons
|
|
// Used to prevent script error caused by
|
|
// double clicking or rapid clicking
|
|
// of two different buttons. E.g. when someone click
|
|
// next and back quickly.
|
|
//
|
|
function DisableAllButtons()
|
|
{
|
|
try
|
|
{
|
|
if(g.btnNext!=null)
|
|
{
|
|
g.btnNext.onclick=null;
|
|
}
|
|
} catch (e) {}
|
|
|
|
try
|
|
{
|
|
if(g.btnBack!=null)
|
|
{
|
|
g.btnBack.onclick=null;
|
|
}
|
|
} catch (e) {}
|
|
|
|
try
|
|
{
|
|
if(g.btnSkip!=null)
|
|
{
|
|
g.btnSkip.onclick=null;
|
|
}
|
|
} catch (e) {}
|
|
|
|
try
|
|
{
|
|
g.btnNext.disabled=true;
|
|
g.btnNext.className="newbuttonsNext-disabled";
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnBack.disabled=true;
|
|
g.btnBack.className="newbuttonsBack-disabled";
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnSkip.disabled=true;
|
|
g.btnSkip.className="newbuttonsSkip-disabled";
|
|
}
|
|
catch(e) {}
|
|
}
|
|
|
|
function GetAncestorByTag(elem, tagName)
|
|
{
|
|
if (elem == null || tagName == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var aNode = elem.parentNode;
|
|
var tagNameUpperCase = tagName.toUpperCase();
|
|
while (aNode != null && aNode.nodeName != tagNameUpperCase)
|
|
{
|
|
aNode = aNode.parentNode;
|
|
}
|
|
|
|
return aNode;
|
|
}
|
|
|
|
|
|
// 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()
|
|
//
|
|
// SIDE-EFFECT: This function also sets the watermark appropriate for the screen size.
|
|
//
|
|
function InitFrameRef(ExternalModule)
|
|
{
|
|
trace("GoNext: InitFrameRef");
|
|
try
|
|
{
|
|
document.frames("connDelay").frameElement.style.display="none";
|
|
document.frames("connDelay").frameElement.style.zIndex=-1;
|
|
// We want to see a black frame around OOBE if our res. is > 1024.
|
|
// We initially set it to blue so that we will have a smooth transition from
|
|
// our animation to OOBE.
|
|
OOBEDocBody.style.backgroundColor="#000000";
|
|
}
|
|
catch (e)
|
|
{
|
|
}
|
|
|
|
g_LastButtonText = null;
|
|
g_FirstFocusElement = null;
|
|
g_LastKeyDown = null;
|
|
|
|
g = document.frames("msoobeMain");
|
|
try
|
|
{
|
|
g.document.body.style.backgroundColor = "transparent";
|
|
}
|
|
catch(e){}
|
|
|
|
try
|
|
{
|
|
if (g != null)
|
|
{
|
|
if(g.btnNext!=null)
|
|
g.btnNext.disabled=false;
|
|
|
|
if(g.btnBack!=null)
|
|
g.btnBack.disabled=false;
|
|
|
|
if(g.btnSkip!=null)
|
|
g.btnSkip.disabled=false;
|
|
|
|
}
|
|
|
|
g.document.body.onkeydown = OnKeyDown;
|
|
g.document.body.style.cursor = 'auto';
|
|
}
|
|
catch(e){}
|
|
|
|
}
|
|
|
|
function HideButtons(buttons)
|
|
{
|
|
if (null != g.btnBack && (buttons & HIDE_BACK))
|
|
{
|
|
g.btnBack.Hide = true;
|
|
}
|
|
|
|
if (null != g.btnNext && (buttons & HIDE_NEXT))
|
|
{
|
|
g.btnNext.Hide = true;
|
|
}
|
|
|
|
|
|
if (null != g.spanCancel && (buttons & HIDE_CANCEL))
|
|
{
|
|
g.btnSkip.Hide = true;
|
|
}
|
|
/*
|
|
if (null != g.spanRestore && (buttons & HIDE_RESTORE))
|
|
{
|
|
g.btnRestore.Hide = true;
|
|
}
|
|
*/
|
|
}
|
|
|
|
|
|
function HandleButtonMouseOver()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="buttons-hover";
|
|
}
|
|
|
|
function HandleButtonMouseOut()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="buttons";
|
|
}
|
|
|
|
function InitButtons(SimpleBack, SimpleNext)
|
|
{
|
|
// Some js files like dialmgr.js are both being used by OOBE and desktop activation,
|
|
// and the call to Initbuttons could either be in msobshel.htx or actshell.htx, so it's best to leave
|
|
// the initbuttons in the js files as it is and perform a checking here if we are in full screen OOBE or not.
|
|
if (!InReminderMode())
|
|
{
|
|
InitNewButtons(SimpleBack, SimpleNext);
|
|
}
|
|
else
|
|
{
|
|
if(g.btnSkip!=null) {
|
|
g.btnSkip.onmouseover = HandleButtonMouseOver;
|
|
g.btnSkip.onmouseout = HandleButtonMouseOut;
|
|
|
|
if(!g.btnSkip.disabled) {
|
|
g.btnSkip.onclick = GoCancel;
|
|
|
|
// dont enable onfocus,onblur handlers until issues in 88615 are resolved
|
|
// g.btnSkip.onfocus = HandleButtonMouseOver;
|
|
// g.btnSkip.onblur = HandleButtonMouseOut;
|
|
|
|
g.btnSkip.className="buttons";
|
|
} else {
|
|
g.btnSkip.className="buttons-disabled";
|
|
}
|
|
}
|
|
|
|
if (g.btnNext != null)
|
|
{
|
|
g.btnNext.onmouseover = HandleButtonMouseOver;
|
|
g.btnNext.onmouseout = HandleButtonMouseOut;
|
|
|
|
if (!g.btnNext.disabled)
|
|
{
|
|
if (SimpleNext == null)
|
|
{
|
|
g.btnNext.onclick = GoNext;
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.onclick = SimpleNavNext;
|
|
}
|
|
|
|
g.btnNext.className="buttons";
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.className="buttons-disabled";
|
|
}
|
|
}
|
|
|
|
if (g.btnBack != null)
|
|
{
|
|
g.btnBack.onmouseover = HandleButtonMouseOver;
|
|
g.btnBack.onmouseout = HandleButtonMouseOut;
|
|
|
|
if (!g.btnBack.disabled)
|
|
{
|
|
if (SimpleBack == null)
|
|
{
|
|
g.btnBack.onclick = GoBack;
|
|
}
|
|
else
|
|
{
|
|
g.btnBack.onclick = SimpleNavBack;
|
|
}
|
|
|
|
g.btnBack.className="buttons";
|
|
}
|
|
else
|
|
{
|
|
g.btnBack.className="buttons-disabled";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
// New OOBE buttons
|
|
// -----------------------------------------------
|
|
function HandleBackButtonMouseOver()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsBack-hover";
|
|
}
|
|
|
|
function HandleBackButtonMouseOut()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsBack";
|
|
}
|
|
|
|
function HandleBackButtonMouseDown()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsBack-down";
|
|
}
|
|
|
|
function HandleSkipButtonMouseOver()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsSkip-hover";
|
|
}
|
|
|
|
function HandleSkipButtonMouseOut()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsSkip";
|
|
}
|
|
|
|
function HandleSkipButtonMouseDown()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsSkip-down";
|
|
}
|
|
|
|
function HandleNextButtonMouseOver()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsNext-hover";
|
|
}
|
|
|
|
function HandleNextButtonMouseOut()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsNext";
|
|
}
|
|
|
|
function HandleNextButtonMouseDown()
|
|
{
|
|
if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
this.className="newbuttonsNext-down";
|
|
}
|
|
|
|
|
|
function InitNewButtons(NewSimpleBack, NewSimpleNext)
|
|
{
|
|
|
|
if(g.btnSkip!=null)
|
|
{
|
|
g.btnSkip.onmouseover = HandleSkipButtonMouseOver;
|
|
g.btnSkip.onmouseout = HandleSkipButtonMouseOut;
|
|
g.btnSkip.onmousedown = HandleSkipButtonMouseDown;
|
|
|
|
if(!g.btnSkip.disabled)
|
|
{
|
|
g.btnSkip.onclick = GoCancel;
|
|
g.btnSkip.className="newbuttonsSkip";
|
|
}
|
|
else
|
|
{
|
|
g.btnSkip.className="newbuttonsSkip-disabled";
|
|
}
|
|
}
|
|
|
|
if (g.btnNext != null)
|
|
{
|
|
g.btnNext.onmouseover = HandleNextButtonMouseOver;
|
|
g.btnNext.onmouseout = HandleNextButtonMouseOut;
|
|
g.btnNext.onmousedown = HandleNextButtonMouseDown;
|
|
|
|
if (!g.btnNext.disabled)
|
|
{
|
|
if (NewSimpleNext == null)
|
|
g.btnNext.onclick = GoNext;
|
|
else
|
|
g.btnNext.onclick = SimpleNavNext;
|
|
|
|
g.btnNext.className="newbuttonsNext";
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.className="newbuttonsNext-disabled";
|
|
}
|
|
}
|
|
|
|
if (g.btnBack != null)
|
|
{
|
|
g.btnBack.onmouseover = HandleBackButtonMouseOver;
|
|
g.btnBack.onmouseout = HandleBackButtonMouseOut;
|
|
g.btnBack.onmousedown = HandleBackButtonMouseDown;
|
|
|
|
if (!g.btnBack.disabled)
|
|
{
|
|
if (NewSimpleBack == null)
|
|
g.btnBack.onclick = GoBack;
|
|
else
|
|
g.btnBack.onclick = SimpleNavBack;
|
|
|
|
g.btnBack.className="newbuttonsBack";
|
|
}
|
|
else
|
|
{
|
|
g.btnBack.className="newbuttonsBack-disabled";
|
|
}
|
|
}
|
|
|
|
var btn;
|
|
|
|
if (g.btnNext!=null)
|
|
{
|
|
btn = g.btnNext;
|
|
}
|
|
else if (g.btnBack!=null)
|
|
{
|
|
btn = g.btnBack;
|
|
}
|
|
else (g.btnSkip!=null)
|
|
{
|
|
btn = g.btnSkip;
|
|
}
|
|
|
|
var ButtonLayoutTable = GetAncestorByTag(btn, "table");
|
|
if ((ButtonLayoutTable != null) &&
|
|
(ButtonLayoutTable.className == "newbuttonposition"))
|
|
{
|
|
var styleObj = ButtonLayoutTable.style;
|
|
|
|
if (g.document.body.scrollHeight > g.document.body.clientHeight)
|
|
{
|
|
styleObj.position = "relative";
|
|
styleObj.top = "0%";
|
|
styleObj.width = "98%";
|
|
}
|
|
|
|
if (g.document.body.scrollHeight <= g.document.body.clientHeight)
|
|
{
|
|
styleObj.position = "absolute";
|
|
styleObj.top =
|
|
(parseInt(100 - 35 * 100 / parseInt(MainFrameTable.style.height)) + "%");
|
|
styleObj.width = "110%";
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
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;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
// AGENT: SelectClick is used by Agent
|
|
|
|
function OnSelectClick()
|
|
{
|
|
|
|
}
|
|
|
|
// AGENT: OnClick is used by Agent
|
|
|
|
function OnClick()
|
|
{
|
|
|
|
}
|
|
|
|
// AGENT: Focus functions are used by Agent
|
|
|
|
function OnFocus()
|
|
{
|
|
// Put other code here that needs access to the focus event
|
|
|
|
|
|
}
|
|
|
|
// 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"); // BUGBUG: should \ be escaped?
|
|
var re2 = new RegExp("\D"); // BUGBUG: should \ be escaped?
|
|
|
|
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"); // BUGBUG: should \ be escaped?
|
|
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()
|
|
{
|
|
var DTWindowHeight = document.body.clientHeight;
|
|
var DTWindowWidth = document.body.clientWidth;
|
|
|
|
ScreenFrame.style.height = DTWindowHeight - 30;
|
|
ScreenFrame.style.width = DTWindowWidth;
|
|
|
|
NewMicrosoftLogo.src = 'images/mslogo.jpg';
|
|
|
|
NewWatermarkBackground.src = 'images/newmark1.jpg';
|
|
NewWatermarkTop.src = 'images/newtop1.jpg';
|
|
NewWatermarkBottom.src = 'images/newbtm1.jpg';
|
|
|
|
NewWatermarkTop.style.top = -8;
|
|
NewWatermarkBottom.style.top = parseInt(ScreenFrame.style.height) - 19;
|
|
|
|
|
|
MainFrameTable.style.top = parseInt(NewWatermarkTop.style.top) +
|
|
56; // NewWatermarkTop.style.height
|
|
MainFrameTable.style.height = parseInt(NewWatermarkBottom.style.top) -
|
|
parseInt(MainFrameTable.style.top);
|
|
|
|
if (window.parent.document.dir == "rtl")
|
|
spnAssist.style.left = 10;
|
|
|
|
}
|
|
|
|
|
|
function InitApplication()
|
|
{
|
|
OOBEDocBody.style.cursor = "wait"; // show "wait" cursor while initializing
|
|
OOBEDocBody.style.backgroundColor="black";
|
|
|
|
g_bStartup = true;
|
|
InitFrameRef();
|
|
|
|
// Check if oemlogo under [Branding] is present in oobeinfo.ini,
|
|
// If so, check if that file does exists, and then use it.
|
|
var OEMLogoFile = null;
|
|
OEMLogoFile = ApiObj.get_INIKey("branding", "oemlogo");
|
|
if ( (OEMLogoFile != null)
|
|
&& (OEMLogoFile.length>0)
|
|
&& FileSystemObj.FileExists(g_OOBEDirPath+"images\\"+OEMLogoFile) )
|
|
{
|
|
spnOEMLogo.style.visibility="visible";
|
|
spnOEMLogo.style.backgroundImage = 'url(images/' + OEMLogoFile + ')';
|
|
}
|
|
|
|
SetupPageLayout();
|
|
|
|
InitCKPT();
|
|
|
|
|
|
|
|
EmptyCKPTStack();
|
|
|
|
spnPage.style.visibility = "visible";
|
|
|
|
g_PreferredConnection = CONNECTIONTYPE_MODEM;
|
|
|
|
window.external.SetICWCompleted();
|
|
|
|
// Navigate to proper page
|
|
InitStatusMenu();
|
|
OOBEDocBody.style.cursor = "default";
|
|
ScreenFrame.style.display = "inline";
|
|
|
|
GoNavigate(CKPT_ISPSIGNUP);
|
|
|
|
// Now that we've navigated, make sure we show the OOBE window.
|
|
window.external.ShowOOBEWindow();
|
|
|
|
}
|
|
|
|
function InitStatusMenu()
|
|
{
|
|
trace("InitStatusMenu");
|
|
if ( (1 == DirObj.get_Offline() || false == InternetCapabilityExists() ))
|
|
{
|
|
g_status = STATUS_OFF;
|
|
StatusObj.set_Status(NOLAUNCHISPSIGNUP, true);
|
|
window.external.LoadStatusItems("No Modem");
|
|
}
|
|
else
|
|
{
|
|
if (UseIcs())
|
|
{
|
|
window.external.TriggerIcsCallback(true);
|
|
}
|
|
else
|
|
{
|
|
window.external.TriggerIcsCallback(false);
|
|
}
|
|
|
|
var str = DirObj.get_ISPSignup().toUpperCase();
|
|
if ("MSN" == str)
|
|
{
|
|
g_status = STATUS_ISP;
|
|
if ( window.external.get_RegStatus() )
|
|
window.external.LoadStatusItems("MSN(No Reg)");
|
|
else
|
|
window.external.LoadStatusItems("MSN");
|
|
}
|
|
else if ("OFFLINE" == str)
|
|
{
|
|
g_status = STATUS_ISP;
|
|
if ( window.external.get_RegStatus() )
|
|
window.external.LoadStatusItems("Offline(No Reg)");
|
|
else
|
|
window.external.LoadStatusItems("Offline");
|
|
}
|
|
else if ("PRECONFIG" == str)
|
|
{
|
|
g_status = STATUS_PRECONFIG;
|
|
if ( window.external.get_RegStatus() )
|
|
window.external.LoadStatusItems("Preconfig(No Reg)");
|
|
else
|
|
window.external.LoadStatusItems("Preconfig");
|
|
}
|
|
else
|
|
{
|
|
g_status = STATUS_NONE;
|
|
StatusObj.set_Status(NOLAUNCHISPSIGNUP, true);
|
|
if ( window.external.get_RegStatus() )
|
|
window.external.LoadStatusItems("None(No Reg)");
|
|
else
|
|
window.external.LoadStatusItems("None");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function ProcessQueuedEvents() {
|
|
// flush all WM_ events in windows queue.
|
|
// workaround for IE 103880, 'white flashes in statpane & button on page unload'
|
|
window.external.ProcessQueuedEvents();
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// isp.htm
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
var g_bRadioMigrateISP=false;
|
|
|
|
var g_MSNISP=false;
|
|
var g_ExistISP=false;
|
|
var g_NoISP=false;
|
|
|
|
function IspLoadMe()
|
|
{
|
|
InitFrameRef();
|
|
|
|
if (g_status == STATUS_ISP || g_status == STATUS_OFF)
|
|
{
|
|
g.radioGetNewISP.style.display = "inline";
|
|
g.ISP_New.style.display = "inline";
|
|
g.radioGetNewISP.checked=true;
|
|
g_FirstFocusElement = g.radioGetNewISP;
|
|
}
|
|
else
|
|
{
|
|
g.radioGetNewISP.style.display = "none";
|
|
g.ISP_New.style.display = "none";
|
|
g.radioMigrateISP.checked=true;
|
|
g_FirstFocusElement = g.radioMigrateISP;
|
|
}
|
|
|
|
InitNewButtons();
|
|
g.btnBack.style.visibility = "hidden";
|
|
g.BackBtnLocalText.style.visibility = "hidden";
|
|
g_FirstFocusElement.focus();
|
|
}
|
|
|
|
function IspUnLoad()
|
|
{
|
|
try
|
|
{
|
|
g_bRadioMigrateISP = (g.event.srcElement==g.radioMigrateISP);
|
|
}
|
|
catch (e) {}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// DO NOT REMOVE THIS FUNCTION THIS WILL GET CALLED WHEN F1 IS
|
|
// PRESSED.
|
|
////////////////////////////////////////////////////////////////////
|
|
function OnHelp()
|
|
{
|
|
// Invoke MSAgent
|
|
|
|
}
|
|
|
|
</script>
|
|
|
|
</HEAD>
|
|
|
|
<BODY ID=OOBEDocBody leftMargin=0 DIR=LTR onload="InitApplication();" scroll=no tabIndex=-1 topMargin=0 language=javascript onhelp="Agent_OnUserRequestAssistant();">
|
|
<SPAN ID=junkspan style="height:2px; width:2px; background-color:black; z-index:99; display:none">
|
|
</SPAN>
|
|
|
|
<SPAN ID=ScreenFrame style="height:100%; width:100%; position:absolute; display:none">
|
|
|
|
<IMG ID=NewWatermarkBackground style="LEFT: 0px; TOP: 0px; POSITION: absolute; z-index:-99;" alt="">
|
|
<IMG ID=NewWatermarkTop style="display: inline; LEFT: 0px; TOP: 0px; POSITION: absolute; z-index:-98;" alt="">
|
|
<IMG ID=NewWatermarkBottom style="display: inline; LEFT: 0px; TOP: 0px; POSITION: absolute; z-index:-97;" alt="">
|
|
<IMG ID=NewMicrosoftLogo style="display: inline; LEFT: 20px; TOP: 5px; POSITION: absolute; z-index:-96;" alt="">
|
|
|
|
<SPAN id=spnOEMLogo style="visibility:hidden; position:absolute; TOP:7px; LEFT:525px; width:255px; HEIGHT:40px; z-index:10; background-repeat:no-repeat;">
|
|
</SPAN>
|
|
|
|
<TABLE border=0 ID=MainFrameTable cellpadding=0 cellspacing=0 style="z-index:6; position:absolute; left:0px; top:25px; width:100%; height:97%">
|
|
<TR>
|
|
<TD style="height:100%">
|
|
<SPAN id=spnPage style="VISIBILITY: hidden; z-index:4; width: 100%; height:100%;" tabIndex=-1>
|
|
<SPAN id=spnMainFrame style="width: 100%; height:100%" tabIndex=-1>
|
|
<IFRAME ALLOWTRANSPARENCY="true" id=ifrmMainFrame frameBorder=no scrolling=auto width="100%" height="100%" name=msoobeMain tabIndex=0></IFRAME>
|
|
<IFRAME ALLOWTRANSPARENCY="true" id=ifrmConnDelay frameBorder=no style="display:none; position:absolute; z-index:-1; left: 0px; top: 0px;" scrolling=no width="100%" height="100%" name=connDelay tabIndex=-1 src="setup/dtiwait.htm"></IFRAME>
|
|
</SPAN>
|
|
</SPAN>
|
|
</TD>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
</SPAN>
|
|
</BODY>
|
|
</HTML>
|