You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1980 lines
54 KiB
1980 lines
54 KiB
<HTML>
|
|
<HEAD>
|
|
<TITLE>Microsoft Out-of-Box Experience</TITLE>
|
|
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
|
|
<LINK REL="stylesheet" TYPE="text/css" HREF="regsetup\regstyl.css">
|
|
<script language=jscript src="oobeutil.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.
|
|
|
|
// Status location constants
|
|
var STATUS_MSN = 0;
|
|
var STATUS_OEM = 1;
|
|
var STATUS_NONE = 2;
|
|
var STATUS_OFF = 3;
|
|
var STATUS_MAX = 4;
|
|
var SNDX_WELCOME = 0;
|
|
var SNDX_MSN_ISP = 1;
|
|
var SNDX_MSN_REG = 2;
|
|
var SNDX_MSN_FINISH = 3;
|
|
var SNDX_OEM_REG = 1;
|
|
var SNDX_OEM_ISP = 2;
|
|
var SNDX_OEM_FINISH = 3;
|
|
var SNDX_NONE_REG = 1;
|
|
var SNDX_NONE_FINISH = 2;
|
|
var SNDX_OFF_EULA = 1;
|
|
var SNDX_OFF_PID = 2;
|
|
var SNDX_OFF_FINISH = 3;
|
|
function CheckPoint(strURL, i1, i2, i3, i4)
|
|
{
|
|
this.strURL = strURL;
|
|
this.rgindex = new Array(STATUS_MAX);
|
|
this.rgindex[STATUS_MSN] = i1;
|
|
this.rgindex[STATUS_OEM] = i2;
|
|
this.rgindex[STATUS_NONE] = i3;
|
|
this.rgindex[STATUS_OFF] = i4;
|
|
}
|
|
|
|
// 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;
|
|
|
|
|
|
// Checkpoint constants
|
|
var CKPT_REGRMIND = 1;
|
|
var CKPT_REGISTER3 = 2;
|
|
var CKPT_REGCONN = 3;
|
|
var CKPT_REGLAN = 4;
|
|
var CKPT_REGDIAL = 5;
|
|
var CKPT_ACT_MSG = 6;
|
|
var CKPT_DONE = 7;
|
|
var CKPT_MAX = 8; // ALWAYS set this to be the biggest value!
|
|
|
|
var CKPT_ISPDIAL = CKPT_MAX;
|
|
var CKPT_REFDIAL = CKPT_MAX;
|
|
var CKPT_MIGDIAL = CKPT_MAX;
|
|
var CKPT_REGISTER1 = CKPT_MAX;
|
|
var CKPT_ISPSIGNUP = CKPT_DONE;
|
|
|
|
|
|
var dnCKPT = new Array(CKPT_MAX);
|
|
|
|
// Checkpoint breadcrumbs
|
|
var g_CurrentCKPT = null;
|
|
var g_DialCKPT = null;
|
|
var HKEY_LOCAL_MACHINE = 0x80000002;
|
|
var OOBE_MAIN_REG_KEY = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Setup\\OOBE";
|
|
var CKPT_REG_KEY = "\\CKPT";
|
|
var TOS_REG_VALUE = "TOS";
|
|
|
|
// CheckDialReady errors
|
|
var ERR_COMM_NO_ERROR = 0;
|
|
var ERR_COMM_OOBE_COMP_MISSING = 1;
|
|
var ERR_COMM_UNKNOWN = 2; // Unknow error, check input parameters
|
|
var ERR_COMM_NOMODEM = 3; // There is no modem installed
|
|
var ERR_COMM_RAS_TCP_NOTINSTALL = 4;
|
|
|
|
// Dialing errors. Look at raserror.h for details
|
|
var DERR_DIALTONE = 680;
|
|
var DERR_BUSY = 676;
|
|
var DERR_VOICEANSWER = 677;
|
|
var DERR_NOANSWER = 678;
|
|
var DERR_NO_CARRIER = 679;
|
|
var DERR_HARDWARE_FAILURE = 630; // modem turned off
|
|
var DERR_PORT_ALREADY_OPEN = 602; // procomm/hypertrm/RAS has COM port
|
|
var DERR_PORT_OR_DEVICE = 692; // got this when hypertrm had the device open -- jmazner
|
|
var DERR_PPP_TIMEOUT = 718;
|
|
var DERR_REMOTE_DISCONNECT = 629; // Connection interrupted
|
|
|
|
// 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;
|
|
|
|
|
|
// BUGBUG temp GUIDs
|
|
var NOLAUNCHISPSIGNUP = "{C37D92A5-CA34-11d2-B71C-00C04F794977}";
|
|
var MSNCOMPLETED = "{1C0A22F2-CB6B-11d2-B544-00A0C949DA70}";
|
|
|
|
// window.external object caches
|
|
var TapiObj = null;
|
|
var InfoObj = null;
|
|
var EulaObj = null;
|
|
var LangObj = null;
|
|
var PidObj = null;
|
|
var StatusObj = null;
|
|
var DirObj = null;
|
|
var ApiObj = null;
|
|
var RegisterObj = null;
|
|
|
|
// general globals and status
|
|
var g_strISPFile = "";
|
|
var g_bStartup;
|
|
var g_LastButtonText = null;
|
|
var g_FirstFocusElement = null;
|
|
var g = null;
|
|
var g_SpecialChars = ".'-` ";
|
|
var g_OOBEDir = "file://" + window.external.API.get_SystemDirectory() + "\\oobe\\";
|
|
var g_bRedial = false;
|
|
var g_LineProblem = 0;
|
|
var g_bFirstServerError = true;
|
|
var g_status = STATUS_OFF;
|
|
var g_ServerErrorCount = 0;
|
|
var g_IMEExists = false;
|
|
var g_OEMAddBackURL = "";
|
|
var g_DialingAvailableInCountry = true;
|
|
var g_ModalDialogUp = false;
|
|
var g_RemoveRemind = false;
|
|
var MS_REGISTRATION = "{1C956940-8617-11D3-8B99-00A0C91E7F3C}";
|
|
var OEM_REGISTRATION = "{ECD24360-B210-11D3-8B99-00A0C91E7F3C}";
|
|
var g_bTapiDone = false;
|
|
var g_OEMNameStr=window.external.Signup.get_OEMName();
|
|
var L_MS_Text="Microsoft";
|
|
var g_InitAutodial = false;
|
|
|
|
var L_CheckConnectivity_Text = "Checking for connectivity...";
|
|
var L_BlankTitle_Text = "";
|
|
|
|
var g_IsMSRegistrationSuccessful = false;
|
|
var g_IsOEMRegistrationSuccessful = false;
|
|
|
|
// Mandatory Initialization Code
|
|
if (null == ApiObj)
|
|
{
|
|
ApiObj = new Object;
|
|
ApiObj = window.external.API;
|
|
}
|
|
if (null == StatusObj)
|
|
{
|
|
StatusObj = new Object;
|
|
StatusObj = window.external.Status;
|
|
}
|
|
if (null == DirObj)
|
|
{
|
|
DirObj = new Object;
|
|
DirObj = window.external.Directions;
|
|
}
|
|
if (null == InfoObj)
|
|
{
|
|
InfoObj = new Object;
|
|
InfoObj = window.external.UserInfo;
|
|
}
|
|
if (null == RegisterObj)
|
|
{
|
|
RegisterObj = new Object;
|
|
RegisterObj = window.external.Register;
|
|
}
|
|
if (null == TapiObj)
|
|
{
|
|
TapiObj = new Object;
|
|
TapiObj = window.external.Tapi;
|
|
}
|
|
// END Initialization Code
|
|
|
|
// AGENT: SelectClick is used by Agent
|
|
function OnSelectClick() {}
|
|
|
|
// AGENT: OnClick is used by Agent
|
|
function OnClick() {}
|
|
|
|
// AGENT: Focus functions are used by Agent
|
|
function OnFocus() {}
|
|
|
|
// these handle next/back navigation for non-checkpoint pages
|
|
function SimpleNavBack()
|
|
{
|
|
g.window.history.back();
|
|
}
|
|
|
|
function HandleTextAreaFocus() {
|
|
g.event.srcElement.style.borderStyle="ridge";
|
|
}
|
|
|
|
function HandleTextAreaBlur() {
|
|
g.event.srcElement.style.borderStyle="";
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// start.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 == 13) &&
|
|
(g.btnNext.disabled == false))
|
|
{
|
|
GoNext();
|
|
}
|
|
else
|
|
{
|
|
KeyPressIsValid();
|
|
}
|
|
}
|
|
|
|
function CheckUserLocale()
|
|
{
|
|
// if local is Korean, Simplified Chinese,
|
|
// Traditional Chinese then we return
|
|
// false else 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))
|
|
return false;
|
|
else
|
|
return true;
|
|
}
|
|
// Function: Start_LoadMe
|
|
// Description: This function is called after start.htm is
|
|
// loaded. we then initialize Items on the page.
|
|
// we also populate the edits with any values already
|
|
// found in the registry.
|
|
//
|
|
|
|
function RemindChkBoxClick()
|
|
{
|
|
g_RemoveRemind = g.RemoveReminder.checked;
|
|
if (g.btnNext.disabled)
|
|
{
|
|
g.btnNext.disabled = false;
|
|
g.btnNext.onclick = GoNext;
|
|
g.btnNext.focus();
|
|
|
|
g.rb_reg_ms_no.checked = true;
|
|
g.rb_reg_oem_no.checked = true;
|
|
}
|
|
}
|
|
|
|
function Start_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
|
|
var L_Title1_Text = "Ready to register with %1 and %2?";
|
|
g.Title_Text.innerText = ApiObj.FormatMessage(L_Title1_Text, g_OEMNameStr, L_MS_Text);
|
|
GetPageTitle();
|
|
|
|
if (g_OEMNameStr.length != 0)
|
|
{
|
|
var L_OEM_Text = "Thank you for purchasing this computer from %1 featuring Microsoft Windows XP. We recommend you register with %2 and Microsoft. By registering your copy of Windows, Microsoft can notify you of future product updates, events, promotions, special offers and new products that you may be interested in.";
|
|
g.welcome_namestr.innerText = ApiObj.FormatMessage(L_OEM_Text, g_OEMNameStr, g_OEMNameStr);
|
|
|
|
var L_Question_Text = "Are you ready to register online with %1?";
|
|
g.reg1_oem_TxtQuestion.innerText = ApiObj.FormatMessage(L_Question_Text, g_OEMNameStr);
|
|
|
|
var L_Answer_Text = "Y<u>e</u>s, I'd like to register with %1 now";
|
|
g.reg1_spn3.innerHTML = ApiObj.FormatMessage(L_Answer_Text, g_OEMNameStr);
|
|
|
|
}
|
|
g.WelcomePageText.style.visibility="visible";
|
|
g.OEMName3.innerText=g_OEMNameStr;
|
|
|
|
|
|
if ((g.rb_reg_ms_yes.checked || g.rb_reg_ms_no.checked) && (g.rb_reg_oem_yes.checked || g.rb_reg_oem_no.checked))
|
|
{
|
|
g.btnNext.disabled = false;
|
|
g_FirstFocusElement = g.btnNext;
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.disabled = true;
|
|
g_FirstFocusElement = g.btnQuit;
|
|
}
|
|
InitButtons();
|
|
g_FirstFocusElement.focus();
|
|
}
|
|
|
|
function Reg1RadioClicked()
|
|
{
|
|
if (g.btnNext.disabled)
|
|
{
|
|
if ((g.rb_reg_ms_yes.checked || g.rb_reg_ms_no.checked) && (g.rb_reg_oem_yes.checked || g.rb_reg_oem_no.checked))
|
|
{
|
|
g.btnNext.disabled = false;
|
|
g.btnNext.onclick = GoNext;
|
|
g.btnNext.focus();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//// 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");
|
|
var g_ProvinceName2IndexMap= new ActiveXObject("Scripting.Dictionary");
|
|
|
|
g_ProvinceName2IndexMap.CompareMode = 1; // text compare
|
|
g_StateName2IndexMap.CompareMode = 1; // text compare
|
|
|
|
// 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";
|
|
|
|
function Reg3UserCountryChanged() {
|
|
|
|
// AGENT: notify Agent of the change
|
|
|
|
|
|
g_Country=g.selCountry.options(g.selCountry.selectedIndex).text;
|
|
|
|
if(g_Country == L_UnitedStates_Text) {
|
|
if(g.selUSState.style.display!="inline") {
|
|
g.selUSState.style.display="inline";
|
|
}
|
|
|
|
g.selCAProvince.style.display="none";
|
|
g.UserStateTextBox.style.display="none";
|
|
|
|
// 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.LabelZIP.innerHTML = L_AsteriskPostal_Text;
|
|
g.StateLabel.innerHTML = L_AsteriskProvince_Text;
|
|
} else if(g_Country == L_Canada_Text) {
|
|
g.selUSState.style.display="none";
|
|
g.selCAProvince.style.display="inline";
|
|
g.UserStateTextBox.style.display="none";
|
|
|
|
// 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.LabelZIP.innerHTML = L_AsteriskPostal_Text;
|
|
g.StateLabel.innerHTML = L_AsteriskProvince_Text;
|
|
} 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_CountryIdx=g.selCountry.selectedIndex;
|
|
|
|
Reg3UserStateChanged();
|
|
}
|
|
|
|
var L_FullName_Text="*<u>F</u>ull Name:";
|
|
|
|
function Reg3UserStateChanged() {
|
|
|
|
// AGENT: notify Agent of the change
|
|
|
|
// BUGBUG: ok for no notify on change to textbox?
|
|
|
|
if(g.selUSState.style.display!="none")
|
|
{
|
|
g_StateIdx=g.selUSState.selectedIndex;
|
|
g_State=g.selUSState.options(g.selUSState.selectedIndex).text;
|
|
g.StateLabel.htmlFor="selUSState";
|
|
}
|
|
else if (g.selCAProvince.style.display!="none")
|
|
{
|
|
g_StateIdx=g.selCAProvince.selectedIndex;
|
|
g_State=g.selCAProvince.options(g.selCAProvince.selectedIndex).text;
|
|
g.StateLabel.htmlFor="selCAProvince";
|
|
}
|
|
else
|
|
{
|
|
g_State = g.UserStateTextBox.value;
|
|
g.StateLabel.htmlFor="UserStateTextBox";
|
|
}
|
|
}
|
|
|
|
|
|
// 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_PhoneNumber = InfoObj.get_PhoneNumber();
|
|
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_PhoneNumber=g.UserPhoneNumber.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_PhoneNumber(g_PhoneNumber);
|
|
InfoObj.set_Zip(g_ZipCode);
|
|
InfoObj.set_City(g_City);
|
|
|
|
TapiObj.set_CountryIndex(g.selCountry.selectedIndex);
|
|
|
|
}
|
|
|
|
function Reg3_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
|
|
|
|
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.UserPhoneNumber.value=g_PhoneNumber;
|
|
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);
|
|
}
|
|
|
|
var fTapi = TapiObj.IsTAPIConfigured(); // init TAPI
|
|
/*
|
|
var ilen = TapiObj.get_NumOfCountry(); // get num of countries, also inits COM obj storage
|
|
for (var i = 0; i < ilen; i++)
|
|
{
|
|
var oOption = g.document.createElement("OPTION");
|
|
oOption.text = TapiObj.get_CountryNameForIndex(i);
|
|
g.selCountry.add(oOption);
|
|
}
|
|
*/
|
|
|
|
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();
|
|
Reg3UserStateChanged();
|
|
|
|
|
|
InitButtons();
|
|
|
|
g.error_mesg.innerHTML = L_RequiredField_Text;
|
|
g.error_mesg.style.display="inline";
|
|
|
|
g_FirstFocusElement.focus();
|
|
|
|
}
|
|
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_Email_Text="Please enter a valid E-mail address or leave the E-mail text box empty.";
|
|
var L_EnterValid_Text="* Please fill in the required fields.";
|
|
var L_RequiredField_Text="* indicates required information";
|
|
|
|
var g_PostToMS = true;
|
|
var g_PostToOEM = true;
|
|
var POST_TO_OEM = 1;
|
|
var POST_TO_MS = 2;
|
|
|
|
|
|
// Update status pane and navigate
|
|
function navigatetoPrivacy(PrivPage)
|
|
{
|
|
if(g_CurrentCKPT == CKPT_REGISTER3) {
|
|
Reg3SaveSettings();
|
|
}
|
|
|
|
if(PrivPage == "MS")
|
|
g.navigate("rprvcyMS.htm");
|
|
else
|
|
g.navigate("rOEMpriv.htm");
|
|
}
|
|
|
|
|
|
|
|
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.className="text-error";
|
|
} else {
|
|
g.LabelZIP.className="text-primary";
|
|
}
|
|
|
|
if(GetCurrentProvince() == "") {
|
|
if(g.selUSState.style.display!="none") {
|
|
LastErrorField = g.selUSState;
|
|
} else {
|
|
LastErrorField = g.selCAProvince;
|
|
}
|
|
g.StateLabel.className="text-error";
|
|
|
|
} else {
|
|
g.StateLabel.className="text-primary";
|
|
}
|
|
}
|
|
|
|
|
|
if(g.UserCity.value == "") {
|
|
LastErrorField = g.UserCity;
|
|
g.LabelCity.className="text-error";
|
|
} else {
|
|
g.LabelCity.className="text-primary";
|
|
}
|
|
|
|
if(g.UserAddress.value == "") {
|
|
LastErrorField = g.UserAddress;
|
|
g.LabelAddress.className="text-error";
|
|
} else {
|
|
g.LabelAddress.className="text-primary";
|
|
}
|
|
|
|
if((g.UserLastName.value == "") && (g.LastNameRow.style.display!="none")) {
|
|
LastErrorField = g.UserLastName;
|
|
g.LabelLastName.className="text-error";
|
|
} else {
|
|
g.LabelLastName.className="text-primary";
|
|
}
|
|
|
|
if(g.UserFirstName.value == "") {
|
|
g.LabelFirstName.className="text-error";
|
|
LastErrorField = g.UserFirstName;
|
|
} else {
|
|
g.LabelFirstName.className="text-primary";
|
|
}
|
|
|
|
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.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;
|
|
}
|
|
|
|
// 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 start.htm
|
|
|
|
|
|
function DoFocus()
|
|
{
|
|
try
|
|
{g_FirstFocusElement.focus();}
|
|
catch(e){}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// regconn.htm
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
var g_RegConnRadioSticky = 1;
|
|
|
|
function RegConn_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
|
|
if (g_RegConnRadioSticky == 1)
|
|
{
|
|
g_FirstFocusElement = g.rb_conn_lan;
|
|
g.rb_conn_lan.checked = true;
|
|
}
|
|
else
|
|
{
|
|
g_FirstFocusElement = g.rb_conn_modem;
|
|
g.rb_conn_modem.checked = true;
|
|
}
|
|
|
|
InitButtons();
|
|
|
|
DoFocus();
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// reglan.htm
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
var ProxySettingsObj = null;
|
|
|
|
function ProxySettings(ConfigString)
|
|
{
|
|
this.UseAuto = false;
|
|
this.UseScript = false;
|
|
this.ScriptUrl = "";
|
|
this.UseProxy = false;
|
|
this.Server = "";
|
|
this.Port = "";
|
|
|
|
if (ConfigString != null)
|
|
{
|
|
var i, j;
|
|
var Args = ConfigString.split(/ /);
|
|
|
|
for (i = 0; i < Args.length; i++)
|
|
{
|
|
switch (Args[i])
|
|
{
|
|
case 'u':
|
|
var ProxyList = Args[++i];
|
|
var HttpProxy = null;
|
|
|
|
// only care about proxy server for HTTP
|
|
if (ProxyList.indexOf("=") == -1)
|
|
{
|
|
HttpProxy = ProxyList;
|
|
}
|
|
else
|
|
{
|
|
var Proxys = ProxyList.split(/;/);
|
|
if (Proxys != null)
|
|
{
|
|
for (j = 0; j < Proxys.length; j++)
|
|
{
|
|
if (Proxys[j].indexOf("http=") == 0)
|
|
{
|
|
HttpProxy = Proxys[j].substring(5, Proxys[j].length);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (HttpProxy)
|
|
{
|
|
j = HttpProxy.lastIndexOf(':');
|
|
if (j == -1)
|
|
{
|
|
this.Server = HttpProxy;
|
|
}
|
|
else
|
|
{
|
|
this.Server = HttpProxy.substring(0, j);
|
|
this.Port = HttpProxy.substring(j+1, HttpProxy.length);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case 'a':
|
|
this.UseAuto = true;
|
|
break;
|
|
|
|
case 'm':
|
|
this.UseProxy = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function RegLan_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
|
|
InitButtons();
|
|
|
|
if (ProxySettingsObj == null)
|
|
{
|
|
var ConfigString = window.external.get_ProxySettings();
|
|
ProxySettingsObj = new ProxySettings(ConfigString);
|
|
}
|
|
|
|
g.cb_auto_detect.checked = ProxySettingsObj.UseAuto;
|
|
g.cb_use_proxy.checked = ProxySettingsObj.UseProxy;
|
|
g.txt_proxy_url.value = ProxySettingsObj.Server;
|
|
g.txt_proxy_port.value = ProxySettingsObj.Port;
|
|
|
|
RegLan_upClickHandler();
|
|
|
|
g_FirstFocusElement = g.btnNext;
|
|
DoFocus();
|
|
}
|
|
|
|
function RegLan_upClickHandler()
|
|
{
|
|
if (g.cb_use_proxy.checked)
|
|
{
|
|
g.txt_proxy_url.style.backgroundColor = "#ffffff";
|
|
g.txt_proxy_url.disabled = false;
|
|
g.txt_proxy_port.style.backgroundColor = "#ffffff";
|
|
g.txt_proxy_port.disabled = false;
|
|
}
|
|
else
|
|
{
|
|
g.txt_proxy_url.style.backgroundColor = "#dddddd";
|
|
g.txt_proxy_url.disabled = true;
|
|
g.txt_proxy_port.style.backgroundColor = "#dddddd";
|
|
g.txt_proxy_port.disabled = true;
|
|
}
|
|
}
|
|
|
|
function RegLan(Stage)
|
|
{
|
|
if (Stage == null)
|
|
{
|
|
//
|
|
// Do the internet connectivity checking ...
|
|
//
|
|
var L_CheckingConnectivity_Text = "Checking connectivity...";
|
|
Span_WPA_MainTitle.innerText = L_CheckingConnectivity_Text;
|
|
ResetConnectedToInternetEx();
|
|
ConnectedToInternetEx(true, "RegLan(1);");
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Use the existing connectivity value
|
|
//
|
|
if (ConnectedToInternetEx(false))
|
|
{
|
|
IcsConnect(ICS_CONN_TYPE_REG);
|
|
}
|
|
else
|
|
{
|
|
GoNavigate(CKPT_ACT_MSG);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
// rdeskerr.htm
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
function Activation_ResetNetworking()
|
|
{
|
|
if (window.external.CheckOnlineStatus)
|
|
{
|
|
ResetDialing();
|
|
}
|
|
|
|
if (g_InitAutodial)
|
|
{
|
|
window.external.InternetAutodialHangup();
|
|
g_InitAutodial = false;
|
|
}
|
|
}
|
|
|
|
|
|
function reg_desktop_error_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
|
|
Activation_ResetNetworking();
|
|
|
|
if (g_IsMSRegistrationSuccessful || g_IsOEMRegistrationSuccessful)
|
|
{
|
|
var L_RegThankYou_Text = "Thank You!";
|
|
Span_WPA_MainTitle.innerText = L_RegThankYou_Text;
|
|
g.acterror_description_SUCCESS1.style.display="inline";
|
|
g.btnQuit.style.visibility = "hidden";
|
|
|
|
var L_FinishButton_Text = "OK";
|
|
g.btnNext.innerHTML = L_FinishButton_Text;
|
|
|
|
var Accesskey_O = "O";
|
|
g.btnNext.accessKey = Accesskey_O;
|
|
}
|
|
else
|
|
{
|
|
var L_RegUnable_Text = "Unable to register online";
|
|
Span_WPA_MainTitle.innerText = L_RegUnable_Text;
|
|
g.acterror_description1.style.display="inline";
|
|
}
|
|
|
|
InitButtons();
|
|
|
|
g_FirstFocusElement = g.btnNext;
|
|
DoFocus();
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// General Default LoadMe function
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
function _Default_LoadMe(SimpleBack, SimpleNext)
|
|
{
|
|
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(SimpleBack, SimpleNext);
|
|
if (g_FirstFocusElement != null)
|
|
g_FirstFocusElement.focus();
|
|
else
|
|
g.document.body.focus();
|
|
}
|
|
|
|
function New_Default_LoadMe(SimpleBack, SimpleNext)
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
|
|
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(SimpleBack, SimpleNext);
|
|
if (g_FirstFocusElement != null)
|
|
g_FirstFocusElement.focus();
|
|
else
|
|
g.document.body.focus();
|
|
}
|
|
|
|
|
|
function OEMPrivacy_LoadMe(NewSimpleBack, NewSimpleNext)
|
|
{
|
|
New_Default_LoadMe(NewSimpleBack, NewSimpleNext);
|
|
|
|
if (g_OEMNameStr.length != 0)
|
|
{
|
|
var L_Title1_Text = "%1 Privacy Statement";
|
|
g.Title_Text.innerText = ApiObj.FormatMessage(L_Title1_Text, g_OEMNameStr);
|
|
GetPageTitle();
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// MISC Functions
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// Page Navigation
|
|
|
|
// InitCKPT, PushCKPT, PopCKPT, CKPTFromVal are meant to handle the behavior for GoBack.
|
|
// We only go back to certain pages (i.e., Mouse Tutorial, Sound Check).
|
|
// And on some of the pages, we only go back if they haven't been
|
|
// completed (i.e., EULA, PID).
|
|
//
|
|
// So, we push checkpoints if we intend to all coming back to that page.
|
|
// We pop checkpoints if we no longer want to come back (e.g., we've
|
|
// completed that page.
|
|
|
|
function InitCKPT()
|
|
{
|
|
dnCKPT[CKPT_REGRMIND] = new CheckPoint("regsetup\\regrmnd.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_REGISTER3] = new CheckPoint("regsetup\\rusrinfo.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_REGCONN] = new CheckPoint("regsetup\\regconn.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_REGLAN] = new CheckPoint("regsetup\\reglan.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_REGDIAL] = new CheckPoint("regsetup\\rdrdyreg.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_ACT_MSG] = new CheckPoint("regsetup\\rdeskerr.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_DONE] = new CheckPoint("regsetup\\regdone.htm", 0, 0, 0, 0);
|
|
PopCKPT();
|
|
}
|
|
|
|
function PushCKPT(ckpt)
|
|
{
|
|
if (ckpt > 0 && ckpt < CKPT_MAX)
|
|
{
|
|
var tos = 0;
|
|
try
|
|
{
|
|
tos = ApiObj.get_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, TOS_REG_VALUE);
|
|
}
|
|
catch (e) {}
|
|
ApiObj.set_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, tos.toString(), ckpt);
|
|
ApiObj.set_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, TOS_REG_VALUE, ++tos);
|
|
g_CurrentCKPT = ckpt;
|
|
}
|
|
}
|
|
|
|
function PopCKPT(ckptCheck)
|
|
{
|
|
var ckpt = 0;
|
|
try
|
|
{
|
|
var tos = ApiObj.get_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, TOS_REG_VALUE);
|
|
if (tos > 0)
|
|
{
|
|
ckpt = ApiObj.get_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, (tos - 1).toString());
|
|
|
|
if (null == ckptCheck || ckpt == ckptCheck)
|
|
{
|
|
ApiObj.set_RegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, TOS_REG_VALUE, --tos);
|
|
ApiObj.DeleteRegValue(HKEY_LOCAL_MACHINE, OOBE_MAIN_REG_KEY + CKPT_REG_KEY, tos.toString());
|
|
}
|
|
}
|
|
}
|
|
catch (e) {}
|
|
|
|
if (ckpt > 0 && ckpt < CKPT_MAX)
|
|
{
|
|
g_CurrentCKPT = ckpt;
|
|
}
|
|
else
|
|
g_CurrentCKPT = null;
|
|
}
|
|
|
|
function URLFromCKPT(ckpt)
|
|
{
|
|
var str = "";
|
|
if (ckpt > 0 && ckpt < CKPT_MAX)
|
|
{
|
|
str = dnCKPT[ckpt].strURL;
|
|
}
|
|
return str;
|
|
}
|
|
|
|
function IndexFromCKPT(ckpt, status)
|
|
{
|
|
var index = 0;
|
|
if (ckpt > 0 && ckpt < CKPT_MAX)
|
|
{
|
|
var checkpoint = dnCKPT[ckpt];
|
|
index = checkpoint.rgindex[status];
|
|
}
|
|
return index;
|
|
}
|
|
|
|
|
|
function IsLocalFile()
|
|
{
|
|
try
|
|
{
|
|
return (-1 != g.location.protocol.indexOf("file"));
|
|
}
|
|
catch (e)
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// public navigation APIs
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
function SetBack(strURL)
|
|
{
|
|
g_OEMAddBackURL = strURL;
|
|
}
|
|
|
|
|
|
function GoCancel(ckpt)
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
switch (g_CurrentCKPT)
|
|
{
|
|
case CKPT_REGDIAL:
|
|
GoNavigate(CKPT_DONE);
|
|
break;
|
|
case CKPT_REGISTER3:
|
|
GoNavigate(CKPT_DONE);
|
|
break;
|
|
case CKPT_REGLAN:
|
|
RegLan();
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
function GoBack(ckpt)
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
if (g_CurrentCKPT == g_DialCKPT)
|
|
ResetDialing();
|
|
|
|
if(g_CurrentCKPT == CKPT_REGISTER3)
|
|
{
|
|
Reg3SaveSettings(); // save field settings in case we return to page
|
|
}
|
|
|
|
var ckptPrevious = g_CurrentCKPT;
|
|
PopCKPT();
|
|
|
|
if (ckptPrevious == g_CurrentCKPT)
|
|
{
|
|
// This handles the case where the current page pushed itself on the stack.
|
|
PopCKPT();
|
|
}
|
|
|
|
if (g_CurrentCKPT > 0 && g_CurrentCKPT < CKPT_MAX)
|
|
{
|
|
GoNavigate(g_CurrentCKPT);
|
|
}
|
|
}
|
|
|
|
function StatusNavigate()
|
|
{
|
|
var iMove = IndexFromCKPT(g_CurrentCKPT, g_status) - window.external.get_StatusIndex;
|
|
while (iMove > 0)
|
|
{
|
|
window.external.MoveNext();
|
|
--iMove;
|
|
}
|
|
while (iMove < 0)
|
|
{
|
|
window.external.MovePrevious();
|
|
++iMove;
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// DON'T MUCK WITH THE POSITIONING OF THE CASES IN THE SWITCHS BELOW
|
|
////////////////////////////////////////////////////////////////////
|
|
function GoNavigate(ckptGoHere)
|
|
{
|
|
try
|
|
{
|
|
if (g_bStartup == false)
|
|
{
|
|
if (IsLocalFile())
|
|
{
|
|
if (g.event != null)
|
|
{
|
|
g.event.returnValue = false;
|
|
g.event.cancelBubble = true;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
g_bStartup = false;
|
|
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
switch (ckptGoHere)
|
|
{
|
|
default:
|
|
PushCKPT(ckptGoHere); // sets g_CurrentCKPT = ckptGoHere;
|
|
g.navigate(g_OOBEDir + URLFromCKPT(ckptGoHere));
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
// 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
|
|
{
|
|
g.btnNext.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnBack.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnSkip.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
InitButtons();
|
|
}
|
|
catch(e) {}
|
|
}
|
|
|
|
function GoQuit()
|
|
{
|
|
// var L_strCloseWindow_Text ="Click OK to exit registration reminder.";
|
|
// if (confirm(L_strCloseWindow_Text))
|
|
|
|
if (g_RemoveRemind)
|
|
window.external.DeleteRemind(0);
|
|
|
|
window.external.Finish();
|
|
}
|
|
|
|
function GoNext()
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DisableAllButtons();
|
|
|
|
switch (g_CurrentCKPT)
|
|
{
|
|
case CKPT_REGRMIND:
|
|
if (g_RemoveRemind)
|
|
window.external.DeleteRemind(0);
|
|
|
|
if (g.rb_reg_ms_yes.checked || g.rb_reg_oem_yes.checked)
|
|
{
|
|
g_PostToMS = g.rb_reg_ms_yes.checked;
|
|
g_PostToOEM = g.rb_reg_oem_yes.checked;
|
|
GoNavigate(CKPT_REGISTER3);
|
|
}
|
|
else
|
|
{
|
|
window.external.Finish();
|
|
return;
|
|
}
|
|
break;
|
|
case CKPT_REGISTER3:
|
|
if(VerifyReg3Fields())
|
|
{
|
|
Span_WPA_MainTitle.innerText = "Checking connectivity...";
|
|
Reg3SaveSettings();
|
|
if (!ConnectedToInternetEx(true))
|
|
{
|
|
// If not, try AutoDial
|
|
window.external.InternetAutodial();
|
|
ResetConnectedToInternetEx();
|
|
|
|
// Check again. InternetAutodial returns success if the user cancels
|
|
if (!ConnectedToInternetEx(true))
|
|
{
|
|
// We can't assume user has modem here because
|
|
// CheckForAnyConnection don't mean having Internet Connection
|
|
if (HasNetwork() && HasModem())
|
|
{
|
|
GoNavigate(CKPT_REGCONN);
|
|
}
|
|
else if (HasNetwork())
|
|
{
|
|
GoNavigate(CKPT_REGLAN);
|
|
}
|
|
else if (HasModem())
|
|
{
|
|
GoNavigate(CKPT_REGDIAL);
|
|
}
|
|
else
|
|
{
|
|
GoNavigate(CKPT_ACTIVERR);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// if we are connected, advance the checkpoint and send the data
|
|
PushCKPT(CKPT_REGDIAL);
|
|
|
|
g_InitAutodial = true;
|
|
// This will set the URL to send the data to and will execute
|
|
// OnConnected in dialmgr.js, which will send the data
|
|
// and navigate to the next (finish) page.
|
|
//
|
|
window.external.Connect(CONNECTED_REGISTRATION, "reg.isp");
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// if we are connected, advance the checkpoint and send the data
|
|
PushCKPT(CKPT_REGDIAL);
|
|
|
|
// This will set the URL to send the data to and will execute
|
|
// OnConnected in dialmgr.js, which will send the data
|
|
// and navigate to the next (finish) page.
|
|
//
|
|
window.external.Connect(CONNECTED_REGISTRATION, "reg.isp");
|
|
}
|
|
}
|
|
break;
|
|
case CKPT_REGCONN:
|
|
if (g.rb_conn_lan.checked)
|
|
{
|
|
g_RegConnRadioSticky = 1;
|
|
GoNavigate(CKPT_REGLAN);
|
|
}
|
|
else
|
|
{
|
|
g_RegConnRadioSticky = 2;
|
|
PushCKPT(CKPT_REGDIAL);
|
|
Navigate(URLFromCKPT(CKPT_REGDIAL));
|
|
}
|
|
break;
|
|
case CKPT_REGLAN:
|
|
|
|
ProxySettingsObj.UseAuto = g.cb_auto_detect.checked;
|
|
ProxySettingsObj.UseProxy = g.cb_use_proxy.checked;
|
|
ProxySettingsObj.Server = g.txt_proxy_url.value;
|
|
ProxySettingsObj.Port = g.txt_proxy_port.value;
|
|
|
|
window.external.set_ProxySettings(
|
|
ProxySettingsObj.UseAuto,
|
|
ProxySettingsObj.UseScript,
|
|
ProxySettingsObj.ScriptUrl,
|
|
ProxySettingsObj.UseProxy,
|
|
ProxySettingsObj.Server + ((ProxySettingsObj.Port == "") ? "" : (":" + ProxySettingsObj.Port))
|
|
);
|
|
|
|
RegLan();
|
|
break;
|
|
case CKPT_REGDIAL:
|
|
GoNavigate(CKPT_DONE);
|
|
break;
|
|
case CKPT_ACT_MSG:
|
|
if (!g_IsMSRegistrationSuccessful && !g_IsOEMRegistrationSuccessful)
|
|
{
|
|
GoNavigate(CKPT_REGCONN);
|
|
break;
|
|
}
|
|
// Fall through
|
|
case CKPT_DONE:
|
|
if (g_RemoveRemind)
|
|
window.external.DeleteRemind(0);
|
|
window.external.Finish();
|
|
break;
|
|
|
|
|
|
default:
|
|
// BUGBUG should we remove the default altogether?
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
// BUGBUG temporary until MSN changes code
|
|
function GoOffline()
|
|
{
|
|
GoNext();
|
|
}
|
|
|
|
|
|
// Button Event Handlers and Initialization
|
|
function SetLastButtonText()
|
|
{
|
|
if (g.btnNext != null)
|
|
g_LastButtonText = g.btnNextText;
|
|
else if (g.btnBack != null)
|
|
g_LastButtonText = g.btnBackText;
|
|
else if (g.btnRestore != null)
|
|
g_LastButtonText = g.btnRestoreText;
|
|
else if (g.btnCancel != null)
|
|
g_LastButtonText = g.btnCancelText;
|
|
}
|
|
|
|
// Function: InitFrameRef
|
|
// Description: Sets up globals to point to buttons
|
|
// Since the buttons exist on the child frame,
|
|
// we want to have quick access to them without
|
|
// going through the collections.
|
|
// WARNING: Call this function at the top of XXX_LoadMe()
|
|
//
|
|
function InitFrameRef()
|
|
{
|
|
|
|
g_LastButtonText = null;
|
|
g_FirstFocusElement = null;
|
|
g_LastKeyDown = null;
|
|
|
|
g = document.frames("msoobeMain");
|
|
|
|
try
|
|
{
|
|
|
|
g.document.body.onkeydown = OnKeyDown;
|
|
SetLastButtonText();
|
|
}
|
|
catch(e){}
|
|
|
|
}
|
|
|
|
function HideButtons(buttons)
|
|
{
|
|
if (null != g.btnBack && (buttons & HIDE_BACK))
|
|
{
|
|
g.btnBack.Hide = true;
|
|
}
|
|
|
|
if (null != g.btnNext && (buttons & HIDE_NEXT))
|
|
{
|
|
g.btnNext.Hide = true;
|
|
}
|
|
|
|
|
|
if (null != g.spanCancel && (buttons & HIDE_CANCEL))
|
|
{
|
|
g.btnSkip.Hide = true;
|
|
}
|
|
|
|
if (null != g.spanRestore && (buttons & HIDE_RESTORE))
|
|
{
|
|
g.btnRestore.Hide = true;
|
|
}
|
|
|
|
}
|
|
|
|
function HandleButtonMouseOver()
|
|
{
|
|
// if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
// this.className="buttons-hover";
|
|
}
|
|
|
|
function HandleButtonMouseOut()
|
|
{
|
|
// if((!this.disabled)&&(this.tagName=="BUTTON"))
|
|
// this.className="buttons";
|
|
}
|
|
|
|
function InitButtons(SimpleBack, SimpleNext)
|
|
{
|
|
if(g.btnSkip!=null) {
|
|
g.btnSkip.onmouseover = HandleButtonMouseOver;
|
|
g.btnSkip.onmouseout = HandleButtonMouseOut;
|
|
|
|
if(!g.btnSkip.disabled) {
|
|
g.btnSkip.onclick = GoCancel;
|
|
|
|
// dont enable onfocus,onblur handlers until issues in 88615 are resolved
|
|
// g.btnSkip.onfocus = HandleButtonMouseOver;
|
|
// g.btnSkip.onblur = HandleButtonMouseOut;
|
|
|
|
g.btnSkip.className="buttons";
|
|
} else {
|
|
g.btnSkip.className="buttons-disabled";
|
|
}
|
|
}
|
|
|
|
if (g.btnNext != null)
|
|
{
|
|
g.btnNext.onmouseover = HandleButtonMouseOver;
|
|
g.btnNext.onmouseout = HandleButtonMouseOut;
|
|
|
|
if (!g.btnNext.disabled)
|
|
{
|
|
if (SimpleNext == null)
|
|
{
|
|
g.btnNext.onclick = GoNext;
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.onclick = SimpleNavNext;
|
|
}
|
|
g.btnNext.className="buttons";
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.className="buttons-disabled";
|
|
}
|
|
}
|
|
|
|
if (g.btnBack != null)
|
|
{
|
|
g.btnBack.onmouseover = HandleButtonMouseOver;
|
|
g.btnBack.onmouseout = HandleButtonMouseOut;
|
|
|
|
if (!g.btnBack.disabled)
|
|
{
|
|
if (SimpleBack == null)
|
|
{
|
|
g.btnBack.onclick = GoBack;
|
|
}
|
|
else
|
|
{
|
|
g.btnBack.onclick = SimpleNavBack;
|
|
}
|
|
g.btnBack.className="buttons";
|
|
}
|
|
else
|
|
{
|
|
g.btnBack.className="buttons-disabled";
|
|
}
|
|
}
|
|
|
|
try
|
|
{
|
|
if(g.btnQuit != null) {
|
|
g.btnQuit.onmouseover = HandleButtonMouseOver;
|
|
g.btnQuit.onmouseout = HandleButtonMouseOut;
|
|
|
|
|
|
if(g.btnQuit.disabled == false) {
|
|
g.btnQuit.onclick = GoQuit;
|
|
g.btnQuit.className="buttons";
|
|
} else {
|
|
g.btnQuit.className="buttons-disabled";
|
|
}
|
|
}
|
|
} catch(e) {}
|
|
}
|
|
|
|
|
|
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;
|
|
}
|
|
|
|
// VALIDATION ROUTINES
|
|
function KeyPressIsNumeric()
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!IsNumeric(g.event.keyCode))
|
|
{
|
|
g.event.keyCode = 0;
|
|
g.event.returnValue = false;
|
|
}
|
|
}
|
|
|
|
function IsNumeric(keyCode)
|
|
{
|
|
if ((keyCode >= 48/*0*/) && (keyCode <= 57/*9*/))
|
|
return true;
|
|
else
|
|
return false;
|
|
}
|
|
|
|
function IsSpecial(keyCode)
|
|
{
|
|
// BUGBUG DISABLED FOR BETA
|
|
/*
|
|
var bFound = false;
|
|
var iPosition = 0;
|
|
for (;iPosition < g_SpecialChars.length; iPosition++)
|
|
{
|
|
if (g_SpecialChars.charCodeAt(iPosition) == keyCode)
|
|
{
|
|
bFound = true;
|
|
break;
|
|
}
|
|
}
|
|
return bFound;
|
|
*/
|
|
return false;
|
|
}
|
|
|
|
function KeyPressIsValid()
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!IsAlpha(g.event.keyCode) &&
|
|
!IsSpecial(g.event.keyCode) &&
|
|
!IsNumeric(g.event.keyCode))
|
|
{
|
|
g.event.keyCode = 0;
|
|
g.event.returnValue = false;
|
|
}
|
|
}
|
|
|
|
function KeyPressIsAlpha()
|
|
{
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (!IsAlpha(g.event.keyCode))
|
|
{
|
|
g.event.keyCode = 0;
|
|
g.event.returnValue = false;
|
|
}
|
|
}
|
|
|
|
function IsAlpha(keyCode)
|
|
{
|
|
// BUGBUG DISABLED FOR BETA
|
|
/*
|
|
var strKeyCode = String.fromCharCode(keyCode);
|
|
var re1 = new RegExp("\w");
|
|
var re2 = new RegExp("\D");
|
|
|
|
strKeyCode.match(re1);
|
|
strKeyCode.match(re2);
|
|
//return ((strKeyCode.match(re1) != null) && (strKeyCode.match(re2) != null));
|
|
*/
|
|
// if ((keyCode >= 97/*a*/ && keyCode <= 122/*z*/) ||
|
|
// (keyCode >= 65/*A*/ && keyCode <= 90 /*Z*/))
|
|
return true;
|
|
// else
|
|
// return false;
|
|
}
|
|
|
|
function NumberOfSpaces(strValue)
|
|
{
|
|
/*
|
|
var NASexp = RegExp("\s");
|
|
var result = strValue.match(NASexp);
|
|
return ((result == null) || (result.length != strValue.length));
|
|
*/
|
|
var iSpaceCount = 0;
|
|
for (iPosition = 0; iPosition < strValue.length; iPosition ++)
|
|
{
|
|
if (strValue.charAt(iPosition) == ' ')
|
|
{
|
|
iSpaceCount++;
|
|
}
|
|
}
|
|
return iSpaceCount;
|
|
}
|
|
function KeyCodeToUpper()
|
|
{
|
|
var strKeyCode = String.fromCharCode(g.event.keyCode);
|
|
strKeyCode = strKeyCode.toUpperCase();
|
|
g.event.keyCode = strKeyCode.charCodeAt(0);
|
|
}
|
|
|
|
// END VALIDATION ROUTINES
|
|
|
|
var vCurItem = 0;
|
|
|
|
function SetupPageLayout()
|
|
{
|
|
var WPAWindowHeight = document.body.clientHeight;
|
|
var WPAWindowWidth = document.body.clientWidth;
|
|
|
|
if(0 != window.external.Directions.get_AppMode())
|
|
{
|
|
document.all.ifrmMainFrame.style.height = WPAWindowHeight - 93;
|
|
document.all.ifrmMainFrame.style.width = WPAWindowWidth;
|
|
}
|
|
|
|
WPABackground.src = 'images/wpaback.jpg';
|
|
WPATop.src = 'images/wpatop.jpg';
|
|
WPABottom.src = 'images/wpabtm.jpg';
|
|
WPAFlag.src = 'images/wpaflag.jpg';
|
|
|
|
WPABottom.style.top = WPAWindowHeight - 45;
|
|
}
|
|
|
|
window.onresize = SetupPageLayout;
|
|
|
|
function InitApplication()
|
|
{
|
|
var bNoModem = false;
|
|
SetupPageLayout();
|
|
|
|
g_bStartup = true;
|
|
InitFrameRef();
|
|
if ( 1 == DirObj.get_Offline() || window.external.CheckDialReady() != ERR_COMM_NO_ERROR)
|
|
{
|
|
bNoModem = true;
|
|
g_status = STATUS_OFF;
|
|
}
|
|
|
|
|
|
InitCKPT();
|
|
|
|
// if we are in appmode, we must nuke the stack and restart each time
|
|
if (0 != DirObj.get_AppMode)
|
|
{
|
|
do
|
|
{
|
|
PopCKPT();
|
|
}
|
|
while (null != g_CurrentCKPT);
|
|
}
|
|
|
|
GoNavigate(CKPT_REGRMIND);
|
|
|
|
spnPage.style.visibility = "visible";
|
|
|
|
}
|
|
|
|
function GetPageTitle()
|
|
{
|
|
Span_WPA_MainTitle.innerText = g.Title_Text.innerText;
|
|
}
|
|
|
|
</script>
|
|
|
|
</HEAD>
|
|
|
|
|
|
<BODY DIR=LTR bgcolor="#4E6FD6" topMargin=0 leftMargin=0 onload="InitApplication();" scroll=no tabIndex=-1 rightMargin=0>
|
|
|
|
<!-- WPA images, dynamic layout positioning will be done in SetupPageLayout() function -->
|
|
<IMG ID=WPABackground style="LEFT: 0px; TOP: 0px; POSITION: absolute; z-index:-99;" alt="">
|
|
<IMG ID=WPATop style="LEFT: 0px; TOP: 0px; POSITION: absolute; z-index:-97;" alt="">
|
|
<IMG ID=WPABottom style="LEFT: 0px; TOP: 0px; POSITION: absolute; z-index:-96;" alt="">
|
|
|
|
<!-- Don't alter this table structure. It's designed to support BiDi and Non-BiDi. -->
|
|
<TABLE WIDTH="95%" BORDER=0 style="POSITION: absolute; LEFT: 20px; TOP: 0px;" CELLPADDING=0 CELLSPACING=0>
|
|
<TR>
|
|
<TD nowrap VALIGN=MIDDLE>
|
|
<SPAN id=Span_WPA_MainTitle class="title" style="height: 28px;" tabIndex=-1>
|
|
</SPAN>
|
|
</TD>
|
|
|
|
<TD WIDTH="99%">
|
|
</TD>
|
|
|
|
<TD VALIGN=TOP>
|
|
<IMG ID=WPAFlag alt="">
|
|
</TD>
|
|
</TR>
|
|
</TABLE>
|
|
|
|
<SPAN id=spnPage style="VISIBILITY: hidden" tabIndex=-1>
|
|
<span id=spnMainFrame style="POSITION: absolute; LEFT: 0px; TOP: 48px; width=100%; height=100%;" tabIndex=-1>
|
|
<IFRAME ALLOWTRANSPARENCY="true" frameBorder=no width="100%" height="100%" id=ifrmMainFrame name=msoobeMain src="about:blank" tabIndex=0></IFRAME>
|
|
</SPAN>
|
|
</SPAN>
|
|
|
|
</BODY>
|
|
</HTML>
|