4431 lines
123 KiB
HTML
4431 lines
123 KiB
HTML
<!--
|
||
TODO:
|
||
* replace _MODULE_ with the name of your module.
|
||
* replace %windir%\system32\oobe\msobshel.htm on your test system with
|
||
this file.
|
||
-->
|
||
<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">
|
||
|
||
<!-- Begin Agent Specific Code -->
|
||
|
||
<!-- The majority of the Agent code is in AgtCore.js -->
|
||
<!-- The AgtXXXX.js files contain all of the script -->
|
||
<!-- code that needs to be localized. -->
|
||
<!-- NOTE: Agent is not initialized until the first -->
|
||
<!-- time someone clicks on the Assistant image. -->
|
||
|
||
<script language=jscript src="AgtCore.js"></script>
|
||
<script language=jscript src="AgtScrpt.js"></script>
|
||
|
||
<!-- Agent Event Handler Declarations -->
|
||
|
||
<script language=jscript for=Agent event="Command(userInput)")>
|
||
Agent_OnCommand(userInput);
|
||
</script>
|
||
|
||
<script language=jscript for=Agent event="Hide(characterID)">
|
||
Agent_OnHide(characterID);
|
||
</script>
|
||
|
||
<script language=jscript for=Agent event="IdleStart(characterID)">
|
||
Agent_OnIdleStart(characterID);
|
||
</script>
|
||
|
||
<script language=jscript for=Agent event="IdleComplete(characterID)">
|
||
Agent_OnIdleComplete(characterID);
|
||
</script>
|
||
|
||
<script language=jscript for=Agent event="Bookmark(id)">
|
||
Agent_OnBookmark(id);
|
||
</script>
|
||
|
||
<script language=jscript for=Agent event="Click(characterID, button, shift, x, y)">
|
||
Agent_OnClick(characterID, button, shift, x, y);
|
||
</script>
|
||
|
||
<script language=jscript for=Agent event="DragComplete(characterID, button, shift, x, y)">
|
||
Agent_OnDragComplete(characterID, button, shift, x, y);
|
||
</script>
|
||
|
||
<script language=jscript for=Agent event="RequestComplete(request)">
|
||
Agent_OnRequestComplete(request);
|
||
</script>
|
||
|
||
|
||
<!-- End Agent Specific Code -->
|
||
|
||
<script language=jscript src="_MODULE_.js"></script>
|
||
|
||
<script language=jscript src="mousetut.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>
|
||
|
||
// 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 = 1;
|
||
var APP_DESKTOP_MODE = 2;
|
||
|
||
// Status location constants
|
||
var STATUS_ISP = 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;
|
||
var SNDX_OFF_EULA = 1;
|
||
var SNDX_OFF_PID = 2;
|
||
var SNDX_OFF_FINISH = 3;
|
||
|
||
// OLD STATUS PANE FOR B1
|
||
// var SNDX_WELCOME = 0;
|
||
// var SNDX_HW1 = 1;
|
||
// var SNDX_HW2 = 2;
|
||
// var SNDX_HW3 = 3;
|
||
// var SNDX_LEGAL1 = 4;
|
||
// var SNDX_LEGAL2 = 5;
|
||
// var SNDX_REG1 = 6;
|
||
// var SNDX_REG2 = 7;
|
||
// var SNDX_ISP = 8;
|
||
// var SNDX_FINI = 9;
|
||
|
||
// 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_FINI = 6;
|
||
|
||
// holds non-checkpoint next navigation
|
||
var g_SimpleNavMap = null;
|
||
|
||
function CheckPoint(strURL, i1, i2, i3, i4)
|
||
{
|
||
this.strURL = strURL;
|
||
this.rgindex = new Array(STATUS_MAX);
|
||
this.rgindex[STATUS_ISP] = i1;
|
||
this.rgindex[STATUS_OEM] = i2;
|
||
this.rgindex[STATUS_NONE] = i3;
|
||
this.rgindex[STATUS_OFF] = i4;
|
||
}
|
||
|
||
var curCKPT=1;
|
||
var CKPT_HWCHK = curCKPT++;
|
||
var CKPT_WELCOME = curCKPT++;
|
||
var CKPT__MODULE_ = curCKPT++;
|
||
var CKPT_MOUSETUT1 = curCKPT++;
|
||
var CKPT_IMETUTORIAL = curCKPT++;
|
||
var CKPT_OEMHW = curCKPT++;
|
||
var CKPT_REGION_KEYBD = curCKPT++;
|
||
var CKPT_REGKB_COMMIT = curCKPT++;
|
||
var CKPT_TIMEZONE = curCKPT++;
|
||
var CKPT_EULA = curCKPT++;
|
||
var CKPT_EULA_DECLINE = curCKPT++;
|
||
var CKPT_PRODUCTKEY = curCKPT++;
|
||
var CKPT_BADPRODUCTKEY = curCKPT++;
|
||
var CKPT_ICSCHOICE = curCKPT++;
|
||
var CKPT_REGISTER1 = curCKPT++;
|
||
var CKPT_REGISTER3 = curCKPT++;
|
||
var CKPT_ISPSIGNUP = curCKPT++;
|
||
var CKPT_MIGLIST = curCKPT++;
|
||
var CKPT_ISPDIAL = curCKPT++;
|
||
var CKPT_REFDIAL = curCKPT++;
|
||
var CKPT_MIGDIAL = curCKPT++;
|
||
var CKPT_REGDIAL = 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 g_LastMouseTutPage="mouse_k.htm";
|
||
var g_Last_MODULE_Page = "";
|
||
|
||
// 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 CLSID_FLASH_PLAYER = "{D27CDB6E-AE6D-11cf-96B8-444553540000}";
|
||
var PROGID_FLASH_PLAYER = "ShockwaveFlash.ShockwaveFlash";
|
||
var CKPT_REG_KEY = "\\CKPT";
|
||
var TOS_REG_VALUE = "TopOfStack";
|
||
|
||
// 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;
|
||
|
||
// 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
|
||
var FINISH_OK = 0x00000000;
|
||
var FINISH_REBOOT = 0x00000001;
|
||
var FINISH_BAD_PID = 0x00000002;
|
||
var FINISH_BAD_EULA = 0x00000004;
|
||
var FINISH_BAD_STAMP = 0x00000008;
|
||
|
||
// 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;
|
||
|
||
// 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;
|
||
|
||
// Data comparison modes
|
||
var CompareModeBinary = 0;
|
||
var CompareModeText = 1;
|
||
|
||
// BUGBUG temp GUIDs
|
||
var NOLAUNCHISPSIGNUP = "{C37D92A5-CA34-11d2-B71C-00C04F794977}";
|
||
var MSNCOMPLETED = "{1C0A22F2-CB6B-11d2-B544-00A0C949DA70}";
|
||
var LANGUAGECOMPLETED = "{F744DA40-617C-11D3-8B99-00A0C91E7F3C}";
|
||
var MS_REGISTRATION = "{1C956940-8617-11D3-8B99-00A0C91E7F3C}";
|
||
var OEM_REGISTRATION = "{ECD24360-B210-11D3-8B99-00A0C91E7F3C}";
|
||
var ICS_FOR_INTERNET = "{67252E44-C8B7-4b6c-B6CC-E3D0E1D3BF9B}";
|
||
var ICS_FOR_OOBE = "{7664797B-1A07-4755-AF19-2A73EC92E03B}";
|
||
|
||
// LANGUAGE SETTINGS
|
||
|
||
// sort order
|
||
var SORT_DEFAULT = 0x0; // sorting default
|
||
// primary languages
|
||
var LANG_JAPANESE = 0x11;
|
||
var LANG_KOREAN = 0x12;
|
||
var LANG_CHINESE = 0x04;
|
||
// sub languages
|
||
var SUBLANG_KOREAN = 0x01; // Korean (Extended Wansung)
|
||
var SUBLANG_CHINESE_TRADITIONAL = 0x01; // Taiwan
|
||
var SUBLANG_CHINESE_SIMPLIFIED = 0x02; // Chinese (PR China)
|
||
var SUBLANG_DEFAULT = 0x01; // user default
|
||
|
||
|
||
// 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 SysClockObj = null;
|
||
var RegisterObj = null;
|
||
var FileSystemObj = null;
|
||
var DebugObj = null;
|
||
|
||
// Localizeable strings for welcome.htm
|
||
var L_StrVowelBeginningPrepender_Text = "an";
|
||
var L_StrPrepender_Text = "a";
|
||
|
||
// 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_IMEExists = false;
|
||
var g_OEMAddBackURL = "";
|
||
var g_DialingAvailableInCountry = true;
|
||
var g_ModalDialogUp = false;
|
||
var bKeyboardPresent = true;
|
||
var bMousePresent = true;
|
||
var g_OEMNameStr = window.external.Signup.get_OEMName();
|
||
var g_bTapiDone = false;
|
||
|
||
// Mandatory Initialization Code
|
||
if (null == DebugObj){
|
||
DebugObj = new Object;
|
||
DebugObj = window.external.Debug;
|
||
}
|
||
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 == SysClockObj)
|
||
{
|
||
SysClockObj = new Object;
|
||
SysClockObj = window.external.SystemClock;
|
||
SysClockObj.Init();
|
||
}
|
||
|
||
if (null == LangObj)
|
||
{
|
||
LangObj = new Object;
|
||
LangObj = window.external.Language;
|
||
}
|
||
|
||
// END Initialization Code
|
||
|
||
// make standard ClickNext Str
|
||
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_ClickNextStrTopPercent800_Text="87%";
|
||
var L_ClickNextStrTopPercent1024_Text="84%";
|
||
var L_ClickNextStrLeftPercent_Text="62%";
|
||
|
||
var g_ClickNextStr = "<table tabindex=-1 border=0 style=\"position:absolute; top: " + ((window.top.screen.width < 1024) ? L_ClickNextStrTopPercent800_Text : L_ClickNextStrTopPercent1024_Text) + "; left:2%;\"><tr><td width="+L_ClickNextStrLeftPercent_Text+"></td>"
|
||
+"<td class=\"text-primary\" ID=NextText>"+L_ContStr_Text+" <span class=\"emphasis-lesser\">"
|
||
+L_NextStr_Text+"</span>"+L_ClickNextLocStr_Text+L_Period_Text+"</td></tr></table>";
|
||
|
||
var L_NextStrTopPercent_Text="83%";
|
||
|
||
function trace(sMsg)
|
||
{
|
||
DebugObj.Trace(sMsg + "\n");
|
||
}
|
||
|
||
function logError(funcName, err)
|
||
{
|
||
trace( "Exception in " + funcName + ": "
|
||
+ err.number.toString(16) + ": "
|
||
+ err.description
|
||
);
|
||
if (DebugObj.get_MsDebugMode())<EFBFBD><EFBFBD>
|
||
{
|
||
alert("OOBE Exception\n"
|
||
+ "\nFunction: " + funcName
|
||
+ "\nError: " + err.number.toString(16)
|
||
+ "\nDescription: " + err.description
|
||
);
|
||
}
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// IMETut1.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
function imetut_LoadMe()
|
||
{
|
||
InitFrameRef();
|
||
g_FirstFocusElement = g.btnNextText;
|
||
|
||
if (1 != DirObj.get_DoRegionalKeyboard())
|
||
HideButtons(HIDE_BACK);
|
||
|
||
InitButtons();
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// theatre.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
function Theatre_LoadMe( )
|
||
{
|
||
InitFrameRef( );
|
||
g_FirstFocusElement = g.btnNext;
|
||
|
||
InitButtons( );
|
||
}
|
||
|
||
function Theatre_OnFSCommand(command, args)
|
||
{
|
||
if ("MOVIE_COMPLETE" == command)
|
||
{
|
||
g.btnNext.click( );
|
||
}
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// welcome.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
function Start_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 == KeyEnter) &&
|
||
(g.btnNext.disabled == false))
|
||
{
|
||
GoNext();
|
||
}
|
||
else
|
||
{
|
||
KeyPressIsValid();
|
||
}
|
||
}
|
||
|
||
function MAKELANGID(p, s)
|
||
{
|
||
return (( s << 10) | p);
|
||
}
|
||
|
||
function MAKELCID(lgid, srtid)
|
||
{
|
||
return ((srtid << 16) | lgid);
|
||
}
|
||
|
||
function IsKoreanLocale() {
|
||
var language = ApiObj.get_UserDefaultLCID();
|
||
if (language == MAKELCID(MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), SORT_DEFAULT)) {
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
function IsFarEastLocale()
|
||
{
|
||
// if local is Korean, Simplified Chinese,
|
||
// Traditional Chinese,or Japanese then we return true
|
||
var language = ApiObj.get_UserDefaultLCID();
|
||
|
||
if (language == MAKELCID(MAKELANGID(LANG_KOREAN, SUBLANG_KOREAN), SORT_DEFAULT) ||
|
||
language == MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL), SORT_DEFAULT) ||
|
||
language == MAKELCID(MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED), SORT_DEFAULT) ||
|
||
language == MAKELCID(MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT), SORT_DEFAULT))
|
||
return true
|
||
else
|
||
return false;
|
||
}
|
||
// 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.
|
||
//
|
||
|
||
var L_Thanks1_Text="thank you";
|
||
var L_Welc_Text="Welcome";
|
||
var L_Comma_Text=",";
|
||
|
||
var g_bNeedtoRunWelcomeFadeIn= (DirObj.get_DoWelcomeFadeIn()>0);
|
||
var g_bNeedtoRunAnimation=false; // will be set in InitApplication
|
||
var g_RunAnimInitVal = DirObj.get_DoRunAnimation();
|
||
var g_bAnimationRunning = false;
|
||
|
||
function Start_LoadMe()
|
||
{
|
||
InitFrameRef();
|
||
|
||
var WaterMarkFileHandle=FileSystemObj.GetFile(g_WaterMarkFileNameStr);
|
||
if(WaterMarkFileHandle.size != g_WaterMarkFileSize) {
|
||
g.WelcomeImg.style.display="none";
|
||
}
|
||
|
||
g_FirstFocusElement = g.btnNext;
|
||
g.btnNext.disabled = false;
|
||
|
||
var strOEMName = g_OEMNameStr;
|
||
var strPrepend = "";
|
||
|
||
var FirstName=window.external.UserInfo.get_FirstName();
|
||
var LastName=window.external.UserInfo.get_LastName();
|
||
|
||
if((FirstName.length>0) || (LastName.length>0)) {
|
||
var NameStr="";
|
||
|
||
if (IsFarEastLocale()) {
|
||
// switch first & last name order
|
||
var tmpstr=FirstName;
|
||
FirstName=LastName;
|
||
LastName=tmpstr;
|
||
}
|
||
|
||
// get the right # of spaces b/w words
|
||
if(FirstName!=null) {
|
||
NameStr=FirstName;
|
||
}
|
||
if(LastName!=null && LastName!="") {
|
||
if(NameStr!="") {
|
||
NameStr=NameStr+" "+LastName;
|
||
} else {
|
||
NameStr=LastName;
|
||
}
|
||
}
|
||
g.welcome_namestr.innerText = L_Welc_Text+ " " +NameStr+L_Comma_Text + " " + L_Thanks1_Text + " ";
|
||
}
|
||
|
||
// put an "a" or an "an" before the OEM name in welcome page
|
||
|
||
if (strOEMName.length != 0)
|
||
{
|
||
var Query = strOEMName.charAt(0);
|
||
if (Query.match(/A|E|I|O|U|a|e|i|o|u/) != null)
|
||
strPrepend = L_StrVowelBeginningPrepender_Text;
|
||
else
|
||
strPrepend = L_StrPrepender_Text;
|
||
|
||
g.spanOEMName.innerText = strPrepend + " " + strOEMName;
|
||
}
|
||
|
||
g.WelcomePageText.style.display="inline";
|
||
|
||
InitButtons();
|
||
|
||
if(g_bNeedtoRunWelcomeFadeIn) {
|
||
// this entire 'junkspan' sequence is done so that the necessary DLL's for blendtrans
|
||
//(ddraw.dll/ddrawex.dll/dxtmsft.dll/dxtrans.dll/atl.dll) are preloaded before the
|
||
// real blend is done after the movie
|
||
|
||
junkspan.style.filter="blendTrans(duration=10.0)"; // 10.0 is junk placeholder
|
||
junkspan.filters[0].duration=0.1;
|
||
junkspan.filters[0].enabled=true;
|
||
junkspan.filters[0].Apply();
|
||
junkspan.style.backgroundColor="red";
|
||
junkspan.style.display="inline";
|
||
junkspan.filters[0].Play();
|
||
|
||
junkspan.style.display="none";
|
||
junkspan.filters[0].enabled=false;
|
||
junkspan.style.filter=null;
|
||
}
|
||
|
||
window.external.ShowOOBEWindow(); // we've done all the init preprocessing we can
|
||
|
||
// see if we need to run movie
|
||
if((g_RunAnimInitVal>0) && (g_bNeedtoRunAnimation || (g_RunAnimInitVal==99))) {
|
||
g_bAnimationRunning = true;
|
||
MovieFrame.style.display="inline"; // start movie
|
||
|
||
ScreenFrame.style.visibility = "visible";
|
||
ScreenFrame.style.display = "inline";
|
||
} else if(g_bNeedtoRunWelcomeFadeIn) {
|
||
|
||
// transition still not visible on direct boot, too much disk activity
|
||
// 7 seconds appears to be visible. may need to fine tune that 4.5 number.
|
||
// want to consider machine speed as well, longer number may be too long
|
||
// for slow machine? (or you may need longer, since it takes longer to load?)
|
||
// want fast machine to work well
|
||
|
||
RunWelcomeFadeIn(3.0);
|
||
|
||
} else {
|
||
ScreenFrame.style.visibility = "visible";
|
||
ScreenFrame.style.display = "inline";
|
||
OOBEDocBody.style.cursor = "default";
|
||
g_FirstFocusElement.focus();
|
||
window.setTimeout("Agent_Activate('Welcome');",1000);
|
||
}
|
||
|
||
g_bNeedtoRunAnimation=false;
|
||
g_RunAnimInitVal=0;
|
||
}
|
||
|
||
function RunWelcomeFadeIn(duration) {
|
||
// need to turn off so fade transition is visible
|
||
// needed if nav'ing from USB pages
|
||
|
||
if(ScreenFrame.style.display!="none") {
|
||
ScreenFrame.style.display="none";
|
||
ScreenFrame.style.visibility = "hidden";
|
||
}
|
||
|
||
ScreenFrame.style.filter="blendTrans(duration=10.0)"; // 10.0 is junk placeholder
|
||
ScreenFrame.filters[0].duration=duration;
|
||
ScreenFrame.filters[0].enabled=true;
|
||
ScreenFrame.onfilterchange=DisableScreenTransition;
|
||
|
||
ScreenFrame.filters[0].Apply();
|
||
MovieFrame.style.display="none"; // dont know if this works w/transition below
|
||
ScreenFrame.style.visibility = "visible";
|
||
ScreenFrame.style.display = "inline";
|
||
ScreenFrame.filters[0].Play();
|
||
}
|
||
|
||
function PostMovieWelcomeInit() {
|
||
|
||
if(g_bNeedtoRunWelcomeFadeIn && (g_CurrentCKPT==CKPT_WELCOME)) {
|
||
|
||
g_bAnimationRunning = false;
|
||
RunWelcomeFadeIn(3.0);
|
||
|
||
} else {
|
||
|
||
MovieFrame.style.display="none"; // dont know if this works w/transition below
|
||
ScreenFrame.style.visibility = "visible";
|
||
ScreenFrame.style.display = "inline";
|
||
g_FirstFocusElement.focus();
|
||
OOBEDocBody.style.cursor = "default";
|
||
|
||
// want to make sure screen is drawn before agent pops up
|
||
if(g_CurrentCKPT==CKPT_WELCOME) {
|
||
window.setTimeout("Agent_Activate('Welcome');",1000);
|
||
} else if(g_CurrentCKPT==CKPT_HWCHK) {
|
||
g_bAnimationRunning = false; // want to prevent OnDeviceArrival from doing anything until now
|
||
|
||
// check if USB device was attached during movie, possible nav to welcome
|
||
OnDeviceArrival();
|
||
}
|
||
}
|
||
|
||
g_bAnimationRunning = false;
|
||
}
|
||
|
||
function DisableScreenTransition() {
|
||
// called when transition completed
|
||
|
||
g_bNeedtoRunWelcomeFadeIn=false;
|
||
|
||
ScreenFrame.filters[0].enabled=false;
|
||
ScreenFrame.style.filter=null;
|
||
g_FirstFocusElement.focus(); // bugbug need to add this back to filter too
|
||
OOBEDocBody.style.cursor = "default";
|
||
window.setTimeout("Agent_Activate('Welcome');",700);
|
||
}
|
||
|
||
// 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()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if ((g.event.srcElement != g.edt_FirstName) &&
|
||
(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.
|
||
// First || Last
|
||
//
|
||
function Start_CheckEnableNextButton()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (Start_CheckLengthRequirement() &&
|
||
Start_CheckLengthNotEqualSpaces())
|
||
{
|
||
g.btnNext.disabled = false;
|
||
}
|
||
else
|
||
{
|
||
g.btnNext.disabled = true;
|
||
}
|
||
InitButtons();
|
||
}
|
||
|
||
function Start_CheckLengthRequirement()
|
||
{
|
||
if ((g.edt_FirstName.value.length != 0) ||
|
||
(g.edt_LastName.value.length != 0))
|
||
return true;
|
||
else
|
||
return false;
|
||
}
|
||
|
||
function Start_CheckLengthNotEqualSpaces()
|
||
{
|
||
if ((g.edt_FirstName.value.length != NumberOfSpaces(g.edt_FirstName.value)) ||
|
||
(g.edt_LastName.value.length != NumberOfSpaces(g.edt_LastName.value)))
|
||
return true;
|
||
else
|
||
return false;
|
||
}
|
||
// END welcome.htm
|
||
|
||
// reg1.htm ////
|
||
|
||
var g_Reg1Yes=true;
|
||
|
||
function HandleReg1Click() {
|
||
g_Reg1Yes=(g.event.srcElement==g.radioRegNeedPP);
|
||
}
|
||
|
||
function Reg1_LoadMe()
|
||
{
|
||
InitFrameRef();
|
||
|
||
if (1 == RegisterObj.get_PostToOEM) {
|
||
g.OEMName.innerText=g_OEMNameStr+ " " + L_And_Text + " " ;
|
||
g.OEMName5.innerText=g.OEMName.innerText;
|
||
if(g.OEMName.innerText=="") {
|
||
g.OEMName.innerText="Error: Missing OEM Name in oobeinfo.ini [Branding] section ";
|
||
}
|
||
}
|
||
|
||
g.Reg1Title.style.visibility="visible";
|
||
g.Reg1Intro.style.visibility="visible";
|
||
|
||
g_FirstFocusElement = g.btnNext;
|
||
|
||
if(g_Reg1Yes) {
|
||
g.radioRegNeedPP.checked=true;
|
||
} else {
|
||
g.radioRegLater.checked=true;
|
||
}
|
||
|
||
g.radioRegNeedPP.onclick=HandleReg1Click;
|
||
g.radioRegLater.onclick=HandleReg1Click;
|
||
|
||
InitButtons();
|
||
|
||
if (g_FirstFocusElement != null)
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
// reg2.htm //////
|
||
|
||
var g_Reg2EmailName="";
|
||
var g_Reg2MachineName="";
|
||
var g_Reg2PW="";
|
||
|
||
function Reg2SaveSettings() {
|
||
// restore fields
|
||
g_Reg2EmailName= g.emailname.value;
|
||
g_Reg2MachineName= g.machinename.value;
|
||
g_Reg2PW=g.passwd.value;
|
||
}
|
||
|
||
function Reg2_LoadMe() {
|
||
InitFrameRef();
|
||
g_FirstFocusElement = g.emailname;
|
||
|
||
// restore fields
|
||
g.emailname.value = g_Reg2EmailName;
|
||
g.machinename.value = g_Reg2MachineName;
|
||
g.passwd.value = g_Reg2PW;
|
||
|
||
|
||
InitButtons();
|
||
|
||
if (g_FirstFocusElement != null)
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
|
||
function Reg2_RemindMe()
|
||
{
|
||
// BUGBUG: need to fill in later
|
||
/*
|
||
Following Windows Welcome, Microsoft will send you an e-mail message explaining how to retrieve your password. You can then register Windows from the Start menu.
|
||
*/
|
||
}
|
||
|
||
function Default_radioClicked()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
g.btnNext.disabled = false;
|
||
InitButtons();
|
||
}
|
||
|
||
//// reg3.htm ///////////////////////
|
||
|
||
var StateAbbrevs = new Array("","AL","AK","AZ","AR","CA","CO","CT","DC","DE","FL","GA","HI","ID","IL","IN","IA","KS","KY","LA","ME","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","OH","OK","OR","PA","PR","RI","SC","SD","TN","TX","UT","VT","VA","WA","WV","WI","WY");
|
||
var FullStateNames = new Array("Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Washington, D.C.","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Carolina","North Dakota","Ohio","Oklahoma","Oregon","Pennsylvania","Puerto Rico","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming");
|
||
var ProvinceNames = new Array("","Alberta","British Columbia","Manitoba","New Brunswick","Newfoundland","Northwest Territories","Nova Scotia","Nunavut","Ontario","Prince Edward Island","Quebec","Saskatchewan","Yukon");
|
||
|
||
// need ability to map state name string to index into StateAbbrevs
|
||
var g_StateName2IndexMap= new ActiveXObject("Scripting.Dictionary");
|
||
g_StateName2IndexMap.CompareMode = CompareModeText;
|
||
var g_ProvinceName2IndexMap= new ActiveXObject("Scripting.Dictionary");
|
||
g_ProvinceName2IndexMap.CompareMode = CompareModeText;
|
||
|
||
// windows scripting host -- used to send fake keybd events for keyboard helper on PID page
|
||
var WshShell = new ActiveXObject("WScript.Shell");
|
||
|
||
// init hash table
|
||
var ii;
|
||
for(ii=1;ii<=FullStateNames.length;ii++) {
|
||
// add both full name and abbrev to hash table
|
||
g_StateName2IndexMap.Add(FullStateNames[ii-1].toUpperCase(),ii);
|
||
g_StateName2IndexMap.Add(StateAbbrevs[ii].toUpperCase(),ii);
|
||
|
||
if(ii < ProvinceNames.length) {
|
||
g_ProvinceName2IndexMap.Add(ProvinceNames[ii].toUpperCase(),ii);
|
||
}
|
||
}
|
||
|
||
var L_Postal_Text = "Postal or <u>Z</u>IP code:";
|
||
var L_AsteriskPostal_Text = "*Postal or <u>Z</u>IP code:";
|
||
var L_Province_Text= "State/<u>P</u>rovince:";
|
||
var L_AsteriskProvince_Text= "*State/<u>P</u>rovince:";
|
||
|
||
var L_Canada_Text="Canada";
|
||
var L_UnitedStates_Text="United States of America";
|
||
|
||
function Reg3UserCountryChanged() {
|
||
// AGENT: notify Agent of the change
|
||
|
||
Agent_OnSelectChange(g.selCountry);
|
||
|
||
g_Country=g.selCountry.options(g.selCountry.selectedIndex).text;
|
||
|
||
if(g_Country == L_UnitedStates_Text) {
|
||
// when changing to US, try to translate any textbox string to state index
|
||
if(g.UserStateTextBox.value!="") {
|
||
var res=g_StateName2IndexMap.Item(g.UserStateTextBox.value.toUpperCase());
|
||
if(res!=null) {
|
||
g.selUSState.selectedIndex=res;
|
||
}
|
||
}
|
||
g.selCAProvince.style.display="none";
|
||
g.UserStateTextBox.style.display="none";
|
||
|
||
if(g.selUSState.style.display!="inline") {
|
||
g.selUSState.style.display="inline";
|
||
}
|
||
g.LabelZIP.innerHTML = L_AsteriskPostal_Text;
|
||
g.StateLabel.innerHTML = L_AsteriskProvince_Text;
|
||
g.StateLabel.htmlFor="selUSState";
|
||
|
||
} else if(g_Country == L_Canada_Text) {
|
||
// when changing to Canada, try to translate any textbox string to province index
|
||
if(g.UserStateTextBox.value!="") {
|
||
var res=g_ProvinceName2IndexMap.Item(g.UserStateTextBox.value.toUpperCase());
|
||
if(res!=null) {
|
||
g.selCAProvince.selectedIndex=res;
|
||
}
|
||
}
|
||
g.selUSState.style.display="none";
|
||
g.UserStateTextBox.style.display="none";
|
||
g.selCAProvince.style.display="inline";
|
||
g.LabelZIP.innerHTML = L_AsteriskPostal_Text;
|
||
g.StateLabel.innerHTML = L_AsteriskProvince_Text;
|
||
g.StateLabel.htmlFor="selCAProvince";
|
||
|
||
} else {
|
||
g.selUSState.style.display="none";
|
||
g.selCAProvince.style.display="none";
|
||
g.UserStateTextBox.style.display="inline";
|
||
g.LabelZIP.innerHTML = L_Postal_Text;
|
||
g.StateLabel.innerHTML = L_Province_Text;
|
||
g.StateLabel.htmlFor="UserStateTextBox";
|
||
}
|
||
|
||
g_CountryIdx=g.selCountry.selectedIndex;
|
||
|
||
Reg3UserStateChanged();
|
||
}
|
||
|
||
function Reg3UserStateChanged() {
|
||
|
||
// AGENT: notify Agent of the change
|
||
|
||
// BUGBUG: ok for no notify on change to textbox?
|
||
Agent_OnSelectChange((g.selUSState.style.display != "none") ? g.selUSState : g.selCAProvince);
|
||
|
||
if(g.selUSState.style.display!="none")
|
||
{
|
||
g_StateIdx=g.selUSState.selectedIndex;
|
||
g_State=g.selUSState.options(g.selUSState.selectedIndex).text;
|
||
}
|
||
else if (g.selCAProvince.style.display!="none")
|
||
{
|
||
g_StateIdx=g.selCAProvince.selectedIndex;
|
||
g_State=g.selCAProvince.options(g.selCAProvince.selectedIndex).text;
|
||
}
|
||
else
|
||
{
|
||
g_State = g.UserStateTextBox.value;
|
||
}
|
||
}
|
||
|
||
// store field info here:
|
||
|
||
var g_FirstName=InfoObj.get_FirstName();
|
||
var g_MiddleName=InfoObj.get_MiddleInitial(); // InfoObj.get_MiddleName(); BUGBUG need to add this fn
|
||
var g_LastName=InfoObj.get_LastName();
|
||
var g_Address1=InfoObj.get_Address1();
|
||
var g_Address2=InfoObj.get_Address2();
|
||
var g_City=InfoObj.get_City();
|
||
var g_ZipCode=InfoObj.get_Zip();
|
||
var g_EmailAddr= InfoObj.get_PrimaryEmail();
|
||
var g_Country=InfoObj.get_Country();
|
||
var g_CountryIdx=-1;
|
||
var g_State=InfoObj.get_State();
|
||
var g_StateIdx=0;
|
||
|
||
function Reg3SaveSettings() {
|
||
g_FirstName=g.UserFirstName.value;
|
||
g_MiddleName=g.UserMiddleName.value;
|
||
g_LastName=g.UserLastName.value;
|
||
g_Address1=g.UserAddress.value;
|
||
g_Address2=g.UserAddress2.value;
|
||
g_ZipCode=g.UserZipCode.value;
|
||
g_EmailAddr=g.UserEmailAddress.value;
|
||
g_City=g.UserCity.value;
|
||
g_Country=g.selCountry.options(g.selCountry.selectedIndex).text;
|
||
|
||
if(g.UserStateTextBox.style.display!="none")
|
||
{
|
||
g_State=g.UserStateTextBox.value;
|
||
}
|
||
else if (g.selUSState.style.display!="none")
|
||
{
|
||
g_State=g.selUSState.options(g.selUSState.selectedIndex).text;
|
||
}
|
||
else
|
||
{
|
||
g_State=g.selCAProvince.options(g.selCAProvince.selectedIndex).text;
|
||
}
|
||
|
||
InfoObj.set_FirstName(g_FirstName);
|
||
InfoObj.set_LastName(g_LastName);
|
||
InfoObj.set_MiddleInitial(g_MiddleName);
|
||
InfoObj.set_Country(g_Country);
|
||
InfoObj.set_State(g_State);
|
||
InfoObj.set_Address1(g_Address1);
|
||
InfoObj.set_Address2(g_Address2);
|
||
InfoObj.set_PrimaryEmail(g_EmailAddr);
|
||
InfoObj.set_Zip(g_ZipCode);
|
||
InfoObj.set_City(g_City);
|
||
|
||
TapiObj.set_CountryIndex(g.selCountry.selectedIndex);
|
||
}
|
||
|
||
var L_FullName_Text="*<u>F</u>ull Name:";
|
||
|
||
function Reg3_LoadMe()
|
||
{
|
||
// AGENT: we don't want Agent to process any events
|
||
// that might occur as a result of initializing the
|
||
// controls.
|
||
|
||
Agent_IgnoreEvents(true);
|
||
|
||
InitFrameRef();
|
||
|
||
if (1 == RegisterObj.get_PostToOEM) {
|
||
g.OEMName.innerText=g_OEMNameStr+ " " + L_And_Text + " " ;
|
||
if(g.OEMName.innerText=="") {
|
||
g.OEMName.innerText="Error: Missing OEM Name in oobeinfo.ini [Branding] section ";
|
||
}
|
||
}
|
||
|
||
var fTapi = TapiObj.IsTAPIConfigured(); // init TAPI
|
||
|
||
var CountryOptStr=TapiObj.get_AllCountryName();
|
||
|
||
// we used to do a document.write() to put this into selCountry. IE 5.5 seems to
|
||
// have redraw probs with long doc.writes, so parse it out and add it once in onload
|
||
|
||
var i;
|
||
var oOption;
|
||
var regexp1=/<OPTION>/g;
|
||
var tmpOptsStr = CountryOptStr.replace(regexp1, ""); //delete <OPTION>
|
||
var OptStrArray = tmpOptsStr.split("</OPTION>");
|
||
|
||
for(i=0; i < OptStrArray.length; i++) {
|
||
oOption = g.document.createElement("OPTION");
|
||
oOption.text = OptStrArray[i];
|
||
g.selCountry.add(oOption);
|
||
}
|
||
|
||
g.selCountry.onchange=Reg3UserCountryChanged;
|
||
|
||
g.Reg3Title.style.visibility="visible";
|
||
|
||
g_FirstFocusElement = g.UserFirstName;
|
||
|
||
if (IsFarEastLocale())
|
||
{
|
||
|
||
/*For JPN, CHT, CHS,
|
||
Last Name
|
||
First Name
|
||
Country/Region
|
||
Province
|
||
City
|
||
Address
|
||
Zip
|
||
E-Mail
|
||
|
||
For KOR only,
|
||
Full Name
|
||
Country/Region
|
||
Province
|
||
City
|
||
Address
|
||
Zip
|
||
E-Mail
|
||
*/
|
||
g.MainPageCell.style.display="none"; // hide while we change order
|
||
|
||
// no middle name for far east langs
|
||
g.MiddleNameRow.style.display="none";
|
||
|
||
g.FieldTable.moveRow(2,0); // move lastname in front of first
|
||
g.FieldTable.moveRow(7,3); // move country to after firstname
|
||
g.FieldTable.moveRow(7,4); // move province to after country
|
||
g.FieldTable.moveRow(7,5); // move city to after province
|
||
|
||
g.FE_ZIPLabel.innerHTML=g.LabelRight.innerHTML;
|
||
g.FE_ZIPInput.innerHTML=g.MenuRight.innerHTML;
|
||
g.FE_ZIPRow.style.display="inline";
|
||
|
||
g.LabelRight.innerHTML="";
|
||
g.MenuRight.innerHTML="";
|
||
|
||
// no reason to limit these lengths for FE, so just make them match others
|
||
g.UserZipCode.size=30;
|
||
g.UserZipCode.maxlength=120;
|
||
|
||
g.UserStateTextBox.size=30;
|
||
g.UserStateTextBox.maxlength=120;
|
||
|
||
g_FirstFocusElement = g.UserLastName;
|
||
|
||
if (IsKoreanLocale()) {
|
||
g.LastNameRow.style.display="none";
|
||
g.LabelFirstName.innerHTML=L_FullName_Text;
|
||
g_FirstFocusElement = g.UserFirstName;
|
||
}
|
||
|
||
g.MainPageCell.style.display="inline";
|
||
}
|
||
|
||
// limit width of country menu since some text options are very long
|
||
g.selCountry.style.width=g.UserEmailAddress.offsetWidth;
|
||
|
||
g.UserFirstName.value=g_FirstName;
|
||
g.UserMiddleName.value=g_MiddleName;
|
||
g.UserLastName.value=g_LastName;
|
||
g.UserAddress.value=g_Address1;
|
||
g.UserAddress2.value=g_Address2;
|
||
g.UserZipCode.value=g_ZipCode;
|
||
g.UserEmailAddress.value=g_EmailAddr;
|
||
g.UserCity.value=g_City;
|
||
|
||
// placeholder idx 0 option is needed to fix 101447
|
||
// Due to a possible mshtml bug, the cursor is shifted right when the menu
|
||
// expands to its full width.
|
||
|
||
g.selUSState.remove(0);
|
||
|
||
for (var i = 0; i < StateAbbrevs.length; i++) {
|
||
var oOption = g.document.createElement("OPTION");
|
||
oOption.text = StateAbbrevs[i];
|
||
if (StateAbbrevs[i] == g_State)
|
||
{
|
||
g_StateIdx = i;
|
||
}
|
||
g.selUSState.add(oOption);
|
||
}
|
||
|
||
for (i = 0; i < ProvinceNames.length; i++) {
|
||
oOption = g.document.createElement("OPTION");
|
||
oOption.text = ProvinceNames[i];
|
||
if (ProvinceNames[i] == g_State)
|
||
{
|
||
g_StateIdx = i;
|
||
}
|
||
g.selCAProvince.add(oOption);
|
||
}
|
||
|
||
// Note: the way code below is written, g_CountryIdx always >=0 so 2nd branch never
|
||
// taken. causes no probs though
|
||
|
||
g_CountryIdx = TapiObj.get_CountryIndex();
|
||
|
||
if(g_CountryIdx>=0)
|
||
{
|
||
g.selCountry.selectedIndex=g_CountryIdx;
|
||
if(g_Country == L_UnitedStates_Text)
|
||
{
|
||
g.selUSState.selectedIndex=g_StateIdx;
|
||
}
|
||
else if(g_Country == L_Canada_Text)
|
||
{
|
||
g.selCAProvince.selectedIndex=g_StateIdx;
|
||
}
|
||
else
|
||
g.UserStateTextBox.value=g_State;
|
||
}
|
||
else
|
||
{
|
||
// get default value
|
||
g.selCountry.selectedIndex = TapiObj.get_CountryIndex();
|
||
}
|
||
|
||
Reg3UserCountryChanged();
|
||
g.MainPageCell.style.visibility="visible";
|
||
|
||
if (1 == RegisterObj.get_PostToOEM)
|
||
{
|
||
if (bPostChkBxStateSaved)
|
||
{
|
||
g.sharems.checked = g_PostToMS;
|
||
g.shareoem.checked = g_PostToOEM;
|
||
|
||
if(!g_PostToMS && !g_PostToOEM) {
|
||
g.btnNext.onclick = GoCancel; // convert to Skip if nothing checked
|
||
} else {
|
||
g.btnNext.onclick = GoNext;
|
||
}
|
||
}
|
||
g.OEMName2.innerText=g_OEMNameStr;
|
||
g.OEMName3.innerText=g_OEMNameStr;
|
||
g.RegChkBxGrp.style.display = "inline";
|
||
}
|
||
else
|
||
{
|
||
g.MSPrivatePolicyLink.style.display = "inline";
|
||
g_PostToOEM = false;
|
||
}
|
||
|
||
InitButtons();
|
||
|
||
g_FirstFocusElement.focus();
|
||
|
||
// AGENT: now we want event processing
|
||
|
||
Agent_IgnoreEvents(false);
|
||
}
|
||
|
||
function GetCurrentProvince() {
|
||
if(g.selCountry.options(g.selCountry.selectedIndex).text == L_UnitedStates_Text) {
|
||
return g.selUSState.options(g.selUSState.selectedIndex).text;
|
||
} else if(g.selCountry.options(g.selCountry.selectedIndex).text == L_Canada_Text) {
|
||
return g.selCAProvince.options(g.selCAProvince.selectedIndex).text;
|
||
} else return g.UserStateTextBox.value;
|
||
}
|
||
|
||
function GetCurrentCountry() {
|
||
return g.selCountry.options(g.selCountry.selectedIndex).text;
|
||
}
|
||
|
||
var L_EnterValid_Text="Please fill in the required fields.";
|
||
var L_Email_Text="Please enter a valid E-mail address or leave the E-mail text box empty.";
|
||
var L_And_Text="and";
|
||
|
||
var g_PostToMS = true;
|
||
var g_PostToOEM = true;
|
||
var POST_TO_OEM = 1
|
||
var POST_TO_MS = 2
|
||
var bPostChkBxStateSaved = false;
|
||
|
||
function RegChkBoxOnClick()
|
||
{
|
||
g_PostToMS = g.sharems.checked;
|
||
g_PostToOEM = g.shareoem.checked;
|
||
bPostChkBxStateSaved = true;
|
||
|
||
if(!g_PostToMS && !g_PostToOEM) {
|
||
g.btnNext.onclick = GoCancel; // convert to Skip if nothing checked
|
||
} else {
|
||
g.btnNext.onclick = GoNext;
|
||
}
|
||
|
||
InitButtons();
|
||
}
|
||
|
||
function VerifyReg3Fields() {
|
||
g.error_mesg.style.display="none";
|
||
var LastErrorField = null;
|
||
|
||
var CurReg3ErrStringArray = new Array();
|
||
|
||
// user needs to complete input of address/name
|
||
// this dynamically builds the list of erroneous fields to give to the user
|
||
|
||
if(g.UserEmailAddress.value != "") {
|
||
// do some validation on email address
|
||
// Note special regexpr char like '\S' must be double-\'d because they are inside a string
|
||
var re = new RegExp("^\\s*\\S+@\\S+\\.\\S\\S+","");
|
||
if(re.exec(g.UserEmailAddress.value) == null) {
|
||
LastErrorField = g.UserEmailAddress;
|
||
g.LabelEmail.style.color = "red";
|
||
} else {
|
||
g.LabelEmail.style.color = "black";
|
||
}
|
||
}
|
||
|
||
var CurCountry=GetCurrentCountry();
|
||
|
||
// dont require state or zip except for US/Canada
|
||
if ((CurCountry == L_UnitedStates_Text)||(CurCountry == L_Canada_Text)) {
|
||
if(g.UserZipCode.value == "") {
|
||
LastErrorField = g.UserZipCode;
|
||
g.LabelZIP.style.color = "red";
|
||
} else {
|
||
g.LabelZIP.style.color = "black";
|
||
}
|
||
|
||
if(GetCurrentProvince() == "") {
|
||
if(g.selUSState.style.display!="none") {
|
||
LastErrorField = g.selUSState;
|
||
} else {
|
||
LastErrorField = g.selCAProvince;
|
||
}
|
||
g.StateLabel.style.color = "red";
|
||
|
||
} else {
|
||
g.StateLabel.style.color = "black";
|
||
}
|
||
}
|
||
|
||
if(g.UserCity.value == "") {
|
||
LastErrorField = g.UserCity;
|
||
g.LabelCity.style.color = "red";
|
||
} else {
|
||
g.LabelCity.style.color = "black";
|
||
}
|
||
|
||
if(g.UserAddress.value == "") {
|
||
LastErrorField = g.UserAddress;
|
||
g.LabelAddress.style.color = "red";
|
||
} else {
|
||
g.LabelAddress.style.color = "black";
|
||
}
|
||
|
||
|
||
if((g.UserLastName.value == "") && (g.LastNameRow.style.display!="none")) {
|
||
LastErrorField = g.UserLastName;
|
||
g.LabelLastName.style.color = "red";
|
||
} else {
|
||
g.LabelLastName.style.color = "black";
|
||
}
|
||
|
||
if((g.UserFirstName.value == "")&&(g.UserMiddleName.value == "")) {
|
||
g.LabelFirstName.style.color = "red";
|
||
LastErrorField = g.UserFirstName;
|
||
} else {
|
||
g.LabelFirstName.style.color = "black";
|
||
}
|
||
|
||
if(LastErrorField==null) {
|
||
return true;
|
||
}
|
||
|
||
// handle error
|
||
|
||
if(LastErrorField==g.UserEmailAddress) {
|
||
g.error_mesg.innerText = L_Email_Text;
|
||
} else {
|
||
g.error_mesg.innerText = L_EnterValid_Text;
|
||
}
|
||
|
||
g.error_mesg.style.color = "red";
|
||
g.error_mesg.style.display="inline";
|
||
|
||
try
|
||
{
|
||
g.btnNext.disabled=false;
|
||
}
|
||
catch(e) {}
|
||
try
|
||
{
|
||
g.btnBack.disabled=false;
|
||
}
|
||
catch(e) {}
|
||
try
|
||
{
|
||
g.btnSkip.disabled=false;
|
||
}
|
||
catch(e) {}
|
||
InitButtons();
|
||
|
||
LastErrorField.focus();
|
||
|
||
return false;
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// 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()
|
||
{
|
||
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 = "9";
|
||
}
|
||
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
|
||
|
||
|
||
// EULAWarn.htm
|
||
var L_BadEulaOEM1_TEXT = "You have chosen not to agree to the ";
|
||
var L_BadEulaOEM2_TEXT = " terms of the license agreement. If you do not accept the End User License Agreement, you cannot use Windows Whistler.";
|
||
var L_BadEulaMSOEM1_TEXT = "You have chosen not to agree to the Microsoft or ";
|
||
var L_BadEulaMSOEM2_TEXT = " terms of the license agreement. If you do not accept the End User License Agreements, you cannot use Windows Whistler.";
|
||
|
||
var BadEulaOEMStr = L_BadEulaOEM1_TEXT + g_OEMNameStr + L_BadEulaOEM2_TEXT;
|
||
var BadEulaMSOEMStr = L_BadEulaMSOEM1_TEXT + g_OEMNameStr + L_BadEulaMSOEM2_TEXT;
|
||
|
||
function EULAWarn_LoadMe()
|
||
{
|
||
InitFrameRef();
|
||
|
||
g_FirstFocusElement = g.btnBack;
|
||
|
||
if (!g_AcceptMS_EULA && !g_AcceptOEM_EULA)
|
||
g.EULAWarn_INFO1.innerText = BadEulaMSOEMStr;
|
||
else if (!g_AcceptOEM_EULA) // just didn't accept OEM
|
||
g.EULAWarn_INFO1.innerText = BadEulaOEMStr;
|
||
|
||
InitButtons();
|
||
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
// END EULAWarn.htm
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// General Default LoadMe function
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
function _Default_LoadMe(UseSimpleNavArg)
|
||
{
|
||
InitFrameRef();
|
||
|
||
if (g.btnNext != null)
|
||
g_FirstFocusElement = g.btnNext;
|
||
else if (g.btnSkip != null)
|
||
g_FirstFocusElement = g.btnSkip;
|
||
else if (g.btnBack != null)
|
||
g_FirstFocusElement = g.btnBack;
|
||
|
||
InitButtons(UseSimpleNavArg);
|
||
|
||
if (g_FirstFocusElement != null)
|
||
g_FirstFocusElement.focus();
|
||
else
|
||
g.document.body.focus();
|
||
/*
|
||
// small piddly things I dont want to create a new onload fn for
|
||
switch(g_CurrentCKPT) {
|
||
case CKPT_REGKB_COMMIT:
|
||
break;
|
||
}
|
||
*/
|
||
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// eula.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
function HandleTextAreaFocus() {
|
||
g.event.srcElement.style.borderStyle="ridge";
|
||
}
|
||
|
||
function HandleTextAreaBlur() {
|
||
g.event.srcElement.style.borderStyle="";
|
||
}
|
||
|
||
function EulaLoadMe()
|
||
{
|
||
if (window.external.GetNoWelcomeFinish())
|
||
{
|
||
g.btnNext = g.btnFinish;
|
||
g.btnFinish.style.display = "inline";
|
||
g.ToContinueFinishSpn.style.display = "inline";
|
||
}
|
||
else
|
||
{
|
||
g.ToContinueNextSpn.style.display = "inline";
|
||
g.btnNext.style.display = "inline";
|
||
}
|
||
|
||
InitFrameRef();
|
||
|
||
if (1 == window.external.GetOEMEula()) // Show both MS and OEM Eula
|
||
{
|
||
g.txtEULA.rows = 5; // shorten the MS Eula txt to make room
|
||
g.txtEULA2.innerText = ApiObj.LoadFile(window.external.GetOEMEulaText());
|
||
g.OEMEulaSpan.style.display = "inline";
|
||
}
|
||
else
|
||
{
|
||
g.radioAgree2.checked = true;
|
||
}
|
||
|
||
g.MSEulaSpan.style.display = "inline";
|
||
|
||
g_FirstFocusElement = g.txtEULA;
|
||
|
||
var fileEULA = EulaObj.ValidateEULA();
|
||
|
||
var L_strBadEULA_Text = "Setup was unable to display the User License Agreement. Setup will now close.";
|
||
if (0 == fileEULA.length)
|
||
{
|
||
alert(L_strBadEULA_Text);
|
||
window.external.PowerDown(0);
|
||
}
|
||
|
||
g.txtEULA.innerText = ApiObj.LoadFile(fileEULA);
|
||
|
||
if (0 == g.txtEULA.innerText.length)
|
||
{
|
||
alert(L_strBadEULA_Text);
|
||
window.external.PowerDown(0);
|
||
}
|
||
|
||
// disable if both unchecked, in case we ever persist the radio click
|
||
if(!(g.radioAgree.checked || g.radioDisAgree.checked))
|
||
g.btnNext.disabled = true;
|
||
|
||
InitButtons();
|
||
g.btnNext.onclick = EulaNextBtnHandler;
|
||
|
||
g_FirstFocusElement.focus();
|
||
|
||
try
|
||
{
|
||
g.document.body.onkeydown = EulaOnKeyDown;
|
||
}
|
||
catch(e){}
|
||
|
||
}
|
||
|
||
function EulaNextBtnHandler() {
|
||
StoreEula();
|
||
GoNext();
|
||
}
|
||
|
||
function EulaOnKeyDown()
|
||
{
|
||
|
||
if (KeyEsc == g.event.keyCode)
|
||
{
|
||
g.event.returnValue = false;
|
||
g.event.keyCode = 0;
|
||
}
|
||
|
||
OnKeyDown();
|
||
}
|
||
|
||
var g_AcceptMS_EULA = false;
|
||
var g_AcceptOEM_EULA = false;
|
||
function EulaRadioClicked()
|
||
{
|
||
// if they click on either button, enable next
|
||
if(g.btnNext.disabled && ((g.radioAgree.checked || g.radioDisAgree.checked) &&
|
||
(g.radioAgree2.checked || g.radioDisAgree2.checked)))
|
||
{
|
||
g.btnNext.onmouseover = HandleButtonMouseOver;
|
||
g.btnNext.onmouseout = HandleButtonMouseOut;
|
||
g.btnNext.className="buttons";
|
||
g.btnNext.disabled = false;
|
||
g.btnNext.onclick = EulaNextBtnHandler;
|
||
g.btnNext.focus();
|
||
}
|
||
g_AcceptMS_EULA = g.radioAgree.checked;
|
||
g_AcceptOEM_EULA = g.radioAgree2.checked;
|
||
}
|
||
|
||
function StoreEula()
|
||
{
|
||
EulaObj.set_EULAAcceptance = (g.radioAgree.checked && g.radioAgree2.checked);
|
||
}
|
||
// END eula.htm
|
||
|
||
var g_daylight=SysClockObj.get_AutoDaylight();
|
||
var g_CurTimeZoneIdx = SysClockObj.get_TimeZoneIdx();
|
||
|
||
function HandleTZChkBox()
|
||
{
|
||
g_daylight = g.daylight.checked; // this just persists on nav back
|
||
|
||
OnClick();
|
||
}
|
||
|
||
function HandleSelTZChange()
|
||
{
|
||
g_CurTimeZoneIdx = g.selTimeZone.selectedIndex;
|
||
g.daylight.disabled = !SysClockObj.get_DaylightEnabled(g_CurTimeZoneIdx);
|
||
}
|
||
|
||
|
||
function TimeZone_LoadMe()
|
||
{
|
||
InitFrameRef();
|
||
g_FirstFocusElement = g.selTimeZone;
|
||
InitButtons();
|
||
|
||
g.daylight.checked = g_daylight;
|
||
g.daylight.onclick = HandleTZChkBox;
|
||
g.selTimeZone.onchange=HandleSelTZChange;
|
||
g.selTimeZone.selectedIndex = 0; //(HACK to make selected item to be made visible in select menu, there is no official way to do this)
|
||
g.selTimeZone.selectedIndex = g_CurTimeZoneIdx;
|
||
g.daylight.disabled = !SysClockObj.get_DaylightEnabled(g_CurTimeZoneIdx);
|
||
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// keybdcmt.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
var g_RegionSelIdx=LangObj.get_RegionIndex();
|
||
var g_LangSelIdx=LangObj.get_LangIndex();
|
||
var g_KeyboardSelIdx=LangObj.get_KeyboardLayoutIndex();
|
||
|
||
function RegKBCmt_LoadMe()
|
||
{
|
||
InitFrameRef();
|
||
g_FirstFocusElement = g.btnNext;
|
||
InitButtons();
|
||
|
||
g.newkeybdname.innerText=LangObj.get_KeyboardLayoutName(g_KeyboardSelIdx);
|
||
g.newregionname.innerText=LangObj.get_RegionName(g_RegionSelIdx);
|
||
g.newlangname.innerText=LangObj.get_LangName(g_LangSelIdx);
|
||
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
// END keybdcmt.htm
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// keybd.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
var iMaxKeybdNameLen=1;
|
||
var iMaxRegionNameLen=1;
|
||
var iMaxLangNameLen=1;
|
||
|
||
function HandleKeybdPageSelMenuChange() {
|
||
var namestr=g.event.srcElement.id.slice(3);
|
||
eval('g.'+namestr+'Name.value=g.event.srcElement.options(g.event.srcElement.selectedIndex).text;');
|
||
eval('g_'+namestr+'SelIdx='+'g.event.srcElement.selectedIndex;');
|
||
}
|
||
|
||
function SetKeybdFocus() {
|
||
g.selKeyboard.focus();
|
||
}
|
||
|
||
function SetRegionFocus() {
|
||
g.selRegion.focus();
|
||
}
|
||
|
||
function SetLangFocus() {
|
||
g.selLang.focus();
|
||
}
|
||
|
||
// keep separating mechanism in case we need to shorten these strings
|
||
var L_LangStr_Text="Select your preferred language.";
|
||
var LangStrSmall=L_LangStr_Text;
|
||
var L_RegionStr_Text="Select the region closest to where you live.";
|
||
var RegionStrSmall=L_RegionStr_Text;
|
||
var L_KeybdStr_Text="The keyboard that came with your computer is designed for typing in a particular language and may have special function keys. Select the type of keyboard you have. (For a standard English language keyboard, click United States 101)";
|
||
var KeybdStrSmall=L_KeybdStr_Text;
|
||
var L_KeybdTitleSmall_Text="Select Your System Settings";
|
||
|
||
|
||
|
||
function RegKBLoadMe()
|
||
{
|
||
InitFrameRef();
|
||
|
||
g_FirstFocusElement = g.selRegion;
|
||
|
||
InitButtons();
|
||
RetrieveRegKB();
|
||
|
||
g.selKeyboard.onchange = HandleKeybdPageSelMenuChange;
|
||
g.selRegion.onchange = HandleKeybdPageSelMenuChange;
|
||
g.selLang.onchange = HandleKeybdPageSelMenuChange;
|
||
|
||
// fix 110160
|
||
|
||
g.KeyboardName.onfocus = SetKeybdFocus;
|
||
g.RegionName.onfocus = SetRegionFocus;
|
||
g.LangName.onfocus = SetLangFocus;
|
||
|
||
// init name boxes
|
||
g.RegionName.value=g.selRegion.options(g.selRegion.selectedIndex).text;
|
||
g_RegionSelIdx=g.selRegion.selectedIndex;
|
||
g.LangName.value=g.selLang.options(g.selLang.selectedIndex).text;
|
||
g_LangSelIdx=g.selLang.selectedIndex;
|
||
g.KeyboardName.value=g.selKeyboard.options(g.selKeyboard.selectedIndex).text;
|
||
g_KeyboardSelIdx=g.selKeyboard.selectedIndex;
|
||
|
||
// need to shorten text for small screen to make things fit
|
||
if(window.top.screen.width<1024) {
|
||
g.KeybdStr.innerText=KeybdStrSmall;
|
||
g.RegionStr.innerText=RegionStrSmall;
|
||
g.LangStr.innerText=LangStrSmall;
|
||
|
||
for(i=3;i<=5;i++) {
|
||
eval("g.LargeResSpc"+i.toString()+".style.display='none';");
|
||
}
|
||
g.KeyBdTitle.innerText=L_KeybdTitleSmall_Text;
|
||
} else {
|
||
g.KeybdStr.innerText=L_KeybdStr_Text;
|
||
g.RegionStr.innerText=L_RegionStr_Text;
|
||
g.LangStr.innerText=L_LangStr_Text;
|
||
}
|
||
|
||
g.LangStr.style.visibility="visible";
|
||
g.KeybdStr.style.visibility="visible";
|
||
g.RegionStr.style.visibility="visible";
|
||
|
||
g.selRegion.style.visibility="visible";
|
||
g.selKeyboard.style.visibility="visible";
|
||
g.selLang.style.visibility="visible";
|
||
|
||
g.KeyboardName.style.visibility="visible";
|
||
g.RegionName.style.visibility="visible";
|
||
g.LangName.style.visibility="visible";
|
||
|
||
g.KeyboardName.style.cursor="default";
|
||
g.RegionName.style.cursor="default";
|
||
g.LangName.style.cursor="default";
|
||
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
// use this to enable "Enter" key as Next Button.
|
||
// but I really need to select focus'd button with enter.
|
||
// have next button be focused by default?? or is enter better, since
|
||
// they might not click on next
|
||
function RegKB_KeyPress()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if (g.event.keyCode == KeyEnter)
|
||
GoNext();
|
||
|
||
}
|
||
|
||
function RetrieveRegKB()
|
||
{
|
||
if(LangObj.get_RegionIndex() > 20000) {
|
||
alert("error loading default region index: possible problem in locale.inf");
|
||
}
|
||
|
||
if(LangObj.get_KeyboardLayoutIndex() > 20000) {
|
||
alert("error loading default keybd index: possible problem in locale.inf");
|
||
}
|
||
|
||
if(LangObj.get_LangIndex() > 20000 ) {
|
||
alert("error loading default lang index: possible problem in locale.inf/content.inf");
|
||
}
|
||
|
||
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);
|
||
|
||
if(oOption.text.length > iMaxRegionNameLen) {
|
||
iMaxRegionNameLen=oOption.text.length;
|
||
}
|
||
}
|
||
|
||
ilen = LangObj.get_NumOfLangs();
|
||
for (var i = 0; i < ilen; i++)
|
||
{
|
||
var oOption = g.document.createElement("OPTION");
|
||
oOption.text = LangObj.get_LangName(i);
|
||
g.selLang.add(oOption);
|
||
|
||
if(oOption.text.length > iMaxLangNameLen) {
|
||
iMaxLangNameLen=oOption.text.length;
|
||
}
|
||
}
|
||
|
||
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);
|
||
|
||
if(oOption.text.length > iMaxKeybdNameLen)
|
||
iMaxKeybdNameLen=oOption.text.length;
|
||
}
|
||
|
||
// BUGBUG
|
||
g.selRegion.selectedIndex = 0; //(HACK to make selected item to be made visible in select menu, there is no official way to do this)
|
||
g.selRegion.selectedIndex= g_RegionSelIdx; // BUGBUG: these hacks dont work anymore
|
||
|
||
g.selKeyboard.selectedIndex = 0; //(HACK to make selected item to be made visible in select menu, there is no official way to do this)
|
||
g.selKeyboard.selectedIndex= g_KeyboardSelIdx;
|
||
|
||
g.selLang.selectedIndex = 0; //(HACK to make selected item to be made visible in select menu, there is no official way to do this)
|
||
g.selLang.selectedIndex= g_LangSelIdx;
|
||
}
|
||
// END keybd.htm
|
||
|
||
// fini.htm
|
||
var L_RegisterdWithMS_Text = "You registered your copy of Windows Codename Whistler with Microsoft.";
|
||
var L_NotRegisterdWithMS_Text = "You did not register your copy of Windows Codename Whistler with Microsoft.";
|
||
var L_RegisterdWith_Text = "You registered your computer with ";
|
||
var L_NotRegisterdWith_Text = "You did not register your computer with ";
|
||
var L_SignupWith_Text = "Your computer is configured for Internet access.";
|
||
var L_NotSignupWith_Text = "Your computer is not configured for Internet access.";
|
||
var L_NotSignupButChoseIcs_Text = "Selected the shared Internet Connection to access the Internet";
|
||
var L_DefaultOEM_Text = "the OEM";
|
||
|
||
function FinishPage_LoadMe() {
|
||
InitFrameRef();
|
||
|
||
var WaterMarkFileHandle=FileSystemObj.GetFile(g_WaterMarkFileNameStr);
|
||
if(WaterMarkFileHandle.size != g_WaterMarkFileSize) {
|
||
g.ThanksImg.style.display="none";
|
||
}
|
||
|
||
if (LANGUAGE_REBOOT_END == LangObj.get_RebootState()) {
|
||
g.finishmsg.style.display="none";
|
||
g.rebootfinishmsg.style.display="inline";
|
||
}
|
||
|
||
if (STATUS_NONE != g_status && STATUS_OFF != g_status)
|
||
{
|
||
g.FiniSummaryIntro2.style.display = "inline";
|
||
g.FiniSummaryWrapper.style.display = "inline";
|
||
|
||
if (1 != window.external.get_RegStatus()) // OEM didn't Pre-reg the machine
|
||
{
|
||
if (1 == RegisterObj.get_PostToOEM)
|
||
{
|
||
var strOEMName = g_OEMNameStr;
|
||
|
||
if (strOEMName == null || (strOEMName != null && strOEMName.length == 0))
|
||
strOEMName = L_DefaultOEM_Text;
|
||
if (StatusObj.get_Status(OEM_REGISTRATION))
|
||
g.FiniSummary1.innerText = L_RegisterdWith_Text + strOEMName + L_Period_Text;
|
||
else
|
||
g.FiniSummary1.innerText = L_NotRegisterdWith_Text + strOEMName + L_Period_Text;
|
||
g.FiniSummaryBreak.style.display = "inline";
|
||
}
|
||
|
||
if (StatusObj.get_Status(MS_REGISTRATION))
|
||
g.FiniSummary2.innerText = L_RegisterdWithMS_Text;
|
||
else
|
||
g.FiniSummary2.innerText = L_NotRegisterdWithMS_Text;
|
||
}
|
||
|
||
var bHasSignup = 0;
|
||
try
|
||
{
|
||
bHasSignup = ApiObj.get_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + "\\TEMP", "ISPSignup");
|
||
}
|
||
catch (e) { bHasSignup = 0;}
|
||
|
||
if (bHasSignup)
|
||
g.FiniSummary3.innerText = L_SignupWith_Text;
|
||
else if (StatusObj.get_Status(ICS_FOR_INTERNET))
|
||
{
|
||
g.FiniSummary3.innerText = L_NotSignupButChoseIcs_Text;
|
||
}
|
||
else
|
||
{
|
||
g.FiniSummary3.innerText = L_NotSignupWith_Text;
|
||
}
|
||
}
|
||
|
||
g.msgspan.style.display="inline";
|
||
|
||
if (g.btnNext != null)
|
||
g_FirstFocusElement = g.btnNext;
|
||
else if (g.btnBack != null)
|
||
g_FirstFocusElement = g.btnBack;
|
||
|
||
InitButtons();
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// badpid.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
function badpid_LoadMe()
|
||
{
|
||
InitFrameRef();
|
||
g_FirstFocusElement=g.btnBack;
|
||
|
||
if (null == PidObj)
|
||
{
|
||
PidObj = new Object;
|
||
PidObj = window.external.ProductID;
|
||
}
|
||
var strPid = PidObj.get_PID();
|
||
for (var i = 0; i < 5; i++)
|
||
{
|
||
g.lblPID[i].innerText = strPid.substr(i * 6, 5);
|
||
}
|
||
if (strPid.length == 0)
|
||
g.PidEntered.style.visibility = "hidden";
|
||
else
|
||
g.PidEntered.style.visibility = "visible";
|
||
|
||
InitButtons();
|
||
|
||
g_FirstFocusElement.focus();
|
||
|
||
g_CameFromBadPkeyPage=true;
|
||
}
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// prodkey.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
|
||
var g_CameFromBadPkeyPage=false;
|
||
|
||
var g_LastFocusedPidBox;
|
||
var g_SelectionExistsBeforeKeyPress=null;
|
||
|
||
function PIDBox_HandleBlur() {
|
||
g_LastFocusedPidBox=g.event.srcElement;
|
||
}
|
||
|
||
function PIDBox_HandleFocus() {
|
||
g_LastFocusedPidBox=g.event.srcElement;
|
||
OnFocus();
|
||
}
|
||
|
||
function PID_LoadMe()
|
||
{
|
||
InitFrameRef();
|
||
g_FirstFocusElement = g.edtProductKey[0];
|
||
RetrievePid();
|
||
|
||
g_FirstFocusElement.focus();
|
||
var rangefocus = g_FirstFocusElement.createTextRange();
|
||
rangefocus.collapse();
|
||
rangefocus.moveStart("word", 0);
|
||
rangefocus.select();
|
||
|
||
g_TabForward = false;
|
||
g_TabBackward = false;
|
||
|
||
PID_CheckLength(false);
|
||
|
||
if(DebugObj.get_MsDebugMode) {
|
||
g.btnSkip.style.visibility="visible";
|
||
}
|
||
|
||
for (i = 0; i <= 4; i++)
|
||
{
|
||
g.edtProductKey[i].onblur=PIDBox_HandleBlur;
|
||
g.edtProductKey[i].onfocus=PIDBox_HandleFocus;
|
||
}
|
||
|
||
g_LastFocusedPidBox=g.edtProductKey[0];
|
||
|
||
InitButtons();
|
||
|
||
if(g_CameFromBadPkeyPage) {
|
||
g.edtProductKey[0].select();
|
||
g_CameFromBadPkeyPage=false;
|
||
}
|
||
}
|
||
|
||
var g_CharCode0_plus1=("0".charCodeAt(0))+1;
|
||
|
||
function KeyboardHelperClick()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
g.event.returnValue = false; // if false, cancels default action on button
|
||
g.event.cancelBubble = true;
|
||
|
||
if (g.event.srcElement.tagName == "BUTTON") {
|
||
|
||
g_LastFocusedPidBox.focus();
|
||
|
||
if(g.document.selection.type=="Text") {
|
||
g.document.execCommand("Delete");
|
||
|
||
if(g.event.srcElement.name=="{BACKSPACE}")
|
||
return;
|
||
}
|
||
|
||
if(g.event.srcElement.name=="{BACKSPACE}") {
|
||
var tr=g_LastFocusedPidBox.createTextRange();
|
||
tr.collapse(false);
|
||
tr.moveStart("character",-1);
|
||
tr.execCommand("Delete");
|
||
return;
|
||
}
|
||
|
||
var i=g_LastFocusedPidBox.id.charCodeAt(3)-g_CharCode0_plus1;
|
||
|
||
if((i<4) && (g_LastFocusedPidBox.value.length == 5) && CursorAtEndOfField(i) && (!g_SelectionExistsBeforeKeyPress)) {
|
||
TabForward(i,false);
|
||
// should change to g_LastFocusedPidBox, but isn't working due to some IE5.5 regression (focus handler event srcElement is not new event pidbox but current event one)
|
||
}
|
||
|
||
if (g_LastFocusedPidBox.value.length != 5) {
|
||
|
||
g_LastFocusedPidBox.value+=g.event.srcElement.name;
|
||
|
||
// AGENT: notify Agent of the event, NOTE: code in AgtScrpt.js.
|
||
|
||
Agent_OnProductKeyKeyboardHelper(g_LastFocusedPidBox, g.event.srcElement.name);
|
||
|
||
if (g_TabBackward) {
|
||
TabBackward(i,false);
|
||
} else if(g_TabForward) {
|
||
TabForward(i,false);
|
||
}
|
||
|
||
g_TabForward = false;
|
||
g_TabBackward = false;
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
function PID_CheckLength(KnownIncomplete)
|
||
{
|
||
// call this only if box reaches length 5 for speed?
|
||
|
||
if(KnownIncomplete) {
|
||
g.btnNext.onclick = null;
|
||
g.btnNext.disabled = true;
|
||
g.btnNext.className="buttons-disabled";
|
||
return;
|
||
}
|
||
|
||
var TotLength=g.edtProductKey[0].value.length+g.edtProductKey[1].value.length+
|
||
g.edtProductKey[2].value.length+g.edtProductKey[3].value.length+
|
||
g.edtProductKey[4].value.length;
|
||
|
||
if (TotLength == 25)
|
||
{
|
||
g.btnNext.disabled = false;
|
||
g.btnNext.className="buttons";
|
||
g.btnNext.onclick = GoNext;
|
||
}
|
||
else
|
||
{
|
||
g.btnNext.onclick = null;
|
||
g.btnNext.disabled = true;
|
||
g.btnNext.className="buttons-disabled";
|
||
}
|
||
}
|
||
|
||
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
|
||
else
|
||
{
|
||
var re = new RegExp("(.*)-(.*)-(.*)-(.*)-(.*)","");
|
||
if(re.exec(strPid) == null) {
|
||
throw "Internal error: RegExp pattmatch failed!";
|
||
}
|
||
|
||
g.edtProductKey[0].value = RegExp.$1;
|
||
g.edtProductKey[1].value = RegExp.$2;
|
||
g.edtProductKey[2].value = RegExp.$3;
|
||
g.edtProductKey[3].value = RegExp.$4;
|
||
g.edtProductKey[4].value = RegExp.$5;
|
||
}
|
||
}
|
||
|
||
function StorePid()
|
||
{
|
||
var strPid = "";
|
||
|
||
for (var i = 0; i < 4; i++)
|
||
{
|
||
strPid += g.edtProductKey[i].value;
|
||
strPid += '-';
|
||
}
|
||
|
||
strPid += g.edtProductKey[i].value;
|
||
|
||
|
||
PidObj.set_PID(strPid);
|
||
}
|
||
|
||
var g_TabForward = false;
|
||
function TabForward(currentEdit,DoSelectAll)
|
||
{
|
||
g_TabForward = false;
|
||
|
||
if(currentEdit==4) {
|
||
// deselect any existing selection before moving focus to back button
|
||
if(g.document.selection.type!="None") {
|
||
g.document.selection.empty();
|
||
}
|
||
g.btnBack.focus();
|
||
return;
|
||
}
|
||
|
||
currentEdit++;
|
||
|
||
g.edtProductKey[currentEdit].focus();
|
||
|
||
if(DoSelectAll) {
|
||
g.edtProductKey[currentEdit].select();
|
||
return;
|
||
}
|
||
|
||
var tr = g.edtProductKey[currentEdit].createTextRange();
|
||
tr.collapse(true);
|
||
tr.moveStart("word", 0);
|
||
tr.select();
|
||
|
||
}
|
||
|
||
var g_TabBackward = false;
|
||
function TabBackward(currentEdit,DoSelectAll)
|
||
{
|
||
g_TabBackward = false;
|
||
|
||
if (currentEdit == 0) {
|
||
// deselect any existing selection before moving focus to button
|
||
if(g.document.selection.type!="None") {
|
||
g.document.selection.empty();
|
||
}
|
||
if(g.btnNext.disabled) {
|
||
g.btnBack.focus();
|
||
} else {
|
||
g.btnNext.focus();
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
currentEdit--;
|
||
|
||
g.edtProductKey[currentEdit].focus();
|
||
|
||
if(DoSelectAll) {
|
||
g.edtProductKey[currentEdit].select();
|
||
return;
|
||
}
|
||
|
||
var tr = g.edtProductKey[currentEdit].createTextRange();
|
||
tr.collapse(false);
|
||
tr.moveStart("word", 1);
|
||
tr.select();
|
||
}
|
||
|
||
function CursorAtStartOfField(currentEdit) {
|
||
var tr = g.edtProductKey[currentEdit].createTextRange();
|
||
var tr2 = g.document.selection.createRange();
|
||
|
||
tr2.moveEnd("textedit",1);
|
||
|
||
if(tr.isEqual(tr2)){
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function CursorAtEndOfField(currentEdit) {
|
||
// assumes selection is current edit field
|
||
|
||
var tr = g.edtProductKey[currentEdit].createTextRange();
|
||
var tr2 = g.document.selection.createRange();
|
||
|
||
tr2.moveStart("textedit",-1);
|
||
|
||
if(tr.isEqual(tr2)){
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
function IsProductIDKey(keyCode)
|
||
{
|
||
var str = String.fromCharCode(keyCode);
|
||
|
||
var result = str.match(/B|C|D|F|G|H|J|K|M|P|Q|R|T|V|W|X|Y|2|3|4|6|7|8|9/);
|
||
|
||
return (null != result);
|
||
}
|
||
|
||
var g_keyPressKeyCode = 0;
|
||
|
||
function ProductIDPropertyChange()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
// enable Next Btn when PID is full, and automatically move to
|
||
// next/previous field when entering/deleting chars
|
||
|
||
if ("value" == g.event.propertyName) {
|
||
|
||
// find the index at which we are.
|
||
var i=g.event.srcElement.id.charCodeAt(3)-g_CharCode0_plus1;
|
||
|
||
// our g_Tab variables can be booleans instead of counts because they can
|
||
// have a max value of 1, becase there will only ever be 1 call to OnPropertyChange if the
|
||
// length of the edit is 0 or 5
|
||
switch(g.edtProductKey[i].value.length) {
|
||
case 5:
|
||
g_TabForward = (i<4); // dont tab forward if on last PID box
|
||
PID_CheckLength(false);
|
||
break;
|
||
|
||
case 4:
|
||
case 0:
|
||
case 1:
|
||
PID_CheckLength(true); //change from 25char-state could have occurred with any of these lengths
|
||
}
|
||
|
||
// see if we want to tab backward
|
||
// if pixbox is empty, and last keypress was not a pidkey (which adds a char),
|
||
// and nothing was selected.
|
||
|
||
// BUGBUG: this currently only fully works for the delete key. when backspace
|
||
// is pressed, g.document.selection.type is always "None" even if there was a selection
|
||
if ((g.edtProductKey[i].value.length == 0) && (i > 0) &&
|
||
(g_keyPressKeyCode==KeyBackSpc)&&(g_keyPressKeyCode==KeyDelete)&&
|
||
(g.document.selection.type=="None")) {
|
||
|
||
g_TabBackward = true; // IsProd check is to handle the case where they select everything then press a 2, etc.
|
||
}
|
||
}
|
||
|
||
g_keyPressKeyCode = 0;
|
||
}
|
||
|
||
//As of IE 4.0, the onkeypress event fires and can be canceled for the following keys:
|
||
//
|
||
//Letters: a - z
|
||
//Numerals: 0 - 9
|
||
//Symbols: ! @ # $ % ^ & * ( ) _ - + = < > [ ] { } , . / ? \ | ' ` " ~
|
||
//System: ESCAPE, SPACE, SHIFT
|
||
|
||
function ProductIDKeyPress()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
// BUGBUG: hack workaround: KeyBackSpc event should arrive at KeyDown handler, but it comes here instead
|
||
// I dont know why
|
||
|
||
|
||
if (g.event.keyCode == KeyBackSpc) {
|
||
ProductIDKeyDown();
|
||
return;
|
||
}
|
||
|
||
KeyCodeToUpper();
|
||
|
||
g_keyPressKeyCode = g.event.keyCode;
|
||
|
||
if (!IsProductIDKey(g_keyPressKeyCode)) {
|
||
g.event.keyCode = 0;
|
||
return;
|
||
} else {
|
||
|
||
var i=g.event.srcElement.id.charCodeAt(3)-g_CharCode0_plus1;
|
||
|
||
if((i<4) && (g.edtProductKey[i].value.length == 5) && CursorAtEndOfField(i) && (!g_SelectionExistsBeforeKeyPress)) {
|
||
TabForward(i,false);
|
||
}
|
||
}
|
||
}
|
||
|
||
//In IE 5.0, the onkeydown event fires for the following keys:
|
||
//
|
||
//Editing: DELETE, INSERT,BACKSPACE
|
||
//Function: F1 - F12
|
||
//Letters: a - z
|
||
//Navigation: HOME, END, Left Arrow, Right Arrow, Up Arrow, Down Arrow, PAGE UP, PAGE DOWN
|
||
//Numerals: 0 - 9
|
||
//Symbols: ! @ # $ % ^ & * ( ) _ - + = < > [ ] { } , . / ? \ | ' ` " ~
|
||
//System: ESCAPE, SPACE, SHIFT, TAB, SHIFT+TAB
|
||
//
|
||
// the following keys and key combinations can be canceled by specifying event.returnValue=false:
|
||
//
|
||
//Editing: BACKSPACE, DELETE
|
||
//Letters: a - z
|
||
//Navigation: PAGE UP, PAGE DOWN, END, HOME, Left Arrow, Right Arrow, Up Arrow, Down Arrow
|
||
//Numerals: 0 - 9
|
||
//Symbols: ! @ # $ % ^ & * ( ) _ - + = < > [ ] { } , . / ? \ | ' ` " ~
|
||
//System: SPACE, ESCAPE, TAB, SHIFT+TAB
|
||
|
||
function ProductIDKeyDown()
|
||
{
|
||
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var keyCode = g.event.keyCode;
|
||
|
||
g_SelectionExistsBeforeKeyPress=(g.document.selection.type!="None");
|
||
|
||
if(g.event.srcElement.tagName=="INPUT") {
|
||
var i=g.event.srcElement.id.charCodeAt(3)-g_CharCode0_plus1;
|
||
} else {
|
||
var i=-1;
|
||
}
|
||
|
||
switch(keyCode) {
|
||
|
||
case KeyTab:
|
||
if(g.event.srcElement == g.edtProductKey[i]) {
|
||
if(g.event.shiftKey)
|
||
TabBackward(i,true);
|
||
else TabForward(i,true);
|
||
|
||
g.event.returnValue = false;
|
||
g.event.keyCode = 0;
|
||
g.event.cancelBubble = true;
|
||
break;
|
||
}
|
||
break;
|
||
|
||
case KeyLeftArrow:
|
||
if((i>0) && CursorAtStartOfField(i)) {
|
||
TabBackward(i,false);
|
||
g.event.returnValue = false;
|
||
}
|
||
break;
|
||
|
||
case KeyRightArrow:
|
||
if((i<4) && CursorAtEndOfField(i)) {
|
||
TabForward(i,false);
|
||
g.event.returnValue = false;
|
||
}
|
||
break;
|
||
|
||
case KeyBackSpc:
|
||
case KeyDelete:
|
||
|
||
// if there is already 5 characters in a field, and the user puts the cursor in it, we want to
|
||
// fill in the next box with the character. we have to do this here because there is no propertychange,
|
||
// and keyup is too late
|
||
//if(g.edtProductKey[i].value.length == 5 && IsProductIDKey(keyCode) && g.document.selection==null)
|
||
// TabForward(i);
|
||
// cgeorges note: I enabled this feature tried it and didnt like it
|
||
|
||
////////
|
||
// we want the delete/backspace to move the previous edit box if:
|
||
|
||
// there is 0 characters, and the user puts the cursor in it, and selection is non-null
|
||
// OR backspc && cursor is at start of field
|
||
|
||
if ((i > 0) &&
|
||
( ((g.document.selection.type=="None") && (g.edtProductKey[i].value.length == 0))
|
||
||((keyCode==KeyBackSpc)&& CursorAtStartOfField(i)))) {
|
||
|
||
TabBackward(i,false);
|
||
g.event.returnValue = false; // so no deletion occurs when backspace moves to prev pidbox
|
||
g.event.keyCode = 0;
|
||
}
|
||
|
||
break;
|
||
|
||
case KeyEnter:
|
||
if((g.btnNext.disabled == false)&&(g.event.srcElement!=g.btnBack)) {
|
||
g.btnNext.click();
|
||
g.event.returnValue = false;
|
||
g.event.keyCode = 0;
|
||
g.event.cancelBubble = true;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
function ProductIDKeyUp()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if((!g_TabForward) && (!g_TabBackward)) {
|
||
return;
|
||
}
|
||
|
||
var i=g.event.srcElement.id.charCodeAt(3)-g_CharCode0_plus1;
|
||
|
||
if (g_TabBackward) {
|
||
TabBackward(i,false);
|
||
return;
|
||
} else
|
||
if(g_TabForward) {
|
||
TabForward(i,false);
|
||
}
|
||
}
|
||
|
||
// called on every mouse click into PID page body, to make sure focus never leaves PID fields
|
||
function PID_SetCorrectFocus()
|
||
{
|
||
try
|
||
{
|
||
if (g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
if((g.event.srcElement.tagName == "INPUT")||(g.event.srcElement.tagName == "BUTTON")) {
|
||
return;
|
||
}
|
||
|
||
// only get here if we clicked on something unexpected
|
||
|
||
for (var i = 0; i < 5; i++)
|
||
{
|
||
if (g.event.srcElement == g.edtProductKey[i])
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
|
||
// if full key is entered then pass events directly to buttons without doing the stuff below
|
||
if((g.btnNext.disabled == false) && (g.btnNext.contains(g.event.srcElement) ||
|
||
g.btnBack.contains(g.event.srcElement) ||
|
||
g.btnSkip.contains(g.event.srcElement)))
|
||
return;
|
||
|
||
for (var i = 4; i >= 0; i--)
|
||
{
|
||
if (g.edtProductKey[i].value.length < 5 && g.edtProductKey[i].value.length > 0)
|
||
{
|
||
g.edtProductKey[i].focus();
|
||
var range = g.edtProductKey[i].createTextRange();
|
||
range.collapse();
|
||
range.moveStart("word", 1);
|
||
range.select();
|
||
return;
|
||
}
|
||
}
|
||
|
||
if (i < 0)
|
||
{
|
||
g.edtProductKey[0].focus();
|
||
var range = g.edtProductKey[0].createTextRange();
|
||
range.collapse();
|
||
range.moveStart("word", 0);
|
||
range.select();
|
||
return;
|
||
}
|
||
}
|
||
// END pid.htm
|
||
|
||
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// 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 == 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;
|
||
}
|
||
|
||
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()
|
||
{
|
||
|
||
// STATUS_ISP(0) STATUS_OEM STATUS_NONE STATUS_OFF
|
||
// ------------ ------------- ------------- --------------
|
||
dnCKPT[CKPT_HWCHK] = new CheckPoint("", SNDX_WELCOME, SNDX_WELCOME, SNDX_WELCOME, SNDX_WELCOME);
|
||
dnCKPT[CKPT_WELCOME] = new CheckPoint("setup\\welcome.htm", SNDX_WELCOME, SNDX_WELCOME, SNDX_WELCOME, SNDX_WELCOME);
|
||
dnCKPT[CKPT__MODULE_] = new
|
||
CheckPoint("html\\_MODULE_\\_MODULE_.htm", SNDX_WELCOME,
|
||
SNDX_WELCOME, SNDX_WELCOME, SNDX_WELCOME);
|
||
dnCKPT[CKPT_MOUSETUT1] = new CheckPoint("html\\mouse\\mouse.htm", SNDX_HW, SNDX_HW, SNDX_HW, SNDX_HW);
|
||
dnCKPT[CKPT_IMETUTORIAL] = new CheckPoint("html\\IME\\IMETut1.htm", SNDX_HW, SNDX_HW, SNDX_HW, SNDX_HW);
|
||
dnCKPT[CKPT_OEMHW] = new CheckPoint("html\\oemhw\\oemhw.htm", SNDX_HW, SNDX_HW, SNDX_HW, SNDX_HW);
|
||
dnCKPT[CKPT_REGION_KEYBD] = new CheckPoint("setup\\keybd.htm", SNDX_HW, SNDX_HW, SNDX_HW, SNDX_HW);
|
||
dnCKPT[CKPT_REGKB_COMMIT] = new CheckPoint("setup\\keybdcmt.htm", SNDX_HW, SNDX_HW, SNDX_HW, SNDX_HW);
|
||
dnCKPT[CKPT_TIMEZONE] = new CheckPoint("setup\\timezone.htm", SNDX_HW, SNDX_HW, SNDX_HW, SNDX_HW);
|
||
dnCKPT[CKPT_EULA] = new CheckPoint("setup\\neweula.htm", SNDX_LEGAL, SNDX_LEGAL, SNDX_LEGAL, SNDX_LEGAL);
|
||
dnCKPT[CKPT_EULA_DECLINE] = new CheckPoint("setup\\badeula.htm", SNDX_LEGAL, SNDX_LEGAL, SNDX_LEGAL, SNDX_LEGAL);
|
||
dnCKPT[CKPT_PRODUCTKEY] = new CheckPoint("setup\\prodkey.htm", SNDX_LEGAL, SNDX_LEGAL, SNDX_LEGAL, SNDX_LEGAL);
|
||
dnCKPT[CKPT_BADPRODUCTKEY] = new CheckPoint("setup\\badpkey.htm", SNDX_LEGAL, SNDX_LEGAL, SNDX_LEGAL, SNDX_LEGAL);
|
||
dnCKPT[CKPT_ICSCHOICE] = new CheckPoint("setup\\ics.htm", SNDX_REG, SNDX_REG, SNDX_REG, SNDX_REG);
|
||
dnCKPT[CKPT_REGISTER1] = new CheckPoint("setup\\reg1.htm", SNDX_REG, SNDX_REG, SNDX_REG, SNDX_REG);
|
||
dnCKPT[CKPT_REGISTER3] = new CheckPoint("setup\\reg3.htm", SNDX_REG, SNDX_REG, SNDX_REG, SNDX_REG);
|
||
dnCKPT[CKPT_REGDIAL] = new CheckPoint("setup\\drdyoem.htm", SNDX_REG, SNDX_REG, SNDX_REG, SNDX_REG);
|
||
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_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 = CompareModeText;
|
||
|
||
InitSimpleNavMap_MouseTut();
|
||
_MODULE__InitSimpleNavMap();
|
||
g_Last_MODULE_Page = _MODULE_GetLastPage();
|
||
|
||
}
|
||
|
||
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 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
|
||
function GoCancel(ckpt)
|
||
{
|
||
try
|
||
{
|
||
if (IsLocalFile() && g.event == null && (g_CurrentCKPT != g_DialCKPT))
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
DisableAllButtons();
|
||
|
||
|
||
switch (g_CurrentCKPT)
|
||
{
|
||
case CKPT_HWCHK:
|
||
GoNavigate(CKPT_WELCOME);
|
||
break;
|
||
|
||
case CKPT_REGION_KEYBD:
|
||
// need to avoid handling any existing input info, which GoNext does
|
||
GoNavigate(CKPT_TIMEZONE);
|
||
break;
|
||
|
||
case CKPT_MOUSETUT1:
|
||
SimpleNavNext(g_LastMouseTutPage); // go to ckpt after last mouse tut page
|
||
break;
|
||
|
||
|
||
case CKPT_PRODUCTKEY:
|
||
// skip button only exists in debug mode. lets you skip PID page
|
||
PopCKPT(CKPT_PRODUCTKEY); // make sure we go back to reg1.htm
|
||
if ( StatusObj.get_Status(MS_REGISTRATION) ||
|
||
StatusObj.get_Status(OEM_REGISTRATION) ||
|
||
window.external.get_RegStatus )
|
||
GoNavigate(CKPT_ISPSIGNUP);
|
||
else
|
||
GoNavigate(CKPT_REGISTER1);
|
||
break;
|
||
|
||
// We do not allow User to skip for CKPT_ICSCHOICE.
|
||
|
||
case CKPT_REGISTER3:
|
||
Reg3SaveSettings(); // save field settings in case we return to page
|
||
GoNavigate(CKPT_ISPSIGNUP);
|
||
break;
|
||
|
||
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_REGDIAL:
|
||
GoNavigate(CKPT_ISPSIGNUP);
|
||
break;
|
||
|
||
case CKPT_REFDIAL:
|
||
case CKPT_MIGDIAL:
|
||
case CKPT_ISPDIAL:
|
||
// When skip on the referral dialing, go to finish
|
||
GoNavigate(CKPT_OEMCUST);
|
||
break;
|
||
|
||
case CKPT__MODULE_:
|
||
SimpleNavNext(g_Last_MODULE_Page);
|
||
break;
|
||
|
||
default:
|
||
GoNext();
|
||
break;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
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();
|
||
else if(g_CurrentCKPT == CKPT_REGISTER3)
|
||
Reg3SaveSettings(); // save field settings in case we return to page
|
||
else if(g_CurrentCKPT == CKPT_PRODUCTKEY)
|
||
StorePid();
|
||
|
||
{
|
||
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 == CKPT_ICSCHOICE) && !(window.external.IsIcsAvailable()))
|
||
{
|
||
g_CurrentCKPT = ckptPrevious; // we remove the ICS page from the navigation stream if ICS is no longer available.
|
||
StatusObj.set_Status(ICS_FOR_OOBE, false);
|
||
GoBack();
|
||
}
|
||
|
||
else 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;
|
||
}
|
||
}
|
||
|
||
////////////////////////////////////////////////////////////////////
|
||
// Required API for USB mouse and/or keyboard checks
|
||
////////////////////////////////////////////////////////////////////
|
||
function OnDeviceArrival(nDeviceType)
|
||
{
|
||
if ((CKPT_HWCHK == g_CurrentCKPT) && !g_bAnimationRunning)
|
||
{
|
||
var bKeyboardPresent = window.external.CheckKeyboard();
|
||
var bMousePresent = window.external.CheckMouse();
|
||
|
||
if ((0 == bKeyboardPresent) && (0 == bMousePresent))
|
||
{
|
||
g.navigate("setup\\nousbkm.htm");
|
||
}
|
||
else if (0 == bKeyboardPresent)
|
||
{
|
||
g.navigate("setup\\nousbkbd.htm");
|
||
}
|
||
else if (0 == bMousePresent)
|
||
{
|
||
g.navigate("setup\\nousbms.htm");
|
||
}
|
||
else
|
||
{
|
||
// Unregister all device notification so that
|
||
// script will not be notifed of any device arrival
|
||
GoNavigate(CKPT_WELCOME);
|
||
}
|
||
}
|
||
}
|
||
|
||
////////////////////////////////////////////////////////////////////
|
||
// DON'T MUCK WITH THE POSITIONING OF THE CASES IN THE SWITCHS 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_HWCHK:
|
||
trace("GoNavigate: CKPT_HWCHK");
|
||
PushCKPT(CKPT_HWCHK);
|
||
|
||
var bKeyboardPresent = window.external.CheckKeyboard();
|
||
var bMousePresent = window.external.CheckMouse();
|
||
|
||
if ((0 == bKeyboardPresent) || (0 == bMousePresent)) {
|
||
|
||
ScreenFrame.style.visibility = "visible";
|
||
ScreenFrame.style.display = "none";
|
||
|
||
if ((0 == bKeyboardPresent) && (0 == bMousePresent))
|
||
{
|
||
g.navigate("setup\\nousbkm.htm");
|
||
}
|
||
else if (0 == bKeyboardPresent)
|
||
{
|
||
g.navigate("setup\\nousbkbd.htm");
|
||
}
|
||
else { // (0 == bMousePresent)
|
||
g.navigate("setup\\nousbms.htm");
|
||
}
|
||
|
||
window.external.ShowOOBEWindow();
|
||
|
||
if((g_RunAnimInitVal>0) && (g_bNeedtoRunAnimation || (g_RunAnimInitVal==99))) {
|
||
|
||
g_bAnimationRunning = true;
|
||
MovieFrame.style.display="inline"; // start movie
|
||
g_bNeedtoRunAnimation=false;
|
||
g_RunAnimInitVal=1; // reset from 99, which will trigger second running
|
||
}
|
||
|
||
ScreenFrame.style.display = "inline";
|
||
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_WELCOME:
|
||
trace("GoNavigate: CKPT_WELCOME");
|
||
if (!window.external.GetNoWelcomeFinish())
|
||
{
|
||
PushCKPT(CKPT_WELCOME); //BUGBUG do we want to do this?
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_WELCOME));
|
||
break;
|
||
} else {
|
||
window.external.ShowOOBEWindow(); // should be needed for NoWelcome case if USB pages are not displayed
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_MOUSETUT1:
|
||
trace("GoNavigate: CKPT_MOUSETUT1");
|
||
var MT_INIstr=DirObj.get_DoMouseTutorial();
|
||
if ((MT_INIstr.length>0) && (MT_INIstr!="0"))
|
||
{
|
||
PushCKPT(CKPT_MOUSETUT1);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_MOUSETUT1));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_IMETUTORIAL:
|
||
trace("GoNavigate: CKPT_IMETUTORIAL");
|
||
if ((1 == DirObj.get_DoIMETutorial()) && g_IMEExists)
|
||
{
|
||
PushCKPT(CKPT_IMETUTORIAL);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_IMETUTORIAL));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_OEMHW:
|
||
trace("GoNavigate: CKPT_OEMHW");
|
||
if (1 == DirObj.get_DoOEMHardwareCheck())
|
||
{
|
||
PushCKPT(CKPT_OEMHW);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_OEMHW));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_REGION_KEYBD:
|
||
trace("GoNavigate: CKPT_REGION_KEYBD");
|
||
if (1 == DirObj.get_DoRegionalKeyboard())
|
||
{
|
||
PushCKPT(CKPT_REGION_KEYBD);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_REGION_KEYBD));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_TIMEZONE:
|
||
trace("GoNavigate: CKPT_TIMEZONE");
|
||
var TimeZonewasSet=SysClockObj.get_TimeZonewasPreset();
|
||
|
||
// only show timezone page if preset TimeZoneValue does not exist and TimeZone=1,
|
||
// or if TimeZoneValue is invalid
|
||
|
||
if ((!TimeZonewasSet &&
|
||
((1 == DirObj.get_DoTimeZone()) || (DirObj.get_TimeZoneValue() != ""))))
|
||
{
|
||
PushCKPT(CKPT_TIMEZONE);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_TIMEZONE));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_EULA:
|
||
trace("GoNavigate: CKPT_EULA");
|
||
if (null == EulaObj)
|
||
{
|
||
EulaObj = new Object;
|
||
EulaObj = window.external.Eula;
|
||
}
|
||
|
||
// skip EULA if user has already accepted in OOBE mode
|
||
if (!EulaObj.get_EULAAcceptance)
|
||
{
|
||
PushCKPT(CKPT_EULA);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_EULA));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_PRODUCTKEY:
|
||
trace("GoNavigate: CKPT_PRODUCTKEY");
|
||
if (null == PidObj)
|
||
{
|
||
PidObj = new Object;
|
||
PidObj = window.external.ProductID;
|
||
}
|
||
|
||
// skips over PID if it's already validated?
|
||
if (0 == PidObj.get_PID.length || !PidObj.ValidatePID)
|
||
{
|
||
PushCKPT(CKPT_PRODUCTKEY); //this sets g_CurrentCKPT=CPKT_PRODUCTKEY
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_PRODUCTKEY));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
case CKPT_ICSCHOICE:
|
||
{
|
||
trace("GoNavigate: CKPT_ICSCHOICE");
|
||
|
||
if ( g_status != STATUS_OFF ) {
|
||
if ( window.external.IsIcsAvailable() )
|
||
{
|
||
PushCKPT(CKPT_ICSCHOICE);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_ICSCHOICE));
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
if ( StatusObj.get_Status(MS_REGISTRATION) ||
|
||
StatusObj.get_Status(OEM_REGISTRATION) ||
|
||
window.external.get_RegStatus() )
|
||
{
|
||
GoNavigate(CKPT_ISPSIGNUP);
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
GoNavigate(CKPT_REGISTER1);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
// fall through here for OFFLINE status
|
||
}
|
||
|
||
|
||
case CKPT_REGISTER1:
|
||
trace("GoNavigate: CKPT_REGISTER1");
|
||
if (g_status != STATUS_OFF && 1 != StatusObj.get_Status(MS_REGISTRATION) && 1 != StatusObj.get_Status(OEM_REGISTRATION) && !window.external.get_RegStatus())
|
||
{
|
||
PushCKPT(CKPT_REGISTER1);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_REGISTER1));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_ISPSIGNUP:
|
||
trace("GoNavigate: CKPT_ISPSIGNUP");
|
||
if (g_status == STATUS_ISP)
|
||
{
|
||
PushCKPT(CKPT_ISPSIGNUP);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_ISPSIGNUP));
|
||
break;
|
||
}
|
||
|
||
// fall through...
|
||
|
||
case CKPT_OEMISP: // PreConfig case
|
||
trace("GoNavigate: CKPT_OEMISP");
|
||
if ((g_status == STATUS_OEM) &&
|
||
!window.external.GetNoIspPreconfig())
|
||
{
|
||
PushCKPT(CKPT_OEMISP);
|
||
g.navigate(g_OOBEDir + 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
|
||
|
||
Agent_TurnOffISPSpecialCommands();
|
||
|
||
ResetDialing();
|
||
if (1 == DirObj.get_OEMCust)
|
||
{
|
||
PushCKPT(CKPT_OEMCUST);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_OEMCUST));
|
||
break;
|
||
}
|
||
// fall through...
|
||
|
||
case CKPT__MODULE_:
|
||
trace("GoNavigate: CKPT__MODULE_");
|
||
PushCKPT(CKPT__MODULE_);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT__MODULE_));
|
||
break;
|
||
|
||
case CKPT_DONE:
|
||
trace("GoNavigate: CKPT_DONE");
|
||
ResetDialing();
|
||
if (!window.external.GetNoWelcomeFinish())
|
||
{
|
||
PushCKPT(CKPT_DONE);
|
||
g.navigate(g_OOBEDir + URLFromCKPT(CKPT_DONE));
|
||
}
|
||
else
|
||
{
|
||
PushCKPT(CKPT_DONE);
|
||
GoNext();
|
||
}
|
||
|
||
break;
|
||
|
||
default:
|
||
PushCKPT(ckptGoHere); // sets g_CurrentCKPT = ckptGoHere;
|
||
g.navigate(g_OOBEDir + URLFromCKPT(ckptGoHere));
|
||
break;
|
||
}
|
||
|
||
StatusNavigate();
|
||
|
||
// AGENT: notify Agent, code in AgtCore.js
|
||
|
||
Agent_OnNavigate();
|
||
}
|
||
|
||
|
||
function GoNext()
|
||
{
|
||
try
|
||
{
|
||
if (IsLocalFile() && g.event == null)
|
||
return;
|
||
}
|
||
catch(e)
|
||
{
|
||
return;
|
||
}
|
||
|
||
DisableAllButtons();
|
||
|
||
switch (g_CurrentCKPT)
|
||
{
|
||
|
||
case CKPT_HWCHK:
|
||
GoNavigate(CKPT_HWCHK);
|
||
break;
|
||
|
||
case CKPT_WELCOME:
|
||
ScreenFrame.style.filter=null;
|
||
GoNavigate(CKPT__MODULE_);
|
||
break;
|
||
|
||
case CKPT__MODULE_:
|
||
GoNavigate(CKPT_MOUSETUT1);
|
||
break;
|
||
|
||
case CKPT_MOUSETUT1:
|
||
GoNavigate(CKPT_IMETUTORIAL);
|
||
break;
|
||
|
||
case CKPT_IMETUTORIAL:
|
||
GoNavigate(CKPT_OEMHW);
|
||
break;
|
||
|
||
case CKPT_OEMHW:
|
||
if (true == StatusObj.get_Status(LANGUAGECOMPLETED))
|
||
{
|
||
GoNavigate(CKPT_TIMEZONE);
|
||
}
|
||
else
|
||
GoNavigate(CKPT_REGION_KEYBD);
|
||
break;
|
||
|
||
|
||
case CKPT_REGION_KEYBD:
|
||
// setting these to null fixes hanging bug where user clicks on selmenus
|
||
// during execution of SaveSettings
|
||
|
||
g.selKeyboard.disabled = true;
|
||
g.selKeyboard.onchange = null;
|
||
g.selRegion.disabled = true;
|
||
g.selRegion.onchange = null;
|
||
g.selLang.disabled = true;
|
||
g.selLang.onchange = null;
|
||
|
||
g.document.body.style.cursor = "wait";
|
||
|
||
LangObj.set_RegionIndex(g.selRegion.selectedIndex)
|
||
LangObj.set_LangIndex(g.selLang.selectedIndex);
|
||
LangObj.set_KeyboardLayoutIndex(g.selKeyboard.selectedIndex);
|
||
|
||
// must always call SaveSettings() since apparently there is
|
||
// no way to know current language setting of machine
|
||
LangObj.SaveSettings();
|
||
|
||
if (LANGUAGE_REBOOT_NOW == LangObj.get_RebootState())
|
||
GoNavigate(CKPT_REGKB_COMMIT);
|
||
else
|
||
GoNavigate(CKPT_TIMEZONE);
|
||
|
||
g.document.body.style.cursor = "default";
|
||
|
||
break;
|
||
|
||
case CKPT_REGKB_COMMIT:
|
||
// "Next" for this page indicates a restart
|
||
|
||
PopCKPT(CKPT_REGKB_COMMIT); // Don't want this in our history anymore after reboot
|
||
PopCKPT(CKPT_REGION_KEYBD);
|
||
PushCKPT(CKPT_TIMEZONE); // so when we come back after reboot we are on the mouse tut page
|
||
StatusObj.set_Status(LANGUAGECOMPLETED, true);
|
||
window.external.PowerDown(1); // reboot
|
||
break;
|
||
|
||
case CKPT_TIMEZONE:
|
||
SysClockObj.set_AutoDaylight(g.daylight.checked);
|
||
SysClockObj.set_TimeZoneIdx(g.selTimeZone.selectedIndex);
|
||
GoNavigate(CKPT_EULA);
|
||
break;
|
||
|
||
case CKPT_EULA:
|
||
if (EulaObj.get_EULAAcceptance)
|
||
{
|
||
PopCKPT();
|
||
GoNavigate(CKPT_PRODUCTKEY);
|
||
}
|
||
else
|
||
GoNavigate(CKPT_EULA_DECLINE);
|
||
break;
|
||
|
||
case CKPT_EULA_DECLINE:
|
||
PopCKPT();
|
||
PushCKPT(CKPT_EULA); // go back to main eula page, not this one
|
||
window.external.PowerDown(0); // shut down
|
||
break;
|
||
|
||
case CKPT_PRODUCTKEY:
|
||
StorePid();
|
||
|
||
if (PidObj.get_PID.length != 0 && PidObj.ValidatePID())
|
||
{
|
||
PopCKPT(CKPT_PRODUCTKEY);
|
||
GoNavigate(CKPT_ICSCHOICE);
|
||
}
|
||
else
|
||
{
|
||
GoNavigate(CKPT_BADPRODUCTKEY);
|
||
}
|
||
break;
|
||
|
||
case CKPT_BADPRODUCTKEY:
|
||
PopCKPT(); // go back to prodkey page on restart, not this one
|
||
PushCKPT(CKPT_PRODUCTKEY); // does this leave 2 pid pgs on stack?
|
||
window.external.PowerDown(0); // shut down
|
||
break;
|
||
case CKPT_ICSCHOICE:
|
||
// we update only the USER's preference. this does NOT mean that
|
||
// ICS will ALWAYS be available!!
|
||
if (g.radio_ChooseIcs.checked)
|
||
{
|
||
StatusObj.set_Status(ICS_FOR_OOBE, true);
|
||
window.external.TriggerIcsCallback(true);
|
||
|
||
}
|
||
else
|
||
{
|
||
window.external.TriggerIcsCallback(false);
|
||
StatusObj.set_Status(ICS_FOR_OOBE, false);
|
||
}
|
||
// the decision below was previously made at the Product Key page. Not any more.
|
||
if ( StatusObj.get_Status(MS_REGISTRATION) ||
|
||
StatusObj.get_Status(OEM_REGISTRATION) ||
|
||
window.external.get_RegStatus() )
|
||
{
|
||
GoNavigate(CKPT_ISPSIGNUP);
|
||
}
|
||
else
|
||
{
|
||
GoNavigate(CKPT_REGISTER1);
|
||
}
|
||
break;
|
||
|
||
case CKPT_REGISTER1:
|
||
if (g.radioRegNeedPP.checked)
|
||
GoNavigate(CKPT_REGISTER3);
|
||
else {
|
||
// (g.radioRegLater.checked)
|
||
GoNavigate(CKPT_ISPSIGNUP);
|
||
}
|
||
break;
|
||
|
||
case CKPT_REGISTER3:
|
||
if(VerifyReg3Fields())
|
||
{
|
||
Reg3SaveSettings();
|
||
|
||
if ( window.external.IsIcsAvailable() && StatusObj.get_Status(ICS_FOR_OOBE) )
|
||
{
|
||
IcsConnect(ICS_CONN_TYPE_REG);
|
||
}
|
||
else
|
||
{
|
||
GoNavigate(CKPT_REGDIAL);
|
||
}
|
||
}
|
||
break;
|
||
case CKPT_ISPSIGNUP:
|
||
if (g.radioGetNewISP.checked)
|
||
{
|
||
StatusObj.set_Status(ICS_FOR_INTERNET, false);
|
||
if ((window.external.IsIcsAvailable() && StatusObj.get_Status(ICS_FOR_OOBE)) ||
|
||
(!window.external.IsIcsAvailable() && window.external.CheckOnlineStatus && window.external.CheckStayConnected("msobe.isp")) )
|
||
{
|
||
PushCKPT(CKPT_ISPDIAL);
|
||
if (window.external.IsIcsAvailable() && StatusObj.get_Status(ICS_FOR_OOBE))
|
||
{
|
||
IcsConnect(ICS_CONN_TYPE_ISP);
|
||
}
|
||
else
|
||
{
|
||
window.external.Connect(CONNECTED_ISP_SIGNUP, "msobe.isp");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
window.external.Hangup();
|
||
GoNavigate(CKPT_ISPDIAL); // Getting Online
|
||
}
|
||
}
|
||
else if (g.radioMigrateISP.checked)
|
||
{
|
||
StatusObj.set_Status(ICS_FOR_INTERNET, false);
|
||
if (true == StatusObj.get_Status(REFERALDLCOMPLETED))
|
||
{
|
||
GoNavigate(CKPT_MIGLIST);
|
||
}
|
||
else
|
||
{
|
||
if ((window.external.IsIcsAvailable() && StatusObj.get_Status(ICS_FOR_OOBE)) ||
|
||
(window.external.CheckOnlineStatus && window.external.CheckStayConnected("migrate.isp")) )
|
||
{
|
||
g_bTapiDone = false;
|
||
GoNavigate(CKPT_REFDIAL);
|
||
}
|
||
else
|
||
{
|
||
window.external.Hangup();
|
||
GoNavigate(CKPT_REFDIAL); // Online
|
||
}
|
||
}
|
||
}
|
||
else if ( g.radioSelectICS.checked ) {
|
||
StatusObj.set_Status(ICS_FOR_INTERNET, true);
|
||
window.external.Hangup(); // this does nothing for LAN (ICS) connections.
|
||
GoNavigate(CKPT_DONE);
|
||
} else {
|
||
StatusObj.set_Status(ICS_FOR_INTERNET, false);
|
||
GoCancel(); // skip checked
|
||
}
|
||
|
||
break;
|
||
|
||
case CKPT_ISPDIAL:
|
||
GoNavigate(CKPT_OEMCUST);
|
||
break;
|
||
|
||
case CKPT_REGDIAL:
|
||
GoNavigate(CKPT_ISPSIGNUP);
|
||
break;
|
||
|
||
case CKPT_OEMISP:
|
||
GoNavigate(CKPT_OEMCUST);
|
||
break;
|
||
|
||
case CKPT_OEMCUST:
|
||
GoNavigate(CKPT_DONE);
|
||
break;
|
||
|
||
case CKPT_DONE:
|
||
var finish = window.external.Finish();
|
||
|
||
if (finish == FINISH_OK) // Finish was successful, so we execute script until our window goes away
|
||
{
|
||
Agent_OnFinish();
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
// allow ourselves to go back to those pages if they gave us bad information
|
||
if (finish & FINISH_BAD_EULA)
|
||
{
|
||
if (null == EulaObj)
|
||
{
|
||
EulaObj = new Object;
|
||
EulaObj = window.external.Eula;
|
||
}
|
||
|
||
EulaObj.set_EULAAcceptance(false);
|
||
}
|
||
|
||
// BUGBUG nuke stack here
|
||
|
||
if (finish & FINISH_REBOOT) // language changed but didn't want to reboot earlier, so reboot now
|
||
{
|
||
window.external.PowerDown(1);
|
||
Agent_OnFinish();
|
||
}
|
||
else if (finish & FINISH_BAD_STAMP) // setupX "stamp" of user.exe failed, we should nav to the earliest page in the flow...
|
||
GoNavigate(CKPT_WELCOME); // BUGBUG Bad stamp is really an internal error, should notify user?
|
||
else if (finish & FINISH_BAD_EULA)
|
||
GoNavigate(CKPT_EULA);
|
||
else if (finish & FINISH_BAD_PID)
|
||
GoNavigate(CKPT_PRODUCTKEY);
|
||
|
||
}
|
||
|
||
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(CurPage) // original version that does not fix IE 90257
|
||
{
|
||
if(CurPage==null) {
|
||
CurPage=GetCurrentPageName();
|
||
}
|
||
|
||
var NextPage=g_SimpleNavMap.Item(CurPage);
|
||
|
||
// do specific per-page stuff
|
||
switch(CurPage) {
|
||
case g_LastMouseTutPage:
|
||
GoNext(); // move on to next real checkpnt
|
||
return;
|
||
}
|
||
|
||
g.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="buttons-disabled";
|
||
}
|
||
catch(e) {}
|
||
try
|
||
{
|
||
g.btnBack.disabled=true;
|
||
g.btnBack.className="buttons-disabled";
|
||
}
|
||
catch(e) {}
|
||
try
|
||
{
|
||
g.btnSkip.disabled=true;
|
||
g.btnSkip.className="buttons-disabled";
|
||
}
|
||
catch(e) {}
|
||
}
|
||
|
||
|
||
function SetBackgroundImg(SetExt)
|
||
{
|
||
g.document.body.style.backgroundPosition='top left';
|
||
|
||
if (SetExt != null)
|
||
{
|
||
if(window.top.screen.width>800)
|
||
{g.document.body.style.backgroundImage = 'url(../../images/watermrk.gif)';}
|
||
else
|
||
{g.document.body.style.backgroundImage = 'url(../../images/watrmrk2.gif)';}
|
||
}
|
||
else
|
||
{
|
||
if(window.top.screen.width>800)
|
||
{g.document.body.style.backgroundImage = 'url(../images/watermrk.gif)';}
|
||
else
|
||
{g.document.body.style.backgroundImage = 'url(../images/watrmrk2.gif)';}
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
// 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(ExternalModule)
|
||
{
|
||
// Static control over online pages
|
||
if ( window.external.IsIcsAvailable() && window.parent.StatusObj.get_Status(ICS_FOR_OOBE) )
|
||
{
|
||
// do not modify any IFRAMEs
|
||
}
|
||
else
|
||
{
|
||
try
|
||
{
|
||
document.frames("connDelay").frameElement.style.display="none";
|
||
document.frames("connDelay").frameElement.style.zIndex=-1;
|
||
}
|
||
catch (e)
|
||
{
|
||
}
|
||
}
|
||
|
||
g_LastButtonText = null;
|
||
g_FirstFocusElement = null;
|
||
g_LastKeyDown = null;
|
||
|
||
g = document.frames("msoobeMain");
|
||
|
||
if (ExternalModule != null)
|
||
{
|
||
SetBackgroundImg('Ext');
|
||
}
|
||
else
|
||
{
|
||
SetBackgroundImg();
|
||
}
|
||
|
||
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(SpecialArg)
|
||
{
|
||
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 == false) {
|
||
|
||
if(SpecialArg==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 == false) {
|
||
if(SpecialArg==null) {
|
||
g.btnBack.onclick = GoBack;
|
||
} else {
|
||
g.btnBack.onclick = SimpleNavBack;
|
||
}
|
||
|
||
g.btnBack.className="buttons";
|
||
} else {
|
||
g.btnBack.className="buttons-disabled";
|
||
}
|
||
}
|
||
}
|
||
|
||
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: pass keydown to Agent, NOTE: code in AgtCore.js
|
||
|
||
Agent_OnKeyDown(g.event.srcElement);
|
||
}
|
||
|
||
// AGENT: SelectClick is used by Agent
|
||
|
||
function OnSelectClick() {
|
||
|
||
Agent_OnSelectClick(g.event.srcElement);
|
||
}
|
||
|
||
// AGENT: OnClick is used by Agent
|
||
|
||
function OnClick()
|
||
{
|
||
Agent_OnElementClick(g.event.srcElement);
|
||
}
|
||
|
||
// AGENT: Focus functions are used by Agent
|
||
|
||
function OnFocus() {
|
||
|
||
// Put other code here that needs access to the focus event
|
||
|
||
Agent_OnFocus(g.event.srcElement);
|
||
}
|
||
|
||
// 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 FlashPlayerInstalled()
|
||
{
|
||
var fReturn = false;
|
||
try
|
||
{
|
||
// Correlate the PROGID and CLSID sections of the registry, then determine
|
||
// whether the inproc server exists.
|
||
//
|
||
// Trailing backslashes on registry paths are required to read default
|
||
// value.
|
||
//
|
||
strProgId = WshShell.RegRead("HKCR\\CLSID\\"
|
||
+ CLSID_FLASH_PLAYER
|
||
+ "\\VersionIndependentProgID\\");
|
||
if ( PROGID_FLASH_PLAYER == strProgId
|
||
&& CLSID_FLASH_PLAYER == WshShell.RegRead( "HKCR\\"
|
||
+ strProgId
|
||
+ "\\CLSID\\")
|
||
)
|
||
{
|
||
strInprocServer32 = WshShell.RegRead( "HKCR\\CLSID\\"
|
||
+ CLSID_FLASH_PLAYER
|
||
+ "\\InprocServer32\\"
|
||
);
|
||
fReturn = FileSystemObj.FileExists(strInprocServer32);
|
||
}
|
||
|
||
}
|
||
catch (err)
|
||
{
|
||
// if an exception is thrown, something grave is amiss. It is safer to
|
||
// assume player is not installed.
|
||
//
|
||
fReturn = false;
|
||
}
|
||
|
||
return fReturn;
|
||
}
|
||
|
||
function InitApplication()
|
||
{
|
||
OOBEDocBody.style.cursor = "wait"; // show "wait" cursor while initializing
|
||
|
||
g_bStartup = true;
|
||
InitFrameRef();
|
||
|
||
MSLogoImg.src='images/stbg'+((window.top.screen.width < 1024) ? '800.png' : '1024.png');
|
||
|
||
// reset all parameters that change if screen width > 800
|
||
if(window.top.screen.width > 800) {
|
||
|
||
StatusBackgndColor.style.width = 230;
|
||
spnStatDividerBar.style.left = StatusBackgndColor.style.width;
|
||
statpaneCell.style.width = parseInt(StatusBackgndColor.style.width) + parseInt(spnStatDividerBar.style.width);
|
||
spnStatusPane.style.width = statpaneCell.style.width;
|
||
spnStatusPane.style.top = 170;
|
||
spnMainFrame.style.width = parseInt(window.top.screen.width) - parseInt(statpaneCell.style.width); // 784 for 1024
|
||
|
||
document.frames("ifrmConnDelay").frameElement.style.left=statpaneCell.style.width;
|
||
|
||
spnOEMLogo.style.left = 304;
|
||
spnAssist.style.top = 590;
|
||
spnAssist.style.width = StatusBackgndColor.style.width;
|
||
}
|
||
|
||
if ( (1 == DirObj.get_Offline() || window.external.CheckDialReady() != ERR_COMM_NO_ERROR) )
|
||
{
|
||
g_status = STATUS_OFF;
|
||
StatusObj.set_Status(NOLAUNCHISPSIGNUP, true);
|
||
window.external.LoadStatusItems("No Modem");
|
||
}
|
||
else
|
||
{
|
||
|
||
if ( StatusObj.get_Status(ICS_FOR_OOBE) )
|
||
{
|
||
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_OEM;
|
||
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");
|
||
}
|
||
}
|
||
|
||
InitCKPT();
|
||
|
||
// IME handling
|
||
|
||
g_IMEExists = FileSystemObj.FileExists(ApiObj.get_SystemDirectory() + "\\OOBE\\HTML\\IME\\IMETut1.htm");
|
||
|
||
Agent_Init();
|
||
|
||
spnPage.style.visibility = "visible";
|
||
|
||
if (null == g_CurrentCKPT)
|
||
{
|
||
// run only if CKPT regkey didn't exist on start
|
||
g_bNeedtoRunAnimation =
|
||
FlashPlayerInstalled()
|
||
&& FileSystemObj.FileExists(g_OOBEDirPath+"images\\intro.swf");
|
||
GoNavigate(CKPT_HWCHK);
|
||
}
|
||
else
|
||
{
|
||
g_bNeedtoRunWelcomeFadeIn = false;
|
||
|
||
OOBEDocBody.style.cursor = "default";
|
||
ScreenFrame.style.visibility = "visible";
|
||
|
||
if(g_CurrentCKPT>CKPT_WELCOME) {
|
||
//if we're not running init sequence, just show the window now
|
||
//
|
||
ScreenFrame.style.display = "inline";
|
||
window.external.ShowOOBEWindow();
|
||
}
|
||
|
||
GoNavigate(g_CurrentCKPT);
|
||
}
|
||
}
|
||
|
||
function ProcessQueuedEvents() {
|
||
// flush all WM_ events in windows queue.
|
||
// workaround for IE 103880, 'white flashes in statpane & button on page unload'
|
||
window.external.ProcessQueuedEvents();
|
||
}
|
||
|
||
// Update status pane and navigate
|
||
function navigatetoPrivacy(PrivPage)
|
||
{
|
||
if(g_CurrentCKPT == CKPT_REGISTER3) {
|
||
Reg3SaveSettings();
|
||
}
|
||
|
||
if(PrivPage == "MS")
|
||
g.navigate("prvcyMS.htm");
|
||
else g.navigate("OEMpriv.htm");
|
||
}
|
||
|
||
var g_iISPRadioActive=1;
|
||
var g_bRadioMigrateISP=false;
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
// isp.htm
|
||
//////////////////////////////////////////////////////////////////////////////////////
|
||
function IspLoadMe()
|
||
{
|
||
InitFrameRef();
|
||
|
||
if(g_iISPRadioActive==1) {
|
||
g_FirstFocusElement = g.radioGetNewISP;
|
||
} else if(g_iISPRadioActive==2) {
|
||
g_FirstFocusElement = g.radioMigrateISP;
|
||
} else if(g_iISPRadioActive==3) {
|
||
g_FirstFocusElement = g.radioSelectICS;
|
||
} else {
|
||
g_FirstFocusElement = g.radioSkip;
|
||
}
|
||
|
||
IspToggleAllRadioButtons(true);
|
||
|
||
g.ISP_ICS.style.display = "none";
|
||
g.radioSelectICS.style.display = "none";
|
||
if ( window.external.IsIcsAvailable() )
|
||
{
|
||
g.ISP_ICS.style.display = "inline";
|
||
g.radioSelectICS.style.display = "inline";
|
||
}
|
||
|
||
InitButtons();
|
||
|
||
g_FirstFocusElement.checked=true;
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
function IspUnLoad()
|
||
{
|
||
try
|
||
{
|
||
if(g.radioGetNewISP.checked) {
|
||
g_iISPRadioActive=1;
|
||
} else if(g.radioMigrateISP.checked) {
|
||
g_iISPRadioActive=2;
|
||
} else if(g.radioSelectICS.checked) {
|
||
g_iISPRadioActive=3;
|
||
} else {
|
||
g_iISPRadioActive=4;
|
||
}
|
||
g_bRadioMigrateISP = (g.event.srcElement==g.radioMigrateISP);
|
||
}
|
||
catch (e) {}
|
||
|
||
}
|
||
function IspToggleAllRadioButtons(bSwitch)
|
||
{
|
||
try
|
||
{
|
||
g.radioGetNewISP.disabled = !bSwitch;
|
||
g.ISP_New.disabled = !bSwitch;
|
||
g.radioMigrateISP.disabled = !bSwitch;
|
||
g.ISP_Migrate.disabled = !bSwitch;
|
||
g.radioSelectICS.disabled = !bSwitch;
|
||
g.ISP_ICS.disabled = !bSwitch;
|
||
g.radioSkip.disabled = !bSwitch;
|
||
g.skipISP.disabled = !bSwitch;
|
||
}
|
||
catch (e)
|
||
{
|
||
}
|
||
}
|
||
|
||
|
||
// Place holder for the ISP page function
|
||
function RegRadioClicked()
|
||
{
|
||
g.btnNext.disabled = false;
|
||
InitButtons();
|
||
}
|
||
/////////////////////////////////////////////////////////////////////////////////////
|
||
// ics.htm
|
||
/////////////////////////////////////////////////////////////////////////////////////
|
||
function IcsLoadMe()
|
||
{
|
||
InitFrameRef();
|
||
|
||
InitButtons();
|
||
|
||
g_FirstFocusElement = g.radio_ChooseIcs;
|
||
g_FirstFocusElement.focus();
|
||
}
|
||
|
||
function IcsRadioClicked()
|
||
{
|
||
g.btnNext.disabled = false;
|
||
InitButtons();
|
||
}
|
||
|
||
////////////////////////////////////////////////////////////////////
|
||
// Do NOT REMOVE THIS FUNCTION< THIS WILL GET CALLED WHEN F1 is
|
||
// PRESSED.
|
||
////////////////////////////////////////////////////////////////////
|
||
function OnHelp()
|
||
{
|
||
// Invoke MSAgent
|
||
Agent_OnUserRequestAssistant();
|
||
}
|
||
|
||
</script>
|
||
|
||
<SCRIPT LANGUAGE=VBScript>
|
||
<!-- BUGBUG: Can this be changed to jscript?? -->
|
||
<!-- Flash calls this VBScript fn when movie exits -->
|
||
Sub IntroAnimation_FSCommand(ByVal command, ByVal args)
|
||
call PostMovieWelcomeInit()
|
||
end sub
|
||
</SCRIPT>
|
||
|
||
</HEAD>
|
||
|
||
<BODY ID=OOBEDocBody leftMargin=0 DIR=LTR onload="InitApplication();" scroll=no tabIndex=-1 topMargin=0 language=javascript onhelp="Agent_OnUserRequestAssistant();" style="background-color: white">
|
||
<SPAN ID=junkspan style="height:2px;width:2px;background-color:black;z-index:99;display:none"></SPAN>
|
||
|
||
<SPAN ID=MovieFrame style="position:absolute; height:100%;width:100%;background-color:white;z-index:99999;display:none">
|
||
<OBJECT alt=Welcome classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
|
||
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0"
|
||
ID=IntroAnimation WIDTH=100% HEIGHT=100%>
|
||
<PARAM NAME=movie VALUE="images\intro.swf">
|
||
<PARAM NAME=loop VALUE=false>
|
||
<PARAM NAME=menu VALUE=false>
|
||
<PARAM NAME=quality VALUE=best>
|
||
<PARAM NAME=bgcolor VALUE=#FFFFFF>
|
||
</OBJECT>
|
||
</SPAN>
|
||
|
||
<SPAN ID=ScreenFrame style="height:100%; width:100%; position:absolute; display:none">
|
||
|
||
<IMG ID=MSLogoImg style="LEFT: 0px; TOP: 0px; POSITION: absolute; z-index:10;" alt="">
|
||
|
||
<SPAN ID=StatusBackgndColor style="width:180px; height:100%; background-color:#4F7FB5; position:absolute; top:0px; left:0px; z-index:-20">
|
||
</SPAN> <!-- height adjusted in InitApp-->
|
||
|
||
<SPAN id=spnStatDividerBar style="left:180px; height:100%; background-color:#80A2CF; position:absolute; width:10px; top:0px; z-index:6">
|
||
</SPAN>
|
||
|
||
<!-- two cell table contains statpane, mainbody-->
|
||
<TABLE cellpadding=0 cellspacing=0 style="z-index:6; position:absolute; left:0px; top:0px; width:100%;height:100%">
|
||
<TR>
|
||
<TD ID=statpaneCell style="width:190px; height:100%;z-index:6">
|
||
<SPAN id=spnStatusPane style="position:absolute;LEFT: 0px; TOP: 131px; z-index:66; width: 190px;">
|
||
<IFRAME id=ifrmStatusPane frameBorder=no scrolling=no style="width:100%; height:300px; background-color: #4F7FB5" name=StatusPane src="res://MSOBSHEL.DLL/STATPANE_RESOURCE" tabIndex=-1 ></IFRAME>
|
||
</SPAN>
|
||
</TD>
|
||
|
||
<TD style="height:100%" align=center>
|
||
|
||
<SPAN id=spnPage style="VISIBILITY: hidden;z-index:4;" tabIndex=-1> <!--hidden so users dont see initial load-->
|
||
<SPAN id=spnMainFrame style="width: 610px; height:100%" tabIndex=-1 >
|
||
<IFRAME id=ifrmMainFrame frameBorder=no scrolling=no width="100%" height="100%" name=msoobeMain tabIndex=0></IFRAME> <!-- tabindex=0 because we dont want IFRAME to get focus -->
|
||
<IFRAME id=ifrmConnDelay frameBorder=no style="display:none; position:absolute; z-index:-1; left: 190px;" scrolling=no width="100%" height="100%" name=connDelay tabIndex=-1 src="setup/ISPWait.htm"></IFRAME>
|
||
</SPAN>
|
||
</SPAN>
|
||
|
||
</TD></TR>
|
||
</TABLE>
|
||
|
||
<SPAN id=spnOEMLogo style="z-index:10;POSITION: absolute; TOP: 0px; HEIGHT: 48px; width:100%; LEFT: 243px; background-position: top left; background-repeat: no-repeat; background-image: url(images/oemlogo.gif);">
|
||
</SPAN>
|
||
|
||
<SPAN id=spnAssist class="emphasis-lesser" style="visibility:hidden; background-color:#4F7FB5; POSITION: absolute; LEFT: 0px; HEIGHT: 160px; TOP: 410px; WIDTH: 180px; z-index:9">
|
||
<TABLE width="95%" cellspacing=0 cellpadding=0 align=center class="emphasis-lesser" style="text-align:center;color:white;">
|
||
<TR><TD align=center>
|
||
<IMG align=middle id=AssistImg alt=help border=0 src="images/merlin.png"
|
||
style="visibility:hidden;z-index:9" language=javascript
|
||
onclick="Agent_OnUserRequestAssistant()"><BR>
|
||
</TD></TR>
|
||
<TR><TD ID=MerlinStr1>If you want</TD></TR>
|
||
<TR><TD ID=MerlinStr2>assistance, click Merlin</TD></TR>
|
||
<TR><TD ID=MerlinStr3>or press F1.</TD></TR>
|
||
</TABLE>
|
||
</SPAN>
|
||
</SPAN>
|
||
</BODY>
|
||
</HTML>
|