1569 lines
40 KiB
JavaScript
1569 lines
40 KiB
JavaScript
<HTML>
|
|
<HEAD>
|
|
<TITLE>Microsoft Out-of-Box Experience</TITLE>
|
|
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<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.
|
|
|
|
// Checkpoint constants
|
|
var CKPT_START = 1;
|
|
var CKPT_TAPI = 2;
|
|
var CKPT_DIALING = 3;
|
|
var CKPT_DIALTONE = 4;
|
|
var CKPT_MSNINTRO = 6;
|
|
var CKPT_WINMSNEULA = 7;
|
|
var CKPT_IAASSIGNED = 8;
|
|
var CKPT_PASSPORT = 9;
|
|
var CKPT_PIDKEY = 10;
|
|
var CKPT_MSNPORTAL = 12;
|
|
var CKPT_MODEMCANCEL = 13;
|
|
var CKPT_MOUSE = 14;
|
|
var CKPT_REGKB = 15;
|
|
var CKPT_OEMHW = 16;
|
|
var CKPT_USERINFO = 17;
|
|
var CKPT_EULA = 18;
|
|
var CKPT_PID = 19;
|
|
var CKPT_OEMISP1 = 20;
|
|
var CKPT_OEMISP2 = 21;
|
|
var CKPT_OEMISP3 = 22;
|
|
var CKPT_CONGRATS = 23;
|
|
var CKPT_CONNECT = 24;
|
|
var CKPT_OEMREG = 25;
|
|
var CKPT_INSTALLED = 26;
|
|
var CKPT_ERROR = 27;
|
|
var CKPT_REGKBCOMMIT = 28;
|
|
var CKPT_BADPID = 29;
|
|
var CKPT_MSNINFO = 30;
|
|
var CKPT_MSNIDPASS = 31;
|
|
var CKPT_MSNCONSET = 32;
|
|
var CKPT_MSNPAYMENT = 33;
|
|
var CKPT_PRIVACYGUARANTEE = 34;
|
|
var CKPT_PASSSIGN = 35;
|
|
var CKPT_REGISTER = 36;
|
|
|
|
|
|
// CheckDialReady errors
|
|
var ERR_COMM_NO_ERROR = 0;
|
|
var ERR_COMM_OOBE_COMP_MISSING = 1;
|
|
var ERR_COMM_UNKNOWN = 2;
|
|
var ERR_COMM_NOMODEM = 3;
|
|
var ERR_COMM_RAS_TCP_NOTINSTALL = 4;
|
|
|
|
// Dialing errors
|
|
var DERR_DIALTONE = -1;
|
|
var DERR_BUSY = -2;
|
|
var DERR_SERVERBUSY = -3;
|
|
|
|
// Various objects
|
|
var TapiObj = null;
|
|
var InfoObj = null;
|
|
var EulaObj = null;
|
|
var LangObj = null;
|
|
var PidObj = null;
|
|
var StatusObj = null;
|
|
var DirObj = null;
|
|
|
|
// References to objects on msoobeMain
|
|
var g = null;
|
|
|
|
// global string
|
|
var g_strPrefix = "";
|
|
|
|
// Mandatory Initialization Code
|
|
if (StatusObj == null)
|
|
{
|
|
StatusObj = new Object;
|
|
StatusObj = window.external.Status;
|
|
}
|
|
if (DirObj == null)
|
|
{
|
|
DirObj = new Object;
|
|
DirObj = window.external.Directions;
|
|
}
|
|
if (InfoObj == null)
|
|
{
|
|
InfoObj = new Object;
|
|
InfoObj = window.external.UserInfo;
|
|
}
|
|
// END Initialization Code
|
|
|
|
// start.htm
|
|
function Start_OnKeyPress()
|
|
{
|
|
// 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(CKPT_START);
|
|
}
|
|
}
|
|
|
|
// Function: Start_LoadMe
|
|
// Description: This function is called after start.htm is
|
|
// loaded. we then initialize Items on the page.
|
|
// we also populate the edits with any values already
|
|
// found in the registry.
|
|
//
|
|
function Start_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
|
|
// disable the next button until any field has a value.
|
|
g.btnNext.disabled = true;
|
|
|
|
InfoObj = new Object;
|
|
InfoObj = window.external.UserInfo;
|
|
g.edt_FirstName.value = InfoObj.get_FirstName();
|
|
g.edt_MiddleName.value = InfoObj.get_MiddleInitial();
|
|
g.edt_LastName.value = InfoObj.get_LastName();
|
|
|
|
// set focus on the first edit field.
|
|
g.edt_FirstName.focus();
|
|
Start_CheckEnableNextButton();
|
|
InitButtons();
|
|
}
|
|
|
|
// Function: Start_CheckEdits
|
|
// Description: This function is called everytime an OnClick
|
|
// event fires on the page. This is done so if the user
|
|
// loses focus from one of the edits we can push them
|
|
// in the right direction and hint them along the way
|
|
// Or if all elements are filled then we enabled
|
|
// the next button or if any value is 0 then we
|
|
// disable the next button
|
|
//
|
|
function Start_CheckEdits()
|
|
{
|
|
if ((g.event.srcElement != g.edt_FirstName) &&
|
|
(g.event.srcElement != g.edt_MiddleName) &&
|
|
(g.event.srcElement != g.edt_LastName))
|
|
{
|
|
Start_CheckEnableNextButton();
|
|
}
|
|
}
|
|
|
|
// Function: Start_CheckEnableNextButton
|
|
// Description: This function is called everytime a keyup
|
|
// event fires on a edit box for first, middle, or last
|
|
// name. We then see if we should enable or disable the
|
|
// next button based on if every field has a value.
|
|
//
|
|
function Start_CheckEnableNextButton()
|
|
{
|
|
if ((g.edt_FirstName.value.length != 0) ||
|
|
(g.edt_MiddleName.value.length != 0) ||
|
|
(g.edt_LastName.value.length != 0))
|
|
{
|
|
g.btnNext.disabled = false;
|
|
InitButtons();
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.disabled = true;
|
|
InitButtons();
|
|
}
|
|
}
|
|
// END start.htm
|
|
|
|
// tapi.htm
|
|
function TapiLoadMe()
|
|
{
|
|
InitGlobals();
|
|
TapiObj = new Object;
|
|
TapiObj = window.external.Tapi;
|
|
|
|
InitButtons();
|
|
RetrieveTapi();
|
|
}
|
|
|
|
function StoreTapi()
|
|
{
|
|
TapiObj.set_CountryIndex = g.selCountry.selectedIndex;
|
|
// TapiObj.set_AreaCode = g.edtAreaCode.value;
|
|
TapiObj.set_PhoneSystem = radioTouchTone.value ? 1 : 0;
|
|
// TapiObj.set_CallWaiting = g.edtCallWaiting.value;
|
|
TapiObj.set_DialOut = g.edtOutsideLine.value;
|
|
}
|
|
|
|
function RetrieveTapi()
|
|
{
|
|
var fTapi = TapiObj.IsTAPIConfigured;
|
|
var ilen = TapiObj.get_NumOfCountry;
|
|
for (var i = 0; i < ilen; i++)
|
|
{
|
|
var oOption = g.document.createElement("OPTION");
|
|
oOption.text = TapiObj.get_CountryNameForIndex(i);
|
|
g.selCountry.add(oOption);
|
|
}
|
|
g.selCountry.selectedIndex = TapiObj.get_CountryIndex;
|
|
|
|
//g.edtAreaCode.value = TapiObj.get_AreaCode;
|
|
radioTouchTone.value = TapiObj.get_PhoneSystem ? true : false;
|
|
g.edtCallWaiting.value = //(TapiObj.get_CallWaiting == "") ? TapiObj.get_CallWaiting :
|
|
"*70";
|
|
g.edtOutsideLine.value = TapiObj.get_DialOut;
|
|
}
|
|
|
|
function tapi_CallWaitingClicked()
|
|
{
|
|
if (radioCallWaiting[0].checked == true)
|
|
{
|
|
spanCallWaitingDisable.style.visibility = "visible";
|
|
}
|
|
else
|
|
{
|
|
spanCallWaitingDisable.style.visibility = "hidden";
|
|
}
|
|
}
|
|
|
|
function tapi_OutsideLineClicked()
|
|
{
|
|
if (radioOutsideLine[0].checked == true)
|
|
{
|
|
spanOutsideLine.style.visibility = "visible";
|
|
}
|
|
else
|
|
{
|
|
spanOutsideLine.style.visibility = "hidden";
|
|
}
|
|
}
|
|
// END tapi.htm
|
|
|
|
// connect.htm
|
|
function connect_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
setTimeout("DoDial()" , 40);
|
|
}
|
|
|
|
function DoDial()
|
|
{
|
|
g.spnDialing.style.color = 0x990000;
|
|
g.spnConnecting.style.color = 0x999999;
|
|
g.spnConnected.style.color = 0x999999;
|
|
window.external.Dial("msobe.idp");
|
|
}
|
|
|
|
<!--REQUIRED FUNCTION PROTOTYPE :: DO NOT ALTER-->
|
|
function OnDialing()
|
|
{
|
|
//"Dialing"
|
|
}
|
|
|
|
<!--REQUIRED FUNCTION PROTOTYPE :: DO NOT ALTER-->
|
|
function OnConnecting()
|
|
{
|
|
//"Connecting"
|
|
g.spnDialing.style.color = 0x999999;
|
|
g.spnConnecting.style.color = 0x990000;
|
|
g.spnConnected.style.color = 0x999999;
|
|
}
|
|
|
|
<!--REQUIRED FUNCTION PROTOTYPE :: DO NOT ALTER-->
|
|
function OnDownloading()
|
|
{
|
|
//"Downloading"
|
|
g.spnDialing.style.color = 0x999999;
|
|
g.spnConnecting.style.color = 0x999999;
|
|
g.spnConnected.style.color = 0x990000;
|
|
}
|
|
|
|
<!--REQUIRED FUNCTION PROTOTYPE :: DO NOT ALTER-->
|
|
function OnDisconnect()
|
|
{
|
|
//"Disconnected"
|
|
;
|
|
}
|
|
|
|
|
|
<!--REQUIRED FUNCTION PROTOTYPE :: DO NOT ALTER-->
|
|
function OnDialingError(derr)
|
|
{
|
|
//"dial error"
|
|
|
|
window.external.Hangup();
|
|
|
|
switch (derr)
|
|
{
|
|
case DERR_DIALTONE:
|
|
g.navigate("error.htm");
|
|
break;
|
|
|
|
case DERR_BUSY:
|
|
break;
|
|
|
|
case DERR_SERVERBUSY:
|
|
break;
|
|
}
|
|
}
|
|
// END dial.htm
|
|
|
|
|
|
// userinfo.htm
|
|
function UserInfoLoadMe()
|
|
{
|
|
RetrieveUserInfo();
|
|
}
|
|
|
|
function StoreUserInfo()
|
|
{
|
|
InfoObj.set_FirstName = g.edt_FirstName.value;
|
|
InfoObj.set_MiddleInitial = g.edt_MiddleInitial.value;
|
|
InfoObj.set_LastName = g.edt_LastName.value;
|
|
InfoObj.set_CompanyName = g.edt_CompanyName.value;
|
|
InfoObj.set_Address = g.txt_Address.value;
|
|
InfoObj.set_City = g.edt_City.value;
|
|
InfoObj.set_State = g.sel_State.value;
|
|
InfoObj.set_Zip = g.edt_Zip.value;
|
|
InfoObj.set_PrimaryEmail = g.edt_PrimaryEmail.value;
|
|
InfoObj.set_SecondaryEmail = g.edt_SecondaryEmail.value;
|
|
InfoObj.set_AreaCode = g.edt_AreaCode.value;
|
|
InfoObj.set_Prefix = g.edt_Prefix.value;
|
|
InfoObj.set_Number = g.edt_Number.value;
|
|
}
|
|
|
|
function RetrieveUserInfo()
|
|
{
|
|
g.edt_FirstName.value = InfoObj.get_FirstName;
|
|
g.edt_MiddleInitial.value = InfoObj.get_MiddleInitial;
|
|
g.edt_LastName.value = InfoObj.get_LastName;
|
|
g.edt_CompanyName.value = InfoObj.get_CompanyName;
|
|
g.txt_Address.value = InfoObj.get_Address;
|
|
g.edt_City.value = InfoObj.get_City;
|
|
g.sel_State.value = InfoObj.get_State;
|
|
g.edt_Zip.value = InfoObj.get_Zip;
|
|
g.edt_PrimaryEmail.value = InfoObj.get_PrimaryEmail;
|
|
g.edt_SecondaryEmail.value = InfoObj.get_SecondaryEmail;
|
|
g.edt_AreaCode.value = InfoObj.get_AreaCode;
|
|
g.edt_Prefix.value = InfoObj.get_Prefix;
|
|
g.edt_Number.value = InfoObj.get_Number;
|
|
}
|
|
// END userinfo.htm
|
|
|
|
// eula.htm
|
|
function EulaLoadMe()
|
|
{
|
|
InitGlobals();
|
|
EulaObj = new Object;
|
|
EulaObj = window.external.Eula;
|
|
if (StatusObj.get_EULACompleted)
|
|
{
|
|
RetrieveEula();
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.disabled = true;
|
|
}
|
|
InitButtons();
|
|
}
|
|
|
|
function EulaRadioClicked(fAccept)
|
|
{
|
|
g.btnNext.disabled = false;
|
|
g.btnNext.src = g_strPrefix + "images/rhtdef.gif";
|
|
g.btnNextText.style.color = "black";
|
|
StoreEula();
|
|
}
|
|
|
|
function StoreEula()
|
|
{
|
|
EulaObj.set_EULAAcceptance = (radioEULA(0).checked == true) ? true : false;
|
|
}
|
|
|
|
function RetrieveEula()
|
|
{
|
|
Agreement.value = EulaObj.get_EULAAcceptance;
|
|
}
|
|
|
|
// END eula.htm
|
|
|
|
// regkbcmt.htm
|
|
function RegKBCmt_LoadMe()
|
|
{
|
|
InitButtons();
|
|
}
|
|
// END regkbcmt.htm
|
|
|
|
// regkb.htm
|
|
function RegKBLoadMe()
|
|
{
|
|
InitGlobals();
|
|
LangObj = new Object;
|
|
LangObj = window.external.Language;
|
|
InitButtons();
|
|
RetrieveRegKB();
|
|
}
|
|
|
|
function StoreRegKB()
|
|
{
|
|
LangObj.set_RegionIndex = g.selRegion.selectedIndex;
|
|
LangObj.get_KeyboardLayoutIndex = g.selKeyboard.selectedIndex;
|
|
}
|
|
|
|
function RetrieveRegKB()
|
|
{
|
|
var ilen = LangObj.get_NumOfRegions;
|
|
for (var i = 0; i < ilen; i++)
|
|
{
|
|
var oOption = g.document.createElement("OPTION");
|
|
oOption.text = LangObj.get_RegionName(i);
|
|
g.selRegion.add(oOption);
|
|
}
|
|
g.selRegion.selectedIndex = LangObj.get_RegionIndex;
|
|
|
|
ilen = LangObj.get_NumOfKeyboardLayouts;
|
|
for (i = 0; i < ilen; i++)
|
|
{
|
|
var oOption = g.document.createElement("OPTION");
|
|
oOption.text = LangObj.get_KeyboardLayoutName(i);
|
|
g.selKeyboard.add(oOption);
|
|
}
|
|
g.selKeyboard.selectedIndex = LangObj.get_KeyboardLayoutIndex;
|
|
}
|
|
|
|
// END regkb.htm
|
|
|
|
// badpid.htm
|
|
function badpid_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
}
|
|
|
|
// pid.htm
|
|
|
|
function PID_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
PidObj = new Object;
|
|
PidObj = window.external.ProductID;
|
|
RetrievePid();
|
|
g.btnNext.disabled = false;
|
|
InitButtons();
|
|
PID_CheckLength();
|
|
}
|
|
|
|
function PID_CheckLength()
|
|
{
|
|
var iLength = 0;
|
|
for (iElement = 0; iElement < 5; iElement++)
|
|
{
|
|
|
|
iLength += g.edtProductKey[iElement].value.length;
|
|
if (iLength < 5 * iElement)
|
|
break;
|
|
}
|
|
|
|
if (iLength == 25)
|
|
{
|
|
g.btnNext.disabled = false;
|
|
g.btnNext.src = g_strPrefix + "../images/rhtdef.gif";
|
|
g.btnNextText.style.color= "black";
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.disabled = true;
|
|
g.btnNext.src = g_strPrefix + "../Images/rhtdsld.gif";
|
|
g.btnNextText.style.color= "gray";
|
|
}
|
|
}
|
|
|
|
function RetrievePid()
|
|
{
|
|
// retrieves the pid if avialable.
|
|
var strPid = PidObj.get_PID();
|
|
|
|
// if there is no PID then we set the
|
|
// focus to the first field
|
|
if (strPid.length == 0)
|
|
{
|
|
g.edtProductKey[0].focus();
|
|
}
|
|
// else we populate the fields with the
|
|
// sections of the PID and then put the
|
|
// focus onto the next button for validation.
|
|
else
|
|
{
|
|
for(i = 0; i < 5; i++)
|
|
{
|
|
g.edtProductKey[i].value = strPid.substr(i * 5, 5);
|
|
}
|
|
g.btnNext.focus();
|
|
}
|
|
}
|
|
|
|
function ValidatePid()
|
|
{
|
|
var strPid = "";
|
|
|
|
for(i = 0; i < 5; i++)
|
|
{
|
|
strPid += g.edtProductKey[i].value;
|
|
}
|
|
|
|
return PidObj.ValidatePID(strPid);
|
|
}
|
|
|
|
function StorePid()
|
|
{
|
|
var strPid = "";
|
|
|
|
for(i = 0; i < 5; i++)
|
|
{
|
|
strPid += g.edtProductKey[i].value;
|
|
}
|
|
|
|
PidObj.set_PID(strPid);
|
|
StatusObj.set_PIDCompleted = true;
|
|
}
|
|
|
|
function ProductIDKeyPress()
|
|
{
|
|
// if the length is 5 then we want to move the focus
|
|
// to the next field and also save the input to the
|
|
// next field
|
|
if (g.event.srcElement.value.length == 5)
|
|
{
|
|
// find the index at which we are.
|
|
for (i = 0; i < 5; i++)
|
|
{
|
|
// find which index we are so we
|
|
// know which one to move to next
|
|
if (g.edtProductKey[i] == g.event.srcElement)
|
|
{
|
|
// if we are in the last field move to the next button
|
|
// else move to the key code to the next field and don't
|
|
// put the value into the current field
|
|
if (i == 4)
|
|
{
|
|
g.btnNext.focus();
|
|
}
|
|
else
|
|
{
|
|
g.edtProductKey[i+1].value += String.fromCharCode(g.event.keyCode);
|
|
}
|
|
g.event.returnValue = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
function ProductIDKeyUp()
|
|
{
|
|
PID_CheckLength();
|
|
|
|
// only need to do move forward
|
|
// or backwards if length is 0 or 5
|
|
if ((g.event.srcElement.value.length == 5) ||
|
|
(g.event.srcElement.value.length == 0))
|
|
{
|
|
for (i = 0; i < 5; i++)
|
|
{
|
|
// find which index we are so we
|
|
// know which one to move to next
|
|
if (g.edtProductKey[i] == g.event.srcElement)
|
|
{
|
|
// if we maxed the length of the field then
|
|
// move forward
|
|
if (g.event.srcElement.value.length == 5)
|
|
{
|
|
// if we are in the last field move to the next button
|
|
// else move to the next productID field
|
|
if (i == 4)
|
|
{
|
|
g.btnNext.focus();
|
|
}
|
|
else
|
|
{
|
|
g.edtProductKey[i+1].focus();
|
|
}
|
|
}
|
|
// if we have not data in the field
|
|
// then we most have deleted the contents
|
|
else // length = 0
|
|
{
|
|
// only need to move the focus if we
|
|
// are not in the first field.
|
|
if (i != 0)
|
|
{
|
|
g.edtProductKey[i-1].focus();
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// END pid.htm
|
|
|
|
|
|
// error.htm
|
|
function Error_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
}
|
|
// END error.htm
|
|
|
|
// ispsgnup.htm
|
|
// END ispsgnup.htm
|
|
|
|
// speedy2.htm
|
|
// END speedy2.htm
|
|
|
|
// speedy3.htm
|
|
// END speedy3.htm
|
|
|
|
// mouse.htm
|
|
function mouse_LoadMe()
|
|
{
|
|
InitGlobals("../../");
|
|
InitButtons();
|
|
}
|
|
// END mouse.htm
|
|
|
|
// oemhw.htm
|
|
function oemhw_LoadMe()
|
|
{
|
|
btnNext.disabled = true;
|
|
InitButtons("../");
|
|
}
|
|
|
|
function oemhw_HearSoundClicked()
|
|
{
|
|
if (event.srcElement == radioHearSound[0])
|
|
{
|
|
radioHearSound[0].checked = true;
|
|
radioHearSound[1].checked = false;
|
|
btnNext.disabled = false;
|
|
InitButtons();
|
|
}
|
|
else if (event.srcElement == radioHearSound[1])
|
|
{
|
|
radioHearSound[0].checked = false;
|
|
radioHearSound[1].checked = true;
|
|
btnNext.disabled = false;
|
|
InitButtons();
|
|
}
|
|
}
|
|
|
|
// END oemhw.htm
|
|
|
|
// oemreg.htm
|
|
function oemreg_LoadMe()
|
|
{
|
|
InitGlobals("../../");
|
|
g.edt_FirstName.value = InfoObj.get_FirstName();
|
|
g.edt_MiddleInitial.value = InfoObj.get_MiddleInitial();
|
|
g.edt_LastName.value = InfoObjt.get_LastName();
|
|
InitButtons();
|
|
}
|
|
// END oemreg.htm
|
|
|
|
// oemlegal.htm
|
|
function oemlegal_LoadMe()
|
|
{
|
|
InitGlobals("../../");
|
|
InitButtons();
|
|
}
|
|
// END oemlegal.htm
|
|
|
|
// oemadd.htm
|
|
// END oemadd.htm
|
|
|
|
// msneula.htm
|
|
function msneula_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
g.btnNext.disabled = false;
|
|
InitButtons();
|
|
}
|
|
// END msneula.htm
|
|
|
|
// msnsign.htm
|
|
function msnsign_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
}
|
|
|
|
function msnsign_SignupWishClicked()
|
|
{
|
|
for (iElement = 0; iElement < 4; iElement++)
|
|
{
|
|
radioSignupWish[iElement].checked = false;
|
|
}
|
|
event.srcElement.checked = true;
|
|
}
|
|
// END msnsign.htm
|
|
|
|
// msninfo.htm
|
|
function msninfo_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
g.edt_FirstName.value = InfoObj.get_FirstName();
|
|
g.edt_MiddleInitial.value = InfoObj.get_MiddleInitial();
|
|
g.edt_LastName.value = InfoObj.get_LastName();
|
|
btnNext.disabled = false;
|
|
InitButtons();
|
|
}
|
|
// END msninfo.htm
|
|
|
|
// msnidpss.htm
|
|
function msnidpss_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
g.btnNext.disabled = false;
|
|
InitButtons();
|
|
}
|
|
|
|
function msnidpss_NameSelectionClicked()
|
|
{
|
|
for (iElement = 0; iElement < 4; iElement++)
|
|
{
|
|
radioNameSelection[iElement].checked = false;
|
|
}
|
|
event.srcElement.checked = true;
|
|
}
|
|
// END msnidpss.htm
|
|
|
|
// msnconset.htm
|
|
function msnconset_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
}
|
|
// END msnconset.htm
|
|
|
|
// msnpymnt.htm
|
|
function msnpymnt_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
g.btnNext.disabled = false;
|
|
InitButtons();
|
|
}
|
|
// END msnpymnt.htm
|
|
|
|
// passsign.htm
|
|
function passsign_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
}
|
|
|
|
function passsign_WantPassportClicked()
|
|
{
|
|
if (event.srcElement == radioWantPassport[0])
|
|
{
|
|
radioWantPassport[0].checked = true;
|
|
radioWantPassport[1].checked = false;
|
|
}
|
|
else
|
|
{
|
|
radioWantPassport[0].checked = false;
|
|
radioWantPassport[1].checked = true;
|
|
}
|
|
}
|
|
// END passsign.htm
|
|
|
|
// passact.htm
|
|
// END passact.htm
|
|
|
|
// passreg.htm
|
|
function passreg_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
g.edt_FirstName.value = InfoObj.get_FirstName();
|
|
g.edt_MiddleInitial.value = InfoObj.get_MiddleInitial();
|
|
g.edt_LastName.value = InfoObj.get_LastName();
|
|
InitButtons();
|
|
}
|
|
// END passreg.htm
|
|
|
|
// register.htm
|
|
function register_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
g.edt_FirstName.value = InfoObj.get_FirstName();
|
|
g.edt_MiddleInitial.value = InfoObj.get_MiddleInitial();
|
|
g.edt_LastName.value = InfoObj.get_LastName();
|
|
InitButtons();
|
|
}
|
|
// END register.htm
|
|
|
|
// congrats.htm
|
|
function congrats_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
}
|
|
|
|
function congrats_AccessInternetClicked()
|
|
{
|
|
if (event.srcElement == radioAccessInternet[0])
|
|
{
|
|
radioAccessInternet[0].checked = true;
|
|
radioAccessInternet[1].checked = false;
|
|
}
|
|
else
|
|
{
|
|
radioAccessInternet[0].checked = false;
|
|
radioAccessInternet[1].checked = true;
|
|
}
|
|
}
|
|
// END congrats.htm
|
|
|
|
// eulawarn.htm
|
|
// END eulawarn.htm
|
|
|
|
// installd.htm
|
|
function installd_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
}
|
|
// END installd.htm
|
|
|
|
// usemodem.htm
|
|
function usemodem_LoadMe()
|
|
{
|
|
InitGlobals();
|
|
InitButtons();
|
|
}
|
|
// END usemodem.htm
|
|
|
|
|
|
// MISC Functions
|
|
// Function: DoOfflineOnlineModeFromStart
|
|
// Description: picks which direction to go based
|
|
// on OEM decision in OOBEWiz and if Modem Available
|
|
// if either fail then we do offline navigation by
|
|
// calling DoOffline.
|
|
//
|
|
function DoOfflineOnlineModeFromStart()
|
|
{
|
|
// online navigation if successful
|
|
// else offline navigation
|
|
// TODO: Needs to be dealt with
|
|
if ( 1/*need to get OOBEwiz default-OnlineMode */ && window.external.CheckDialReady() == ERR_COMM_NO_ERROR)
|
|
{
|
|
g.navigate("tapi.htm");
|
|
}
|
|
else
|
|
{
|
|
g.navigate(".." + OfflineStart());
|
|
}
|
|
}
|
|
|
|
// Function: OfflineStart
|
|
// Description: We want to start offline mode.
|
|
// Figure out which page to start at.
|
|
//
|
|
function OfflineStart()
|
|
{
|
|
if (!StatusObj.get_EULACompleted)
|
|
{
|
|
return "/setup/eula.htm";
|
|
}
|
|
else if (!StatusObj.get_PIDCompleted)
|
|
{
|
|
return "/setup/pid.htm";
|
|
}
|
|
else if (window.external.CheckDialReady == ERR_COMM_NOMODEM)
|
|
{
|
|
return "/setup/installd.htm";
|
|
}
|
|
else if (DirObj.get_ISPSignup.toUpperCase != "MSN")
|
|
{
|
|
return "/html/ispsgnup/ispsgnup.htm";
|
|
}
|
|
else if (StatusObj.get_ISPSignupCompleted)
|
|
{
|
|
return "/setup/congrats.htm";
|
|
}
|
|
else
|
|
{
|
|
return "/setup/installd.htm";
|
|
}
|
|
}
|
|
|
|
// Function: GoMouseTutorial
|
|
// Description: Sees if we already did the mouse
|
|
// tutorial if not then we see if there is a
|
|
// mouse tutorial to do then if there is one
|
|
// we check to see if it is an .exe or not
|
|
// if not we navigate to the page else we
|
|
// start a process
|
|
//
|
|
function GoMouseTutorial()
|
|
{
|
|
var bReturnValue = false;
|
|
|
|
if (!StatusObj.get_MouseTutorCompleted())
|
|
{
|
|
// get mouse tutorial string
|
|
var strMouseTutorial = DirObj.get_DoMouseTutorial();
|
|
|
|
if (strMouseTutorial.length != 0)
|
|
{
|
|
/* if .exe in mouse string then execute that app
|
|
else navigate to the file
|
|
*/
|
|
|
|
// TODO: check to see if exe and create process
|
|
if (0)
|
|
{
|
|
// need to check if exe and execute else navigate
|
|
}
|
|
else
|
|
{
|
|
g.navigate("../html/mouse/" + strMouseTutorial);
|
|
}
|
|
bReturnValue = true;
|
|
}
|
|
}
|
|
// return if we navigated to the mouse tutorial or not
|
|
return bReturnValue;
|
|
}
|
|
|
|
// Function: GoRegionalKeyboard
|
|
// Description: Sees if we already did the
|
|
// regional/keyboard settings if not
|
|
// we check to see if we should if so then
|
|
// we navigate to the regional settings page.
|
|
//
|
|
function GoRegionalKeyboard()
|
|
{
|
|
var bReturnValue = false;
|
|
|
|
if (!StatusObj.get_LanguageCompleted())
|
|
{
|
|
if (DirObj.get_DoRegionalKeyboard() == 1)
|
|
{
|
|
g.navigate("regkb.htm");
|
|
bReturnValue = true;
|
|
}
|
|
}
|
|
// return if we navigated to the page or not.
|
|
return bReturnValue;
|
|
}
|
|
|
|
// Function: GoOEMHardwareCheck
|
|
// Description: Sees if we already did the
|
|
// OEM HardwareCheck if not we see if we
|
|
// should do the OEM hardware check. if we
|
|
// should do the check we navigate to the page
|
|
//
|
|
function GoOEMHardwareCheck()
|
|
{
|
|
var bReturnValue = false;
|
|
|
|
// if (!StatusObj.get_OEMHWCompleted())
|
|
{
|
|
if (DirObj.get_DoOEMHardwareCheck() == 1)
|
|
{
|
|
g.navigate("../html/oemhw/oemhw.htm");
|
|
bReturnValue = true;
|
|
}
|
|
}
|
|
|
|
// return if we navigated to the page or not.
|
|
return bReturnValue;
|
|
}
|
|
|
|
|
|
// Page Navigation
|
|
|
|
function GoCancel(ckpt)
|
|
{
|
|
if (g.spanRestore != null)
|
|
{
|
|
g.btnCancel.src = g_strPrefix + "images/lftclkw.gif";
|
|
}
|
|
else
|
|
{
|
|
g.btnCancel.src = g_strPrefix + "images/clicked.gif";
|
|
}
|
|
switch (ckpt)
|
|
{
|
|
case CKPT_TAPI:
|
|
g.navigate(".." + OfflineStart());
|
|
break;
|
|
|
|
case CKPT_CONNECT:
|
|
window.external.Hangup();
|
|
g.navigate("usemodem.htm");
|
|
break;
|
|
|
|
case CKPT_MODEMCANCEL:
|
|
g.navigate(".." + OfflineStart());
|
|
break;
|
|
|
|
case CKPT_MSNINTRO:
|
|
window.external.Hangup();
|
|
g.navigate(".." + OfflineStart());
|
|
break;
|
|
case CKPT_MSNINFO:
|
|
window.external.Hangup();
|
|
g.navigate(".." + OfflineStart());
|
|
break;
|
|
case CKPT_MSNPAYMENT:
|
|
break;
|
|
case CKPT_PASSSIGN:
|
|
break;
|
|
case CKPT_PASSPORT:
|
|
break;
|
|
case CKPT_REGISTER:
|
|
break;
|
|
}
|
|
}
|
|
|
|
function GoRestore(ckpt)
|
|
{
|
|
if (g.spanCancel != null)
|
|
{
|
|
g.btnRestore.src = g_strPrefix + "images/rhtclkw.gif";
|
|
}
|
|
else
|
|
{
|
|
g.btnRestore.src = g_strPrefix + "images/clicked.gif";
|
|
}
|
|
|
|
switch (ckpt)
|
|
{
|
|
case CKPT_OEMISP1:
|
|
alert("need to navigate");
|
|
break;
|
|
}
|
|
}
|
|
|
|
function GoBack(ckpt)
|
|
{
|
|
if (g.spanNext != null)
|
|
{
|
|
g.btnBack.src = g_strPrefix + "images/lftclk.gif";
|
|
}
|
|
else
|
|
{
|
|
g.btnBack.src = g_strPrefix + "images/clicked.gif";
|
|
}
|
|
|
|
switch (ckpt)
|
|
{
|
|
case CKPT_TAPI:
|
|
StoreTapi();
|
|
g.navigate("start.htm");
|
|
break;
|
|
|
|
case CKPT_MOUSE:
|
|
g.navigate("../../setup/start.htm");
|
|
break;
|
|
|
|
case CKPT_REGKB:
|
|
// go back to start since Mouse has already been completed.
|
|
g.navigate("../../setup/start.htm");
|
|
break;
|
|
|
|
case CKPT_OEMHW:
|
|
// go back to start since RegKB and Mouse have already been completed.
|
|
g.navigate("../../setup/start.htm");
|
|
break;
|
|
|
|
case CKPT_USERINFO:
|
|
StoreUserInfo();
|
|
g.navigate("regkb.htm");
|
|
break;
|
|
|
|
case CKPT_EULA:
|
|
g.navigate("start.htm");
|
|
break;
|
|
|
|
case CKPT_MSNINTRO:
|
|
window.external.Hangup();
|
|
g.navigate("../setup/tapi.htm");
|
|
break;
|
|
|
|
case CKPT_WINMSNEULA:
|
|
break;
|
|
|
|
case CKPT_IAASSIGNED:
|
|
break;
|
|
|
|
case CKPT_PASSPORT:
|
|
break;
|
|
|
|
case CKPT_MSNPORTAL:
|
|
break;
|
|
|
|
case CKPT_PID:
|
|
g.navigate("eula.htm");
|
|
break;
|
|
|
|
case CKPT_OEMISP1:
|
|
g.navigate("pid.htm");
|
|
break;
|
|
|
|
case CKPT_OEMISP2:
|
|
g.navigate("speedy.htm");
|
|
break;
|
|
|
|
case CKPT_OEMISP3:
|
|
g.navigate("speedy2.htm");
|
|
break;
|
|
|
|
case CKPT_OEMREG:
|
|
break;
|
|
|
|
case CKPT_INSTALLED:
|
|
break;
|
|
|
|
case CKPT_CONGRATS:
|
|
g.navigate("pid.htm");
|
|
break;
|
|
case CKPT_MODEMCANCEL:
|
|
window.navigate("tapi.htm");
|
|
break;
|
|
|
|
case CKPT_ERROR:
|
|
break;
|
|
case CKPT_REGKBCOMMIT:
|
|
break;
|
|
case CKPT_BADPID:
|
|
break;
|
|
case CKPT_MSNINFO:
|
|
break;
|
|
case CKPT_MSNIDPASS:
|
|
break;
|
|
case CKPT_MSNCONSET:
|
|
break;
|
|
case CKPT_MSNPAYMENT:
|
|
break;
|
|
case CKPT_PRIVACYGUARANTEE:
|
|
break;
|
|
case CKPT_PASSSIGN:
|
|
break;
|
|
case CKPT_PASSPORT:
|
|
break;
|
|
case CKPT_REGISTER:
|
|
break;
|
|
default:
|
|
g.navigate(ckpt);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function GoNext(ckpt, oobePath)
|
|
{
|
|
if (g.spanBack != null)
|
|
{
|
|
g.btnNext.src = g_strPrefix + "images/rhtclk.gif";
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.src = g_strPrefix + "images/clicked.gif";
|
|
}
|
|
|
|
switch (ckpt)
|
|
{
|
|
case CKPT_START:
|
|
// Store user name values into registry for later use.
|
|
InfoObj.set_FirstName = g.edt_FirstName.value;
|
|
InfoObj.set_MiddleInitial = g.edt_MiddleName.value;
|
|
InfoObj.set_LastName = g.edt_LastName.value;
|
|
|
|
// if we haven't done the mouse tutor we do that
|
|
// else we try the regional settings
|
|
// else we try the OEM hardware check
|
|
// else we go do Online/Offline Registration
|
|
if (GoMouseTutorial())
|
|
; // do nothing we already navigated
|
|
else if (GoRegionalKeyboard())
|
|
; // do nothing we already navigated
|
|
else if (GoOEMHardwareCheck())
|
|
; // do nothing we already navigated
|
|
else
|
|
DoOfflineOnlineModeFromStart();
|
|
break;
|
|
|
|
case CKPT_TAPI:
|
|
StoreTapi();
|
|
g.navigate("connect.htm");
|
|
break;
|
|
|
|
case CKPT_DIALTONE:
|
|
g.navigate("connect.htm");
|
|
break;
|
|
|
|
case CKPT_MOUSE:
|
|
// we completed the mouse tutor so mark it
|
|
StatusObj.set_MouseTutorCompleted();
|
|
|
|
// if we haven't done the regional settings we do it
|
|
// else we try the OEM hardware check
|
|
// else we go do Online/Offline Registration
|
|
if (!GoRegionalKeyboard())
|
|
; // do nothing we already navigated
|
|
else if (!GoOEMHardwareCheck())
|
|
; // do nothing we already navigated
|
|
else
|
|
DoOnlineOfflineMode();
|
|
break;
|
|
|
|
case CKPT_REGKB:
|
|
// we finished the REGKB so we set it as done.
|
|
StatusObj.set_LanguageCompleted();
|
|
StoreRegKB();
|
|
|
|
if (g.selRegion.selectedIndex != LangObj.get_RegionIndex)
|
|
{
|
|
window.external.shutdown();
|
|
}
|
|
else
|
|
{
|
|
// if we haven't done the OEM hardware check we do it
|
|
// else we go do Online/Offline Registration
|
|
if (!GoOEMHardwareCheck())
|
|
; // do nothing we already navigated
|
|
else
|
|
DoOnlineOfflineMode();
|
|
}
|
|
break;
|
|
|
|
case CKPT_OEMHW:
|
|
// we finished the OEM Hardware check so we set it as done.
|
|
StatusObj.set_OEMHWCompleted();
|
|
// then we go do Online/Offline Registration.
|
|
DoOnlineOfflineMode();
|
|
break;
|
|
|
|
case CKPT_USERINFO:
|
|
StoreUserInfo();
|
|
g.navigate("eula.htm");
|
|
/*
|
|
if (window.parent.g_bHasPassport == true)
|
|
{
|
|
alert("Post User data to MSDATA\n" +
|
|
"Stamp USER.EXE and post to Registry\n" +
|
|
"Disconnect\n" +
|
|
"Navigate to OFFLINE MODE\n");
|
|
}
|
|
else if (window.parent.g_bOEMRegister == true)
|
|
{
|
|
alert("OEM add'l user info");
|
|
alert("Post to OEM");
|
|
if (window.parent.g_bWantPassport == true)
|
|
{
|
|
g.navigate("passact.htm");
|
|
}
|
|
else
|
|
{
|
|
alert("Stamp USER.EXE and post to Registry");
|
|
alert("Disconnect");
|
|
alert("Navigate to OFFLINE MODE");
|
|
}
|
|
}
|
|
else if (window.parent.g_bWantPassport == true)
|
|
{
|
|
g.navigate("passact.htm");
|
|
}
|
|
else
|
|
{
|
|
alert("Stamp USER.EXE and post to Registry");
|
|
alert("Disconnect");
|
|
alert("Navigate to OFFLINE MODE");
|
|
}
|
|
*/
|
|
break;
|
|
|
|
case CKPT_EULA:
|
|
var strDialog = "resizeable:no; scrollbars:no; status:no; "
|
|
+ "dialogHeight:200px; dialogWidth:450px; border:thick; center:yes; help:no; maximize:no; minimize:no; ";
|
|
|
|
if (radioEULA(0).checked == true)
|
|
{
|
|
StatusObj.set_EULACompleted = true;
|
|
g.navigate(".." + OfflineStart());
|
|
}
|
|
else if (window.showModalDialog("eulawarn.htm", "EULAWarn", strDialog))
|
|
{
|
|
window.external.PowerDown();
|
|
}
|
|
break;
|
|
|
|
case CKPT_PID:
|
|
if (ValidatePid())
|
|
{
|
|
StorePid();
|
|
g.navigate(".." + OfflineStart());
|
|
}
|
|
else
|
|
{
|
|
alert("You must enter a valid Product Key for Windows to continue");
|
|
}
|
|
break;
|
|
|
|
case CKPT_OEMISP1:
|
|
g.navigate("speedy2.htm");
|
|
break;
|
|
|
|
case CKPT_OEMISP2:
|
|
g.navigate("speedy3.htm");
|
|
break;
|
|
|
|
case CKPT_OEMISP3:
|
|
g.navigate("congrats.htm");
|
|
break;
|
|
|
|
case CKPT_CONGRATS:
|
|
window.external.Finish();
|
|
break;
|
|
|
|
case CKPT_MSNINTRO:
|
|
g.navigate("msneula.htm");
|
|
break;
|
|
|
|
case CKPT_WINMSNEULA:
|
|
window.external.Hangup();
|
|
g.navigate(".." + OfflineStart());
|
|
break;
|
|
|
|
case CKPT_IAASSIGNED:
|
|
break;
|
|
|
|
case CKPT_PASSPORT:
|
|
break;
|
|
|
|
case CKPT_MSNPORTAL:
|
|
break;
|
|
|
|
case CKPT_OEMREG:
|
|
break;
|
|
|
|
case CKPT_INSTALLED:
|
|
break;
|
|
|
|
case CKPT_ERROR:
|
|
break;
|
|
|
|
case CKPT_REGKBCOMMIT:
|
|
break;
|
|
|
|
case CKPT_BADPID:
|
|
break;
|
|
|
|
case CKPT_MSNINFO:
|
|
break;
|
|
case CKPT_MSNIDPASS:
|
|
break;
|
|
case CKPT_MSNCONSET:
|
|
break;
|
|
case CKPT_MSNPAYMENT:
|
|
break;
|
|
case CKPT_PRIVACYGUARANTEE:
|
|
break;
|
|
case CKPT_PASSSIGN:
|
|
break;
|
|
case CKPT_PASSPORT:
|
|
break;
|
|
case CKPT_REGISTER:
|
|
break;
|
|
default:
|
|
g.navigate(ckpt);
|
|
break;
|
|
}
|
|
}
|
|
// END Page Navigation
|
|
|
|
|
|
// Button Event Handlers and Initialization
|
|
|
|
// Function: InitGlobals
|
|
// 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 InitGlobals()
|
|
{
|
|
g = document.frames("msoobeMain");
|
|
g_strPrefix = (arguments[0] != null) ? arguments[0] : "../";
|
|
}
|
|
|
|
function InitButtons()
|
|
{
|
|
InitPairedButton(g.spanNext, g.btnNext, g.btnNextText, "images/rhtdef.gif", "images/rhtdsld.gif",
|
|
g.spanBack, "backButton", "backButtonText");
|
|
InitPairedButton(g.spanBack, g.btnBack, g.btnBackText, "images/lftdef.gif", "images/lftdsld.gif",
|
|
g.spanNext, "backButton", "backButtonText");
|
|
InitPairedButton(g.spanRestore, g.btnRestore, g.btnRestoreText, "images/rhtdefw.gif", "images/rhtdsldw.gif",
|
|
g.spanCancel, "cancelButton", "cancelButtonText");
|
|
InitPairedButton(g.spanCancel, g.btnCancel, g.btnCancelText, "images/rhtdefw.gif", "images/rhtdsldw.gif",
|
|
g.spanRestore, "restoreButton", "restoreButtonText");
|
|
}
|
|
|
|
function InitPairedButton(span, btn, btnText, img, imgDisabled,
|
|
span2, btnClass, btnTextClass)
|
|
{
|
|
if (span != null)
|
|
{
|
|
if (span2 == null)
|
|
{
|
|
btn.className = btnClass;
|
|
btnText.className = btnTextClass;
|
|
btnText.style.textAlign="center";
|
|
btnText.style.width = "105px";
|
|
btnText.style.left = btn.style.left;
|
|
}
|
|
if (btn.disabled == null || !btn.disabled)
|
|
{
|
|
if (span2 == null)
|
|
{
|
|
btn.src = g_strPrefix + "images/default.gif";
|
|
}
|
|
else
|
|
{
|
|
btn.src = g_strPrefix + img;
|
|
}
|
|
btnText.style.color= "black";
|
|
}
|
|
else
|
|
{
|
|
if (span2 == null)
|
|
{
|
|
btn.src = g_strPrefix + "images/disabled.gif";
|
|
}
|
|
else
|
|
{
|
|
btn.src = g_strPrefix + imgDisabled;
|
|
}
|
|
btnText.style.color= "gray";
|
|
}
|
|
span.onmouseover = HoverOnButton;
|
|
span.onmouseout = HoverOffButton;
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// 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()
|
|
{
|
|
switch (g.event.srcElement)
|
|
{
|
|
case g.btnCancel:
|
|
case g.btnCancelText:
|
|
HoverOnPairedButton(g.btnCancel, g.btnCancelText, "images/lfthvr.gif", g.btnRestore);
|
|
break;
|
|
|
|
case g.btnRestore:
|
|
case g.btnRestoreText:
|
|
HoverOnPairedButton(g.btnRestore, g.btnRestoreText, "images/rhthvrw.gif", g.btnCancel);
|
|
break;
|
|
|
|
case g.btnBack:
|
|
case g.btnBackText:
|
|
HoverOnPairedButton(g.btnBack, g.btnBackText, "images/lfthvr.gif", g.btnNext);
|
|
break;
|
|
|
|
case g.btnNext:
|
|
case g.btnNextText:
|
|
HoverOnPairedButton(g.btnNext, g.btnNextText, "images/rhthvr.gif", g.btnBack);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function HoverOnPairedButton(btn, btnText, img, btn2)
|
|
{
|
|
if (btn.disabled == null || !btn.disabled)
|
|
{
|
|
if (g.event.fromElement != btn && g.event.fromElement != btnText)
|
|
{
|
|
if (btn2 == null)
|
|
{
|
|
btn.src = g_strPrefix + "images/hover.gif";
|
|
}
|
|
else
|
|
{
|
|
btn.src = g_strPrefix + img;
|
|
}
|
|
btnText.style.fontWeight = "bold";
|
|
btnText.style.color = "yellow";
|
|
}
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// 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()
|
|
{
|
|
switch (g.event.srcElement)
|
|
{
|
|
case g.btnCancel:
|
|
case g.btnCancelText:
|
|
HoverOffPairedButton(g.btnCancel, g.btnCancelText, "images/lftdefw.gif", g.btnRestore);
|
|
break;
|
|
|
|
case g.btnRestore:
|
|
case g.btnRestoreText:
|
|
HoverOffPairedButton(g.btnRestore, g.btnRestoreText, "images/rhtdefw.gif", g.btnCancel);
|
|
break;
|
|
|
|
case g.btnBack:
|
|
case g.btnBackText:
|
|
HoverOffPairedButton(g.btnBack, g.btnBackText, "images/lftdef.gif", g.btnNext);
|
|
break;
|
|
|
|
case g.btnNext:
|
|
case g.btnNextText:
|
|
HoverOffPairedButton(g.btnNext, g.btnNextText, "images/rhtdef.gif", g.btnBack);
|
|
break;
|
|
}
|
|
}
|
|
|
|
function HoverOffPairedButton(btn, btnText, img, btn2)
|
|
{
|
|
if (btn.disabled == null || !btn.disabled)
|
|
{
|
|
if (g.event.toElement != btn && g.event.toElement != btnText)
|
|
{
|
|
if (btn2 == null)
|
|
{
|
|
btn.src = g_strPrefix + "images/default.gif";
|
|
}
|
|
else
|
|
{
|
|
btn.src = g_strPrefix + img;
|
|
}
|
|
btnText.style.fontWeight = "normal";
|
|
btnText.style.color = "black";
|
|
}
|
|
}
|
|
}
|
|
// END Button Event Handlers and Initialization
|
|
</script>
|
|
</HEAD>
|
|
|
|
<FRAMESET FRAMEBORDER=no COLS="100%" ROWS="100%">
|
|
<FRAME NAME="msoobeMain" SRC="setup/start.htm" FRAMEBORDER=no SCROLLING=no>
|
|
</FRAMESET>
|
|
</HTML>
|