3744 lines
98 KiB
Plaintext
3744 lines
98 KiB
Plaintext
<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="actsetup\aregstyl.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_ACTIV = 1;
|
|
var CKPT_ACTDONE = 2;
|
|
var CKPT_ACTIVERR = 3;
|
|
var CKPT_ACTIVSVC = 4;
|
|
var CKPT_REGISTER1 = 5;
|
|
var CKPT_REGISTER3 = 6;
|
|
var CKPT_ACTCONN = 7;
|
|
var CKPT_ACTLAN = 8;
|
|
var CKPT_REGDIAL = 9;
|
|
var CKPT_ACT_MSG = 10;
|
|
var CKPT_DONE = 11;
|
|
var CKPT_MAX = 12; // 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_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;
|
|
var ERR_COMM_ISDN = 5;
|
|
var ERR_COMM_PHONE_AND_ISDN = 6;
|
|
|
|
|
|
// Dialing errors. Look at raserror.h for details
|
|
var DERR_DIALTONE = 680;
|
|
var DERR_BUSY = 676;
|
|
var DERR_VOICEANSWER = 677;
|
|
var DERR_NOANSWER = 678;
|
|
var DERR_NO_CARRIER = 679;
|
|
var DERR_HARDWARE_FAILURE = 630; // modem turned off
|
|
var DERR_PORT_ALREADY_OPEN = 602; // procomm/hypertrm/RAS has COM port
|
|
var DERR_PORT_OR_DEVICE = 692; // got this when hypertrm had the device open -- jmazner
|
|
var DERR_PPP_TIMEOUT = 718;
|
|
var DERR_REMOTE_DISCONNECT = 629; // Connection interrupted
|
|
|
|
// 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;
|
|
|
|
// 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;
|
|
|
|
// 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_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 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 g_Activation_Install_ID = "";
|
|
var g_PID_ENTERED_ONRECORD = "";
|
|
var g_Activation_CODE_ENTERED = "";
|
|
var g_Activation_CODE_ENTERED_status = "";
|
|
var g_InitAutodial = false;
|
|
var g_CameFromFirstPage = false;
|
|
|
|
var L_CheckConnectivity_Text = "Checking for connectivity...";
|
|
var L_BlankTitle_Text = "";
|
|
|
|
var ACTIVATION_TIMEOUT = 1800000; // 30 minutes
|
|
|
|
// 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;
|
|
}
|
|
if (null == LangObj)
|
|
{
|
|
LangObj = new Object;
|
|
LangObj = window.external.Language;
|
|
}
|
|
|
|
|
|
// 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 ShowSimpleNavBack()
|
|
{
|
|
g.window.history.back();
|
|
SetTimerShowIFrame(100);
|
|
}
|
|
|
|
function SimpleNavBack()
|
|
{
|
|
ShowIFrame('False');
|
|
window.setTimeout("ShowSimpleNavBack();",500);
|
|
}
|
|
|
|
function HandleTextAreaFocus() {
|
|
g.event.srcElement.style.borderStyle="ridge";
|
|
}
|
|
|
|
function HandleTextAreaBlur() {
|
|
g.event.srcElement.style.borderStyle="";
|
|
}
|
|
|
|
function CheckContrastMode()
|
|
{
|
|
try
|
|
{
|
|
var InHighContrastMode = window.external.InHighContrastMode();
|
|
}
|
|
catch(e)
|
|
{
|
|
var L_HighContrastMode1_Text = "InHighContrastMode API not available";
|
|
alert(L_HighContrastMode1_Text);
|
|
InHighContrastMode = false;
|
|
}
|
|
|
|
if (InHighContrastMode)
|
|
{
|
|
g.deskstyle1.disabled = true;
|
|
g.deskstyle2.disabled = false;
|
|
}
|
|
}
|
|
|
|
function GetPageTitle()
|
|
{
|
|
Span_WPA_MainTitle.innerText = g.Title_Text.innerText;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// actdone.htm
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
function Actdone_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
g_FirstFocusElement = g.btnQuit;
|
|
InitButtons();
|
|
|
|
if (g_FirstFocusElement != null)
|
|
window.setTimeout("DoFocus();",1000);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// activ.htm
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
function DoFocus()
|
|
{
|
|
//
|
|
// During the transition between pages, the pages are hidden and focus()
|
|
// will fail. If this happens we try again after a short delay.
|
|
//
|
|
try
|
|
{
|
|
if (g_FirstFocusElement != null)
|
|
{
|
|
g_FirstFocusElement.focus();
|
|
}
|
|
}
|
|
catch(e)
|
|
{
|
|
window.setTimeout("DoFocus();",1000);
|
|
}
|
|
}
|
|
|
|
function Activ_BtnTelephoneHandler()
|
|
{
|
|
GoNavigate(CKPT_ACTIVSVC);
|
|
}
|
|
|
|
var g_ActivationRadioSticky = null;
|
|
function Activation_LoadMe()
|
|
{
|
|
g_CameFromFirstPage = false;
|
|
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
if (g_ActivationRadioSticky == null)
|
|
g.btnNext.disabled = true;
|
|
else if (g_ActivationRadioSticky == 1)
|
|
g.rb_act_1.checked = true;
|
|
else if (g_ActivationRadioSticky == 2)
|
|
g.rb_act_2.checked = true;
|
|
else if (g_ActivationRadioSticky == 3)
|
|
g.rb_act_3.checked = true;
|
|
|
|
if (g_ActivationRadioSticky != null)
|
|
{
|
|
WPA_ActivationRadioClicked();
|
|
}
|
|
|
|
var ndaysleft = ""
|
|
try
|
|
{
|
|
ndaysleft = window.external.GetActivationDaysLeft();
|
|
}
|
|
catch(e)
|
|
{
|
|
ndaysleft = "0";
|
|
}
|
|
|
|
var L_LogMeOff_Text = "N<u>o</u>, log me off";
|
|
|
|
if (ndaysleft == "0")
|
|
{
|
|
g.act_par01_ZeroDays.style.display = "inline";
|
|
g.act_spn3.innerHTML = L_LogMeOff_Text;
|
|
if (window.external.HasTablet())
|
|
{
|
|
g.act_par03_Tablet.style.display = "inline";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
g.act_par01_HaveDays.style.display = "inline";
|
|
g.act_par02_HaveDays.style.display = "inline";
|
|
g.NumberDaysLeft1.innerText = ndaysleft;
|
|
}
|
|
|
|
InitButtons();
|
|
|
|
if (g_ActivationRadioSticky == null)
|
|
g_FirstFocusElement = g.document.body;
|
|
else
|
|
g_FirstFocusElement = g.btnNext;
|
|
|
|
window.setTimeout("DoFocus();",1000);
|
|
}
|
|
|
|
|
|
function WPA_ActivationRadioClicked()
|
|
{
|
|
if (g.rb_act_1.checked)
|
|
g_ActivationRadioSticky = 1;
|
|
else if (g.rb_act_2.checked)
|
|
g_ActivationRadioSticky = 2;
|
|
else
|
|
g_ActivationRadioSticky = 3;
|
|
|
|
if (g.btnNext.disabled)
|
|
{
|
|
g.btnNext.disabled = false;
|
|
g.btnNext.onclick = GoNext;
|
|
g.btnNext.focus();
|
|
}
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// activerr.htm
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
function Activerr_RetryBtnHandler()
|
|
{
|
|
DisableAllButtons();
|
|
if (CheckForAnyConnection())
|
|
GoNavigate(CKPT_ACTIV);
|
|
else
|
|
GoNavigate(CKPT_ACTIVERR);
|
|
}
|
|
|
|
function ActivationErr_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
InitButtons();
|
|
|
|
g.btnTelephone.onmouseover = HandleButtonMouseOver;
|
|
g.btnTelephone.onmouseout = HandleButtonMouseOut;
|
|
g.btnTelephone.onclick = GoNext;
|
|
|
|
g.btnNext.onclick = Activerr_RetryBtnHandler;
|
|
g_FirstFocusElement = g.btnNext;
|
|
|
|
if (g_FirstFocusElement != null)
|
|
window.setTimeout("DoFocus();",1000);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// actconn.htm
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
var g_ActConnRadioSticky = 1;
|
|
|
|
function ActConn_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
if (g_ActConnRadioSticky == 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();
|
|
|
|
window.setTimeout("DoFocus();",1000);
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// actlan.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 ActLan_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
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;
|
|
|
|
ActLan_upClickHandler();
|
|
|
|
g_FirstFocusElement = g.btnNext;
|
|
window.setTimeout("DoFocus();",1500);
|
|
}
|
|
|
|
function ActLan_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 ActLan(Stage)
|
|
{
|
|
if (Stage == null)
|
|
{
|
|
//
|
|
// Do the internet connectivity checking ...
|
|
//
|
|
Span_WPA_MainTitle.innerText = L_BlankTitle_Text;
|
|
ShowIFrame('False', L_CheckConnectivity_Text);
|
|
ResetConnectedToInternetEx();
|
|
ConnectedToInternetEx(true, "ActLan(1);");
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Use the existing connectivity value
|
|
//
|
|
if (ConnectedToInternetEx(false))
|
|
{
|
|
IcsConnect(ICS_CONN_TYPE_REG);
|
|
SetTimerShowIFrame(ACTIVATION_TIMEOUT);
|
|
}
|
|
else
|
|
{
|
|
g_ActivationStatus = ERR_ACT_NETWORK_FAILURE;
|
|
GoNavigate(CKPT_ACT_MSG);
|
|
}
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// PID functions
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
var g_TabForward = false;
|
|
var g_TabBackward = false;
|
|
var g_LastFocusedPidBox;
|
|
var g_SelectionExistsBeforeKeyPress=null;
|
|
var g_keyPressKeyCode = 0;
|
|
var g_CharCode0_plus1=("0".charCodeAt(0))+1;
|
|
|
|
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 PID_CheckLength(KnownIncomplete)
|
|
{
|
|
// call this only if box reaches length 5 for speed?
|
|
|
|
if(KnownIncomplete) {
|
|
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";
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.disabled = true;
|
|
g.btnNext.className="buttons-disabled";
|
|
}
|
|
}
|
|
|
|
function PIDBox_HandleBlur() {
|
|
g_LastFocusedPidBox=g.event.srcElement;
|
|
}
|
|
|
|
function PIDBox_HandleFocus() {
|
|
g_LastFocusedPidBox=g.event.srcElement;
|
|
OnFocus();
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
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 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 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;
|
|
}
|
|
|
|
function ProductIDKeyPress()
|
|
{
|
|
try
|
|
{
|
|
if (g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
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.btnTelephone.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();
|
|
|
|
}
|
|
|
|
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.btnQuit.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 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);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// adeskerr.htm
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
function Activation_ResetNetworking()
|
|
{
|
|
if (window.external.CheckOnlineStatus)
|
|
{
|
|
ResetDialing();
|
|
}
|
|
|
|
if (g_InitAutodial)
|
|
{
|
|
window.external.InternetAutodialHangup();
|
|
g_InitAutodial = false;
|
|
}
|
|
}
|
|
|
|
function Activation_RetryBtnHandler()
|
|
{
|
|
DisableAllButtons();
|
|
if ((g_ActivationStatus == ERR_ACT_INVALID_PID) ||
|
|
(g_ActivationStatus == ERR_ACT_USED_PID) ||
|
|
(g_ActivationStatus == ERR_ACT_BLOCKED_PID) ||
|
|
(g_ActivationStatus == ERR_ACT_DEDICATED_PID_ENTRY))
|
|
{
|
|
StorePid();
|
|
if (PidObj.get_PID.length != 0 && PidObj.ValidatePID())
|
|
{
|
|
if (ReturnToTelephonePage)
|
|
{
|
|
// Must reload our Installation ID since we're successful in updating our PID
|
|
g_Load_InstallID = true;
|
|
|
|
// Also clear out the confirmation ID boxes
|
|
g_ConfirmID_A = "";
|
|
g_ConfirmID_B = "";
|
|
g_ConfirmID_C = "";
|
|
g_ConfirmID_D = "";
|
|
g_ConfirmID_E = "";
|
|
g_ConfirmID_F = "";
|
|
g_ConfirmID_G = "";
|
|
|
|
GoNavigate(CKPT_ACTIVSVC); // This is where we go when we click on "Update" to change our product key in the update PID page
|
|
}
|
|
else
|
|
GoNavigate(CKPT_REGDIAL);
|
|
}
|
|
else
|
|
{
|
|
// Must show "Invalid PID" page
|
|
g_ActivationStatus = ERR_ACT_INVALID_PID;
|
|
GoNavigate(CKPT_ACT_MSG);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// If our error has nothing to do with the PID, then the RETRY button should fall here...
|
|
GoNavigate(CKPT_REGDIAL);
|
|
}
|
|
}
|
|
|
|
|
|
var L_EnterNewKey_Text = "Enter new key:";
|
|
var L_EnterKey_Text = "Enter key:";
|
|
var L_NewKey_Text = "New key:";
|
|
var L_MessageNumber_Text = "Message number: %1";
|
|
var L_FinishButton_Text = "OK";
|
|
var L_UpdateButton_Text = " <u>U</u>pdate ";
|
|
function act_desktop_error_LoadMe()
|
|
{
|
|
var Accesskey_U = "U";
|
|
var Accesskey_O = "O";
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
Activation_ResetNetworking();
|
|
|
|
var ndaysleft = ""
|
|
try
|
|
{
|
|
ndaysleft = window.external.GetActivationDaysLeft();
|
|
}
|
|
catch(e)
|
|
{
|
|
ndaysleft = "0";
|
|
}
|
|
|
|
if (g_ActivationStatus == ERR_ACT_SUCCESS)
|
|
{
|
|
var L_ActThankYou_Text = "Thank You!";
|
|
Span_WPA_MainTitle.innerText = L_ActThankYou_Text;
|
|
if (g_PostToMS)
|
|
g.acterror_description_SUCCESS1.style.display="inline";
|
|
else
|
|
g.acterror_description_SUCCESS2.style.display="inline";
|
|
}
|
|
else if (g_ActivationStatus == ERR_ACT_INACCESSIBLE)
|
|
{
|
|
var L_ActUnable1_Text = "Unable to activate Windows";
|
|
Span_WPA_MainTitle.innerText = L_ActUnable1_Text;
|
|
|
|
if (ndaysleft == "0")
|
|
{
|
|
g.acterror_description1Post.style.display="inline";
|
|
}
|
|
else
|
|
{
|
|
g.acterror_description1Pre.style.display="inline";
|
|
g.NumberDaysLeft1.innerText = ndaysleft;
|
|
}
|
|
}
|
|
else if (g_ActivationStatus == ERR_ACT_INVALID_PID)
|
|
{
|
|
var L_ActIncorrectKey_Text = "Incorrect product key";
|
|
Span_WPA_MainTitle.innerText = L_ActIncorrectKey_Text;
|
|
|
|
var WPAOEMMode01 = window.external.IsOemSKU();
|
|
if (WPAOEMMode01)
|
|
{
|
|
// OEM
|
|
g.acterror_description2_OEM.style.display="inline";
|
|
g.acterror_after_pid_entry_OEMText.style.display="inline";
|
|
}
|
|
else
|
|
{
|
|
// Retail
|
|
g.acterror_description2_RETAIL.style.display="inline";
|
|
}
|
|
g.acterror_pid_entry.style.display="inline";
|
|
g.acterror_after_pid_entry_text1.style.display="inline";
|
|
g.acterror_description_verify_key.innerHTML = L_NewKey_Text;
|
|
}
|
|
else if (g_ActivationStatus == ERR_ACT_USED_PID)
|
|
{
|
|
var L_ActProductKey_Text = "Product key";
|
|
Span_WPA_MainTitle.innerText = L_ActProductKey_Text;
|
|
|
|
var WPAOEMMode02 = window.external.IsOemSKU();
|
|
if (WPAOEMMode02)
|
|
{
|
|
// OEM
|
|
g.acterror_description3OEM.style.display="inline";
|
|
g.acterror_after_pid_entry_OEMText.style.display="inline";
|
|
}
|
|
else
|
|
{
|
|
// Retail
|
|
g.acterror_description3Retail.style.display="inline";
|
|
}
|
|
g.acterror_pid_entry.style.display="inline";
|
|
g.acterror_description_verify_key.innerHTML = L_NewKey_Text;
|
|
g.acterror_after_pid_entry_text2.style.display="inline";
|
|
}
|
|
else if (g_ActivationStatus == ERR_ACT_INTERNAL_WINDOWS_ERR)
|
|
{
|
|
var L_ActUnable2_Text = "Unable to activate Windows";
|
|
Span_WPA_MainTitle.innerText = L_ActUnable2_Text;
|
|
|
|
if (ndaysleft == "0")
|
|
{
|
|
g.acterror_description4Post.style.display="inline";
|
|
}
|
|
else
|
|
{
|
|
g.acterror_description4Pre.style.display="inline";
|
|
g.NumberDaysLeft2.innerText = ndaysleft;
|
|
}
|
|
}
|
|
else if (g_ActivationStatus == ERR_ACT_BLOCKED_PID)
|
|
{
|
|
var L_ActUnauthorKey_Text = "Unauthorized product key";
|
|
Span_WPA_MainTitle.innerText = L_ActUnauthorKey_Text;
|
|
|
|
var WPAOEMMode03 = window.external.IsOemSKU();
|
|
if (WPAOEMMode03)
|
|
{
|
|
// OEM
|
|
g.acterror_description5OEM.style.display="inline";
|
|
g.acterror_after_pid_entry_OEMText.style.display="inline";
|
|
}
|
|
else
|
|
{
|
|
// Retail
|
|
g.acterror_description5Retail.style.display="inline";
|
|
}
|
|
g.acterror_pid_entry.style.display="inline";
|
|
g.acterror_description_verify_key.innerHTML = L_NewKey_Text;
|
|
g.acterror_after_pid_entry_text2.style.display="inline";
|
|
}
|
|
else if (g_ActivationStatus == ERR_ACT_CORRUPTED_PID)
|
|
{
|
|
g.acterror_description6.style.display="inline";
|
|
g.NumberDaysLeft3.innerText = ndaysleft;
|
|
}
|
|
else if (g_ActivationStatus == ERR_ACT_NETWORK_FAILURE)
|
|
{
|
|
g.acterror_description7.style.display="inline";
|
|
}
|
|
else if (g_ActivationStatus == ERR_ACT_DEDICATED_PID_ENTRY)
|
|
{
|
|
var L_ActUpdateKey_Text = "Change product key";
|
|
Span_WPA_MainTitle.innerText = L_ActUpdateKey_Text;
|
|
|
|
var WPAOEMMode04 = window.external.IsOemSKU();
|
|
if (WPAOEMMode04)
|
|
{
|
|
// OEM
|
|
g.acterror_description_dedicated_pid_OEM.style.display="inline";
|
|
g.acterror_after_pid_entry_OEMText.style.display="inline";
|
|
}
|
|
else
|
|
{
|
|
// Retail
|
|
g.acterror_description_dedicated_pid_RETAIL.style.display="inline";
|
|
}
|
|
g.acterror_pid_entry.style.display="inline";
|
|
g.acterror_description_verify_key.innerHTML = L_NewKey_Text;
|
|
g.btnNext.innerHTML = L_UpdateButton_Text;
|
|
g.btnNext.accessKey = Accesskey_U;
|
|
}
|
|
else
|
|
{
|
|
g.acterror_description4.style.display="inline";
|
|
g.NumberDaysLeft2.innerText = ndaysleft;
|
|
}
|
|
|
|
|
|
if (g_ActivationStatus != ERR_ACT_SUCCESS)
|
|
{
|
|
if ((g_act_specific_error != 0) && (g_act_specific_error != null))
|
|
{
|
|
g.acterror_specific_error_code.innerText = ApiObj.FormatMessage(L_MessageNumber_Text, g_act_specific_error.toString());
|
|
g.acterror_specific_error_code.style.display = "inline";
|
|
}
|
|
}
|
|
|
|
InitButtons();
|
|
|
|
if (g_ActivationStatus != ERR_ACT_SUCCESS)
|
|
{
|
|
if ((g_ActivationStatus == ERR_ACT_INVALID_PID) ||
|
|
(g_ActivationStatus == ERR_ACT_USED_PID) ||
|
|
(g_ActivationStatus == ERR_ACT_BLOCKED_PID) ||
|
|
(g_ActivationStatus == ERR_ACT_DEDICATED_PID_ENTRY))
|
|
{
|
|
if (null == PidObj)
|
|
{
|
|
PidObj = new Object;
|
|
PidObj = window.external.ProductID;
|
|
}
|
|
|
|
g_FirstFocusElement = g.edtProductKey[0];
|
|
ShowIFrame();
|
|
RetrievePid();
|
|
|
|
var rangefocus = g_FirstFocusElement.createTextRange();
|
|
rangefocus.collapse();
|
|
rangefocus.moveStart("word", 0);
|
|
rangefocus.select();
|
|
|
|
g_TabForward = false;
|
|
g_TabBackward = false;
|
|
|
|
PID_CheckLength(false);
|
|
|
|
for (i = 0; i <= 4; i++)
|
|
{
|
|
g.edtProductKey[i].onblur=PIDBox_HandleBlur;
|
|
g.edtProductKey[i].onfocus=PIDBox_HandleFocus;
|
|
}
|
|
|
|
g_LastFocusedPidBox=g.edtProductKey[0];
|
|
}
|
|
else
|
|
{
|
|
g_FirstFocusElement = g.btnNext;
|
|
ShowIFrame();
|
|
}
|
|
|
|
g.btnTelephone.onmouseover = HandleButtonMouseOver;
|
|
g.btnTelephone.onmouseout = HandleButtonMouseOut;
|
|
g.btnTelephone.onclick = GoNext;
|
|
g.btnNext.onclick = Activation_RetryBtnHandler;
|
|
}
|
|
else
|
|
{
|
|
g.btnTelephone.style.visibility = "hidden";
|
|
g.btnQuit.style.visibility = "hidden";
|
|
g.btnNext.innerHTML = L_FinishButton_Text;
|
|
g.btnNext.accessKey = Accesskey_O;
|
|
g_FirstFocusElement = g.btnNext;
|
|
ShowIFrame();
|
|
}
|
|
|
|
window.setTimeout("DoFocus();",1000);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// activsvc.htm
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
function ValidateConfirmIDBox(Box_Number)
|
|
{
|
|
var Box_Value = null;
|
|
var Box_Valid = null;
|
|
|
|
if (Box_Number=='1')
|
|
Box_Value = g.ActCodeBox1.value;
|
|
|
|
if (Box_Number=='2')
|
|
Box_Value = g.ActCodeBox2.value;
|
|
|
|
if (Box_Number=='3')
|
|
Box_Value = g.ActCodeBox3.value;
|
|
|
|
if (Box_Number=='4')
|
|
Box_Value = g.ActCodeBox4.value;
|
|
|
|
if (Box_Number=='5')
|
|
Box_Value = g.ActCodeBox5.value;
|
|
|
|
if (Box_Number=='6')
|
|
Box_Value = g.ActCodeBox6.value;
|
|
|
|
if (Box_Number=='7')
|
|
Box_Value = g.ActCodeBox7.value;
|
|
|
|
Box_Valid = window.external.VerifyCheckDigits(Box_Value);
|
|
|
|
if (!Box_Valid)
|
|
{
|
|
var L_ConfirmIDInvalid1_Text = "The confirmation ID entered in this field is invalid. Please check the number and try again.";
|
|
alert(L_ConfirmIDInvalid1_Text);
|
|
|
|
// Set focus on the invalid confirmation id box
|
|
if (Box_Number=='1')
|
|
{
|
|
g.ActCodeBox1.focus();
|
|
g.ActCodeBox1.select();
|
|
g_DoFieldChecking = false;
|
|
}
|
|
if (Box_Number=='2')
|
|
{
|
|
g.ActCodeBox2.focus();
|
|
g.ActCodeBox2.select();
|
|
g_DoFieldChecking = false;
|
|
}
|
|
if (Box_Number=='3')
|
|
{
|
|
g.ActCodeBox3.focus();
|
|
g.ActCodeBox3.select();
|
|
g_DoFieldChecking = false;
|
|
}
|
|
if (Box_Number=='4')
|
|
{
|
|
g.ActCodeBox4.focus();
|
|
g.ActCodeBox4.select();
|
|
g_DoFieldChecking = false;
|
|
}
|
|
if (Box_Number=='5')
|
|
{
|
|
g.ActCodeBox5.focus();
|
|
g.ActCodeBox5.select();
|
|
g_DoFieldChecking = false;
|
|
}
|
|
if (Box_Number=='6')
|
|
{
|
|
g.ActCodeBox6.focus();
|
|
g.ActCodeBox6.select();
|
|
g_DoFieldChecking = false;
|
|
}
|
|
if (Box_Number=='7')
|
|
{
|
|
g.ActCodeBox7.focus();
|
|
g.ActCodeBox7.select();
|
|
g_DoFieldChecking = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Set focus on the next confirmation id box if valid
|
|
if (Box_Number=='1')
|
|
g.ActCodeBox2.focus();
|
|
if (Box_Number=='2')
|
|
g.ActCodeBox3.focus();
|
|
if (Box_Number=='3')
|
|
g.ActCodeBox4.focus();
|
|
if (Box_Number=='4')
|
|
g.ActCodeBox5.focus();
|
|
if (Box_Number=='5')
|
|
g.ActCodeBox6.focus();
|
|
if (Box_Number=='6')
|
|
g.ActCodeBox7.focus();
|
|
if (Box_Number=='7')
|
|
{
|
|
// Do nothing, focusing will be done automatically by IsConfirmIDComplete() when this function returns.
|
|
// Note: Don't take out the curly braces here...
|
|
}
|
|
|
|
g_DoFieldChecking = true;
|
|
}
|
|
}
|
|
|
|
function UpdateConfirmIDFields(FieldToEdit)
|
|
{
|
|
if (FieldToEdit == '1')
|
|
{
|
|
g_ConfirmID1 = g.ActCodeBox1.value;
|
|
}
|
|
|
|
if (FieldToEdit == '2')
|
|
{
|
|
g_ConfirmID2 = g.ActCodeBox2.value;
|
|
}
|
|
|
|
if (FieldToEdit == '3')
|
|
{
|
|
g_ConfirmID3 = g.ActCodeBox3.value;
|
|
}
|
|
|
|
if (FieldToEdit == '4')
|
|
{
|
|
g_ConfirmID4 = g.ActCodeBox4.value;
|
|
}
|
|
|
|
if (FieldToEdit == '5')
|
|
{
|
|
g_ConfirmID5 = g.ActCodeBox5.value;
|
|
}
|
|
|
|
if (FieldToEdit == '6')
|
|
{
|
|
g_ConfirmID6 = g.ActCodeBox6.value;
|
|
}
|
|
|
|
if (FieldToEdit == '7')
|
|
{
|
|
g_ConfirmID7 = g.ActCodeBox7.value;
|
|
}
|
|
|
|
// If user presses Backspace, move focus to previous field if current field is empty. Unless we are in field 1.
|
|
if (g_DoBackSpace)
|
|
{
|
|
g_DoBackSpace = false;
|
|
var tr = null;
|
|
|
|
if (FieldToEdit == '1')
|
|
{
|
|
// Do nothing.
|
|
}
|
|
else if (FieldToEdit == '2')
|
|
{
|
|
if (g.ActCodeBox2.value == "")
|
|
tr = g.ActCodeBox1.createTextRange();
|
|
}
|
|
else if (FieldToEdit == '3')
|
|
{
|
|
if (g.ActCodeBox3.value == "")
|
|
tr = g.ActCodeBox2.createTextRange();
|
|
}
|
|
else if (FieldToEdit == '4')
|
|
{
|
|
if (g.ActCodeBox4.value == "")
|
|
tr = g.ActCodeBox3.createTextRange();
|
|
}
|
|
else if (FieldToEdit == '5')
|
|
{
|
|
if (g.ActCodeBox5.value == "")
|
|
tr = g.ActCodeBox4.createTextRange();
|
|
}
|
|
else if (FieldToEdit == '6')
|
|
{
|
|
if (g.ActCodeBox6.value == "")
|
|
tr = g.ActCodeBox5.createTextRange();
|
|
}
|
|
else if (FieldToEdit == '7')
|
|
{
|
|
if (g.ActCodeBox7.value == "")
|
|
tr = g.ActCodeBox6.createTextRange();
|
|
}
|
|
|
|
|
|
// This will cause the insertion point to move to the end of the text range
|
|
if ((FieldToEdit != '1') && (tr != null))
|
|
{
|
|
tr.collapse(false);
|
|
tr.moveStart("word", 1);
|
|
tr.select();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function DeleteLastCharacter(FieldToEdit)
|
|
{
|
|
if (FieldToEdit == '1')
|
|
{
|
|
g.ActCodeBox1.value = g_ConfirmID1;
|
|
}
|
|
|
|
if (FieldToEdit == '2')
|
|
{
|
|
g.ActCodeBox2.value = g_ConfirmID2;
|
|
}
|
|
|
|
if (FieldToEdit == '3')
|
|
{
|
|
g.ActCodeBox3.value = g_ConfirmID3;
|
|
}
|
|
|
|
if (FieldToEdit == '4')
|
|
{
|
|
g.ActCodeBox4.value = g_ConfirmID4;
|
|
}
|
|
|
|
if (FieldToEdit == '5')
|
|
{
|
|
g.ActCodeBox5.value = g_ConfirmID5;
|
|
}
|
|
|
|
if (FieldToEdit == '6')
|
|
{
|
|
g.ActCodeBox6.value = g_ConfirmID6;
|
|
}
|
|
|
|
if (FieldToEdit == '7')
|
|
{
|
|
g.ActCodeBox7.value = g_ConfirmID7;
|
|
}
|
|
|
|
var L_OnlyNumbersAllowed_Text = "Only numbers can be used for the confirmation ID.";
|
|
alert(L_OnlyNumbersAllowed_Text);
|
|
|
|
if (FieldToEdit == '1')
|
|
g.ActCodeBox1.focus();
|
|
else if (FieldToEdit == '2')
|
|
g.ActCodeBox2.focus();
|
|
else if (FieldToEdit == '3')
|
|
g.ActCodeBox3.focus();
|
|
else if (FieldToEdit == '4')
|
|
g.ActCodeBox4.focus();
|
|
else if (FieldToEdit == '5')
|
|
g.ActCodeBox5.focus();
|
|
else if (FieldToEdit == '6')
|
|
g.ActCodeBox6.focus();
|
|
else if (FieldToEdit == '7')
|
|
g.ActCodeBox7.focus();
|
|
}
|
|
|
|
var g_ConfirmID1 = "";
|
|
var g_ConfirmID2 = "";
|
|
var g_ConfirmID3 = "";
|
|
var g_ConfirmID4 = "";
|
|
var g_ConfirmID5 = "";
|
|
var g_ConfirmID6 = "";
|
|
var g_ConfirmID7 = "";
|
|
var g_DoBackSpace = false;
|
|
|
|
var g_DoFieldChecking = true;
|
|
function activate_OnKeyUp(WhatField)
|
|
{
|
|
var keyCode = g.event.keyCode;
|
|
var str = String.fromCharCode(keyCode);
|
|
|
|
// Evidently, numkeypad 0 with the NumLock on gives us x60 or single back quote
|
|
// LocStudio doesn't understand regexp, so we refer to this character by ascii code \x60
|
|
|
|
// The small letters a-i represent the keycodes for the numeric keypad 1-9 (If Numlock is on).
|
|
// We only allow "Numbers" to be entered in the Confirmation ID fields.
|
|
|
|
var result = str.match(/\x60|a|b|c|d|e|f|g|h|i|1|2|3|4|5|6|7|8|9|0/);
|
|
var NonNumericresult = str.match(/A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z/);
|
|
var BackSpc = str.match(/\x08/);
|
|
|
|
var validchar = false;
|
|
if (null != result)
|
|
{
|
|
validchar = true;
|
|
}
|
|
else
|
|
{
|
|
validchar = false;
|
|
|
|
if (null != NonNumericresult)
|
|
{
|
|
DeleteLastCharacter(WhatField);
|
|
}
|
|
else
|
|
{
|
|
if (null != BackSpc)
|
|
g_DoBackSpace = true;
|
|
|
|
UpdateConfirmIDFields(WhatField);
|
|
}
|
|
}
|
|
|
|
if (validchar)
|
|
{
|
|
if (WhatField == '1')
|
|
{
|
|
g_ConfirmID1 = g.ActCodeBox1.value;
|
|
if (g.ActCodeBox1.value.length == 6)
|
|
{
|
|
ValidateConfirmIDBox(WhatField);
|
|
}
|
|
}
|
|
|
|
if (WhatField == '2')
|
|
{
|
|
g_ConfirmID2 = g.ActCodeBox2.value;
|
|
if (g.ActCodeBox2.value.length == 6)
|
|
{
|
|
ValidateConfirmIDBox(WhatField);
|
|
}
|
|
}
|
|
|
|
if (WhatField == '3')
|
|
{
|
|
g_ConfirmID3 = g.ActCodeBox3.value;
|
|
if (g.ActCodeBox3.value.length == 6)
|
|
{
|
|
ValidateConfirmIDBox(WhatField);
|
|
}
|
|
}
|
|
|
|
if (WhatField == '4')
|
|
{
|
|
g_ConfirmID4 = g.ActCodeBox4.value;
|
|
if (g.ActCodeBox4.value.length == 6)
|
|
{
|
|
ValidateConfirmIDBox(WhatField);
|
|
}
|
|
}
|
|
|
|
if (WhatField == '5')
|
|
{
|
|
g_ConfirmID5 = g.ActCodeBox5.value;
|
|
if (g.ActCodeBox5.value.length == 6)
|
|
{
|
|
ValidateConfirmIDBox(WhatField);
|
|
}
|
|
}
|
|
|
|
if (WhatField == '6')
|
|
{
|
|
g_ConfirmID6 = g.ActCodeBox6.value;
|
|
if (g.ActCodeBox6.value.length == 6)
|
|
{
|
|
ValidateConfirmIDBox(WhatField);
|
|
}
|
|
}
|
|
|
|
if (WhatField == '7')
|
|
{
|
|
g_ConfirmID7 = g.ActCodeBox7.value;
|
|
if (g.ActCodeBox7.value.length == 6)
|
|
{
|
|
ValidateConfirmIDBox(WhatField);
|
|
}
|
|
}
|
|
|
|
if (g_DoFieldChecking)
|
|
IsConfirmIDComplete();
|
|
// We set focus here instead of inside the IsConfirmIDComplete() function to have
|
|
// proper focus behaviour when we use certain keys like Tab, space, arrow keys...
|
|
if (!g.btnNext.disabled)
|
|
g.btnNext.focus();
|
|
}
|
|
else
|
|
{
|
|
IsConfirmIDComplete();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
function IsConfirmIDComplete()
|
|
{
|
|
if ((g.ActCodeBox1.value.length == 6) && (g.ActCodeBox2.value.length == 6) && (g.ActCodeBox3.value.length == 6) && (g.ActCodeBox4.value.length == 6) && (g.ActCodeBox5.value.length == 6) && (g.ActCodeBox6.value.length == 6) && (g.ActCodeBox7.value.length == 6))
|
|
{
|
|
g.btnNext.onmouseover = HandleButtonMouseOver;
|
|
g.btnNext.onmouseout = HandleButtonMouseOut;
|
|
g.btnNext.className="buttons";
|
|
g.btnNext.disabled = false;
|
|
g.btnNext.onclick = ActivationSvc_NextBtnHandler;
|
|
}
|
|
else
|
|
{
|
|
g.btnNext.className="buttons-disabled";
|
|
g.btnNext.disabled = true;
|
|
}
|
|
}
|
|
|
|
var g_ActivSvc_Reload = true;
|
|
function ActivationSvc_NextBtnHandler()
|
|
{
|
|
g_Activation_CODE_ENTERED = g.ActCodeBox1.value + '-' +
|
|
g.ActCodeBox2.value + '-' +
|
|
g.ActCodeBox3.value + '-' +
|
|
g.ActCodeBox4.value + '-' +
|
|
g.ActCodeBox5.value + '-' +
|
|
g.ActCodeBox6.value + '-' +
|
|
g.ActCodeBox7.value;
|
|
|
|
g_ConfirmID_A = g.ActCodeBox1.value;
|
|
g_ConfirmID_B = g.ActCodeBox2.value;
|
|
g_ConfirmID_C = g.ActCodeBox3.value;
|
|
g_ConfirmID_D = g.ActCodeBox4.value;
|
|
g_ConfirmID_E = g.ActCodeBox5.value;
|
|
g_ConfirmID_F = g.ActCodeBox6.value;
|
|
g_ConfirmID_G = g.ActCodeBox7.value;
|
|
|
|
try
|
|
{
|
|
g_Activation_CODE_ENTERED_status = window.external.SetConfirmationID(g_Activation_CODE_ENTERED);
|
|
}
|
|
catch(e)
|
|
{
|
|
g_Activation_CODE_ENTERED_status = 0;
|
|
}
|
|
|
|
DisableAllButtons();
|
|
if (g_Activation_CODE_ENTERED_status == 0)
|
|
{
|
|
GoNavigate(CKPT_DONE);
|
|
}
|
|
else
|
|
{
|
|
g_Load_InstallID = false;
|
|
var L_ConfirmIDInvalid_Text = "The confirmation ID is invalid. Please check the number and try again.";
|
|
alert(L_ConfirmIDInvalid_Text);
|
|
g_ActivSvc_Reload = false;
|
|
GoNavigate(CKPT_ACTIVSVC);
|
|
}
|
|
}
|
|
|
|
function ActivationSvc_ProdkeyBtnHandler()
|
|
{
|
|
DisableAllButtons();
|
|
ReturnToTelephonePage = true;
|
|
g_Load_InstallID = false;
|
|
|
|
// Must also remember the Contents of the confirmation ID typed in by the user.
|
|
g_ConfirmID_A = g.ActCodeBox1.value;
|
|
g_ConfirmID_B = g.ActCodeBox2.value;
|
|
g_ConfirmID_C = g.ActCodeBox3.value;
|
|
g_ConfirmID_D = g.ActCodeBox4.value;
|
|
g_ConfirmID_E = g.ActCodeBox5.value;
|
|
g_ConfirmID_F = g.ActCodeBox6.value;
|
|
g_ConfirmID_G = g.ActCodeBox7.value;
|
|
|
|
g_ActivationStatus = ERR_ACT_DEDICATED_PID_ENTRY;
|
|
GoNavigate(CKPT_ACT_MSG);
|
|
}
|
|
|
|
function PhoneCountries_Changed()
|
|
{
|
|
g.ChosenPhoneNumber.innerHTML = "<B>" + g_Phone_Number_Array[g.selPhoneCountry.selectedIndex] + "</B>";
|
|
g.ChosenTollNumber.innerHTML = "<B>" + g_Toll_Number_Array[g.selPhoneCountry.selectedIndex] + "</B>";
|
|
|
|
// We want to remember the country selected whenever we go back to the Telephone page (activsvc.htm)
|
|
g_Country_Selected_Index = g.selPhoneCountry.selectedIndex;
|
|
}
|
|
|
|
var g_Country_Selected_Index = 0;
|
|
var g_Phone_Number_Array = new Array(500);
|
|
var g_Toll_Number_Array = new Array(500);
|
|
function GetPhoneCountries()
|
|
{
|
|
var g_PhoneCountries = "";
|
|
|
|
try
|
|
{
|
|
g_PhoneCountries = LangObj.get_PhoneCountries();
|
|
|
|
}
|
|
catch(e)
|
|
{
|
|
g_PhoneCountries = "API call error: get_PhoneCountries";
|
|
}
|
|
|
|
var i;
|
|
var PhoneOption;
|
|
var ModulusResult;
|
|
var PhoneCounter=0;
|
|
var TollCounter =0;
|
|
var regexp1=/\t/; // Define our regexp1 to a "TAB" keycode.
|
|
var Opt_PhoneCountry_Array = g_PhoneCountries.split(regexp1); // Let's split our tab delimited g_PhoneCountries string and put it into an array.
|
|
var L_SelectYourLocation_Text = "Select your location";
|
|
|
|
|
|
// Add the "Select your location" option in the select list
|
|
PhoneOption = g.document.createElement("OPTION");
|
|
PhoneOption.text = L_SelectYourLocation_Text;
|
|
g.selPhoneCountry.add(PhoneOption);
|
|
g_Toll_Number_Array[TollCounter] = "";
|
|
g_Phone_Number_Array[PhoneCounter] = "";
|
|
TollCounter = TollCounter + 1;
|
|
PhoneCounter = PhoneCounter + 1;
|
|
|
|
for(i=0; i < Opt_PhoneCountry_Array.length; i++)
|
|
{
|
|
ModulusResult = i % 3;
|
|
if (ModulusResult == 0)
|
|
{
|
|
PhoneOption = g.document.createElement("OPTION");
|
|
PhoneOption.text = Opt_PhoneCountry_Array[i];
|
|
g.selPhoneCountry.add(PhoneOption);
|
|
}
|
|
else if (ModulusResult == 1)
|
|
{
|
|
g_Toll_Number_Array[TollCounter] = Opt_PhoneCountry_Array[i];
|
|
TollCounter = TollCounter + 1;
|
|
}
|
|
else
|
|
{
|
|
g_Phone_Number_Array[PhoneCounter] = Opt_PhoneCountry_Array[i];
|
|
PhoneCounter = PhoneCounter + 1;
|
|
}
|
|
}
|
|
g.ChosenPhoneNumber.innerHTML = "<B>" + g_Phone_Number_Array[g_Country_Selected_Index] + "</B>";
|
|
g.ChosenTollNumber.innerHTML = "<B>" + g_Toll_Number_Array[g_Country_Selected_Index] + "</B>";
|
|
g.selPhoneCountry.selectedIndex = g_Country_Selected_Index;
|
|
|
|
}
|
|
|
|
function BackBtnHandler()
|
|
{
|
|
GoNavigate(CKPT_ACTIV);
|
|
}
|
|
|
|
var ReturnToTelephonePage = false;
|
|
var g_ConfirmID_A = "";
|
|
var g_ConfirmID_B = "";
|
|
var g_ConfirmID_C = "";
|
|
var g_ConfirmID_D = "";
|
|
var g_ConfirmID_E = "";
|
|
var g_ConfirmID_F = "";
|
|
var g_ConfirmID_G = "";
|
|
var g_Load_InstallID = true;
|
|
var g_Activation_Install_ID_Full = "";
|
|
function ActivationSvc_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
ReturnToTelephonePage = false;
|
|
|
|
|
|
// We want to pre-populate the Confirmation ID fields with values entered by the user, on an event this page is loaded the second time around.
|
|
g.ActCodeBox1.value = g_ConfirmID_A;
|
|
g.ActCodeBox2.value = g_ConfirmID_B;
|
|
g.ActCodeBox3.value = g_ConfirmID_C;
|
|
g.ActCodeBox4.value = g_ConfirmID_D;
|
|
g.ActCodeBox5.value = g_ConfirmID_E;
|
|
g.ActCodeBox6.value = g_ConfirmID_F;
|
|
g.ActCodeBox7.value = g_ConfirmID_G;
|
|
|
|
|
|
// Show "Back" button if we came from the first page.
|
|
if (g_CameFromFirstPage)
|
|
{
|
|
g.btnBack.style.display = "inline";
|
|
}
|
|
|
|
InitButtons();
|
|
|
|
// Override basic button behavior.
|
|
// We want to force the back button to navigate to the first page "literally".
|
|
if (g_CameFromFirstPage)
|
|
{
|
|
g.btnBack.onclick = BackBtnHandler;
|
|
}
|
|
|
|
IsConfirmIDComplete(); // Enable the Next button if all the Confirmation ID fields are complete
|
|
GetPhoneCountries();
|
|
|
|
g.btnProdkey.onclick = ActivationSvc_ProdkeyBtnHandler;
|
|
g.btnProdkey.onmouseover = HandleButtonMouseOver;
|
|
g.btnProdkey.onmouseout = HandleButtonMouseOut;
|
|
|
|
|
|
if (g_Country_Selected_Index==0)
|
|
{
|
|
g_FirstFocusElement = g.selPhoneCountry;
|
|
}
|
|
else if (!g.btnNext.disabled)
|
|
{
|
|
g_FirstFocusElement = g.btnNext;
|
|
}
|
|
else
|
|
{
|
|
g_FirstFocusElement = g.ActCodeBox1;
|
|
}
|
|
|
|
if (g_FirstFocusElement != null)
|
|
window.setTimeout("DoFocus();",1000);
|
|
}
|
|
|
|
|
|
|
|
//// areg1.htm ///////////////////////
|
|
|
|
|
|
var g_Reg1RadioSticky = null;
|
|
function areg1_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
if (g_Reg1RadioSticky == null)
|
|
g.btnNext.disabled = true;
|
|
else if (g_Reg1RadioSticky == 1)
|
|
g.rb_reg_1.checked = true;
|
|
else if (g_Reg1RadioSticky == 2)
|
|
g.rb_reg_2.checked = true;
|
|
|
|
InitButtons();
|
|
|
|
if (g.btnNext.disabled)
|
|
g_FirstFocusElement = g.btnBack;
|
|
else
|
|
g_FirstFocusElement = g.btnNext;
|
|
window.setTimeout("DoFocus();",1500);
|
|
}
|
|
|
|
function WPA_Reg1RadioClicked()
|
|
{
|
|
// if they click on either button, enable the Next button
|
|
if(g.btnNext.disabled && (g.rb_reg_1.checked || g.rb_reg_2.checked))
|
|
{
|
|
if (g.rb_reg_1.checked)
|
|
g_Reg1RadioSticky = 1;
|
|
else if (g.rb_reg_2.checked)
|
|
g_Reg1RadioSticky = 2;
|
|
|
|
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_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;
|
|
|
|
if (IsKoreanLocale())
|
|
g_LastName="";
|
|
else
|
|
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);
|
|
InfoObj.set_CountryID(TapiObj.get_CountryID());
|
|
|
|
// Microsoft policy states that MSupdate should always be true whenever a user registers.
|
|
InfoObj.set_MSUpdate(true);
|
|
|
|
InfoObj.set_MSOffer(false);
|
|
if ((g_PostToMS==true) && (g.sharems.checked))
|
|
InfoObj.set_MSOffer(true);
|
|
|
|
InfoObj.set_OtherOffer(false);
|
|
if ((g_PostToMS==true) && (g.sharemsPartners.checked))
|
|
InfoObj.set_OtherOffer(true);
|
|
}
|
|
|
|
// We want the Reg3 checkboxes to be unchecked by default.
|
|
InfoObj.set_MSOffer(false);
|
|
InfoObj.set_OtherOffer(false);
|
|
function Reg3_LoadMe()
|
|
{
|
|
InitFrameRef();
|
|
CheckContrastMode();
|
|
|
|
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(1,0); // move lastname in front of first
|
|
g.FieldTable.moveRow(6,2); // move country to after firstname
|
|
g.FieldTable.moveRow(6,3); // move province to after country
|
|
g.FieldTable.moveRow(6,4); // 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);
|
|
}
|
|
|
|
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();
|
|
|
|
var MSoffer_Checked = InfoObj.get_MSOffer();
|
|
if (MSoffer_Checked)
|
|
g.sharems.checked = true;
|
|
else
|
|
g.sharems.checked = false;
|
|
|
|
var MSotheroffer_Checked = InfoObj.get_OtherOffer();
|
|
if (MSotheroffer_Checked)
|
|
g.sharemsPartners.checked = true;
|
|
else
|
|
g.sharemsPartners.checked = false;
|
|
|
|
InitButtons();
|
|
|
|
g.error_mesg.innerHTML = L_RequiredField_Text;
|
|
g.error_mesg.style.display="inline";
|
|
|
|
var L_CNIL_Text = "<p>";
|
|
var L_CnilStyleDisplay_Text = "none";
|
|
|
|
g.cnil_mesg.innerHTML = L_CNIL_Text;
|
|
g.cnil_mesg.style.display=L_CnilStyleDisplay_Text;
|
|
|
|
window.setTimeout("DoFocus();",1000);
|
|
}
|
|
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 = false;
|
|
var g_PostToOEM = false; // no oem stuff when we are in appmode.
|
|
var POST_TO_OEM = 1;
|
|
var POST_TO_MS = 2;
|
|
var bPostChkBxStateSaved = false;
|
|
|
|
// Update status pane and navigate
|
|
function ShownavigatetoPrivacy()
|
|
{
|
|
Navigate("actsetup\\aprvcyMS.htm");
|
|
SetTimerShowIFrame(100);
|
|
}
|
|
|
|
function navigatetoPrivacy(PrivPage)
|
|
{
|
|
if (g_CurrentCKPT == CKPT_REGISTER3)
|
|
Reg3SaveSettings();
|
|
|
|
if (g_CurrentCKPT == CKPT_REGISTER1)
|
|
{
|
|
if (g.rb_reg_1.checked)
|
|
g_Reg1RadioSticky = 1;
|
|
else if (g.rb_reg_2.checked)
|
|
g_Reg1RadioSticky = 2;
|
|
else
|
|
g_Reg1RadioSticky = null;
|
|
}
|
|
|
|
ShowIFrame('False');
|
|
window.setTimeout("ShownavigatetoPrivacy();",500);
|
|
}
|
|
|
|
function ShownavigatetoActPolicy()
|
|
{
|
|
Navigate("actsetup\\apolicy.htm");
|
|
SetTimerShowIFrame(100);
|
|
}
|
|
|
|
function navigatetoActPolicy()
|
|
{
|
|
if (g.rb_act_1.checked)
|
|
g_ActivationRadioSticky = 1;
|
|
else if (g.rb_act_2.checked)
|
|
g_ActivationRadioSticky = 2;
|
|
else if (g.rb_act_3.checked)
|
|
g_ActivationRadioSticky = 3;
|
|
else
|
|
g_ActivationRadioSticky = null;
|
|
|
|
ShowIFrame('False');
|
|
window.setTimeout("ShownavigatetoActPolicy();",500);
|
|
}
|
|
|
|
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.className = "text-error";
|
|
} else {
|
|
g.LabelEmail.className = "text-primary";
|
|
}
|
|
}
|
|
|
|
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.className = "text-error";
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// General Default LoadMe function
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
function _Default_LoadMe(SimpleBack, SimpleNext)
|
|
{
|
|
InitFrameRef();
|
|
CheckContrastMode();
|
|
|
|
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)
|
|
window.setTimeout("DoFocus();",1000);
|
|
else
|
|
g.document.body.focus();
|
|
}
|
|
|
|
|
|
function New_Default_LoadMe(SimpleBack, SimpleNext)
|
|
{
|
|
InitFrameRef();
|
|
GetPageTitle();
|
|
CheckContrastMode();
|
|
|
|
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);
|
|
|
|
window.setTimeout("DoFocus();",1000);
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////
|
|
// 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_ACTIV] = new CheckPoint("actsetup\\activ.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_ACTDONE] = new CheckPoint("actsetup\\actdone.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_ACTIVERR] = new CheckPoint("actsetup\\activerr.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_ACTIVSVC] = new CheckPoint("actsetup\\activsvc.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_REGISTER1] = new CheckPoint("actsetup\\areg1.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_REGISTER3] = new CheckPoint("actsetup\\ausrinfo.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_ACTCONN] = new CheckPoint("actsetup\\actconn.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_ACTLAN] = new CheckPoint("actsetup\\actlan.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_REGDIAL] = new CheckPoint("actsetup\\adrdyreg.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_ACT_MSG] = new CheckPoint("actsetup\\adeskerr.htm", 0, 0, 0, 0);
|
|
dnCKPT[CKPT_DONE] = new CheckPoint("actsetup\\aregdone.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)
|
|
{
|
|
trace("GoCancel: CurrentCKPT = " + g_CurrentCKPT);
|
|
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DisableAllButtons();
|
|
|
|
switch (g_CurrentCKPT)
|
|
{
|
|
case CKPT_REGDIAL:
|
|
if (InActivation_AppMode())
|
|
{
|
|
g_DoActivation = false;
|
|
ShowIFrame('False');
|
|
window.setTimeout("ExitWPA();",1000);
|
|
}
|
|
else
|
|
{
|
|
GoNavigate(CKPT_DONE);
|
|
}
|
|
break;
|
|
case CKPT_REGISTER3:
|
|
g_PostToMS = false;
|
|
GoNavigate(CKPT_REGDIAL);
|
|
break;
|
|
|
|
case CKPT_ACTLAN:
|
|
ActLan();
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
function GoBack(ckpt)
|
|
{
|
|
trace("GoBack: CurrentCKPT = " + g_CurrentCKPT);
|
|
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DisableAllButtons();
|
|
|
|
if (g_CurrentCKPT == g_DialCKPT)
|
|
ResetDialing();
|
|
|
|
if(g_CurrentCKPT == CKPT_REGISTER1)
|
|
{
|
|
if (g.rb_reg_1.checked)
|
|
g_Reg1RadioSticky = 1;
|
|
else if (g.rb_reg_2.checked)
|
|
g_Reg1RadioSticky = 2;
|
|
else
|
|
g_Reg1RadioSticky = null;
|
|
}
|
|
|
|
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 ShowGoNavigate()
|
|
{
|
|
var ckptGoHere = g_ckpt_target;
|
|
switch (ckptGoHere)
|
|
{
|
|
case CKPT_REGDIAL:
|
|
trace("GoNavigate: CKPT_REGDIAL");
|
|
|
|
// Check if we are already connected
|
|
ResetConnectedToInternetEx();
|
|
if (!ConnectedToInternetEx(true))
|
|
{
|
|
// If not, try AutoDial
|
|
g_InitAutodial = window.external.InternetAutodial();
|
|
|
|
if (!g_InitAutodial)
|
|
{
|
|
// We can't assume user has modem here
|
|
if (HasNetwork() && HasModem())
|
|
{
|
|
GoNavigate(CKPT_ACTCONN);
|
|
}
|
|
else if (HasNetwork())
|
|
{
|
|
GoNavigate(CKPT_ACTLAN);
|
|
}
|
|
else if (HasModem())
|
|
{
|
|
PushCKPT(ckptGoHere); // sets g_CurrentCKPT = ckptGoHere;
|
|
Navigate(URLFromCKPT(CKPT_REGDIAL));
|
|
}
|
|
else
|
|
{
|
|
GoNavigate(CKPT_ACTIVERR);
|
|
}
|
|
|
|
SetTimerShowIFrame(15000);
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
g_Internet = INTERNET_YES;
|
|
}
|
|
|
|
}
|
|
|
|
IcsConnect(ICS_CONN_TYPE_REG);
|
|
SetTimerShowIFrame(ACTIVATION_TIMEOUT);
|
|
break;
|
|
|
|
case CKPT_ACT_MSG:
|
|
trace("GoNavigate: CKPT_ACT_MSG");
|
|
PushCKPT(ckptGoHere); // sets g_CurrentCKPT = ckptGoHere;
|
|
Navigate(URLFromCKPT(ckptGoHere));
|
|
SetTimerShowIFrame(5000);
|
|
break;
|
|
|
|
default:
|
|
trace("GoNavigate: default (" + ckptGoHere + " = " +
|
|
URLFromCKPT(ckptGoHere) + ")");
|
|
PushCKPT(ckptGoHere); // sets g_CurrentCKPT = ckptGoHere;
|
|
Navigate(URLFromCKPT(ckptGoHere));
|
|
SetTimerShowIFrame(1200);
|
|
break;
|
|
}
|
|
}
|
|
|
|
var g_ckpt_target = null;
|
|
var g_AfterConnectionDone = false;
|
|
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;
|
|
}
|
|
|
|
g_ckpt_target = ckptGoHere;
|
|
|
|
var L_GeneratingInstall_Text = "Generating new Installation ID...";
|
|
var L_RetrievingCountry_Text = "Retrieving Installation ID...";
|
|
var L_ValidatingConn_Text = "Verifying activation...";
|
|
|
|
|
|
if (ckptGoHere==CKPT_REGDIAL)
|
|
{
|
|
ShowIFrame('False', L_CheckConnectivity_Text);
|
|
Span_WPA_MainTitle.innerText = L_BlankTitle_Text;
|
|
}
|
|
else if (ckptGoHere==CKPT_ACTIVSVC)
|
|
{
|
|
if (g_ActivSvc_Reload)
|
|
{
|
|
if (g_Load_InstallID)
|
|
ShowIFrame('False', L_GeneratingInstall_Text);
|
|
else
|
|
ShowIFrame('False', L_RetrievingCountry_Text);
|
|
|
|
Span_WPA_MainTitle.innerText = L_BlankTitle_Text;
|
|
}
|
|
else
|
|
{
|
|
g_ActivSvc_Reload = true;
|
|
}
|
|
}
|
|
else if (ckptGoHere==CKPT_ACT_MSG)
|
|
{
|
|
if (g_AfterConnectionDone)
|
|
{
|
|
g_AfterConnectionDone = false;
|
|
ShowIFrame('False', L_ValidatingConn_Text);
|
|
Span_WPA_MainTitle.innerText = L_BlankTitle_Text;
|
|
}
|
|
else
|
|
ShowIFrame('False');
|
|
}
|
|
else
|
|
{
|
|
ShowIFrame('False');
|
|
}
|
|
|
|
window.setTimeout("ShowGoNavigate();",500);
|
|
}
|
|
|
|
function ExitWPA()
|
|
{
|
|
window.external.Finish();
|
|
}
|
|
|
|
// 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()
|
|
{
|
|
g.document.body.style.cursor="wait";
|
|
try
|
|
{
|
|
g.btnNext.className="buttons-disabled";
|
|
g.btnNext.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnBack.className="buttons-disabled";
|
|
g.btnBack.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnSkip.className="buttons-disabled";
|
|
g.btnSkip.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnProdkey.className="buttons-disabled";
|
|
g.btnProdkey.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnQuit.className="buttons-disabled";
|
|
g.btnQuit.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
try
|
|
{
|
|
g.btnTelephone.className="buttons-disabled";
|
|
g.btnTelephone.disabled=true;
|
|
}
|
|
catch(e) {}
|
|
|
|
}
|
|
|
|
function GoQuit()
|
|
{
|
|
trace("GoQuit: CurrentCKPT = " + g_CurrentCKPT);
|
|
|
|
// var L_strCloseWindow_Text ="Click OK to exit registration reminder.";
|
|
// if (confirm(L_strCloseWindow_Text))
|
|
DisableAllButtons();
|
|
window.external.Finish();
|
|
}
|
|
|
|
function GoNext()
|
|
{
|
|
trace("GoNext: CurrentCKPT = " + g_CurrentCKPT);
|
|
try
|
|
{
|
|
if (IsLocalFile() && g.event == null)
|
|
return;
|
|
}
|
|
catch(e)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DisableAllButtons();
|
|
|
|
switch (g_CurrentCKPT)
|
|
{
|
|
case CKPT_ACTIV:
|
|
if (g.rb_act_1.checked)
|
|
{
|
|
g_ActivationRadioSticky = 1;
|
|
g_DoActivation = true;
|
|
|
|
if (CheckForAnyConnection())
|
|
{
|
|
if (TapiObj.IsTapiServiceRunning())
|
|
{
|
|
GoNavigate(CKPT_REGISTER1);
|
|
}
|
|
else
|
|
{
|
|
GoNavigate(CKPT_REGDIAL);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
g_PostToMS = false;
|
|
GoNavigate(CKPT_ACTIVERR);
|
|
}
|
|
}
|
|
else if (g.rb_act_2.checked)
|
|
{
|
|
g_ActivationRadioSticky = 2;
|
|
g_DoActivation = false;
|
|
g_CameFromFirstPage = true;
|
|
GoNavigate(CKPT_ACTIVSVC);
|
|
}
|
|
else
|
|
{
|
|
g_ActivationRadioSticky = 3;
|
|
g_DoActivation = false;
|
|
ShowIFrame('False');
|
|
window.setTimeout("ExitWPA();",1000);
|
|
}
|
|
break;
|
|
|
|
case CKPT_REGISTER1:
|
|
if (g.rb_reg_1.checked)
|
|
{
|
|
g_Reg1RadioSticky = 1;
|
|
g_PostToMS = true;
|
|
GoNavigate(CKPT_REGISTER3);
|
|
}
|
|
else
|
|
{
|
|
g_Reg1RadioSticky = 2;
|
|
g_PostToMS = false;
|
|
GoNavigate(CKPT_REGDIAL);
|
|
}
|
|
break;
|
|
|
|
case CKPT_ACTIVERR:
|
|
GoNavigate(CKPT_ACTIVSVC);
|
|
break;
|
|
case CKPT_ACTIVSVC:
|
|
GoNavigate(CKPT_DONE);
|
|
break;
|
|
case CKPT_REGISTER3:
|
|
if(VerifyReg3Fields())
|
|
{
|
|
Reg3SaveSettings();
|
|
GoNavigate(CKPT_REGDIAL);
|
|
}
|
|
break;
|
|
case CKPT_ACTCONN:
|
|
if (g.rb_conn_lan.checked)
|
|
{
|
|
g_ActConnRadioSticky = 1;
|
|
GoNavigate(CKPT_ACTLAN);
|
|
}
|
|
else
|
|
{
|
|
g_ActConnRadioSticky = 2;
|
|
PushCKPT(CKPT_REGDIAL);
|
|
Navigate(URLFromCKPT(CKPT_REGDIAL));
|
|
}
|
|
break;
|
|
case CKPT_ACTLAN:
|
|
|
|
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))
|
|
);
|
|
|
|
ActLan();
|
|
break;
|
|
case CKPT_REGDIAL:
|
|
GoNavigate(CKPT_DONE);
|
|
break;
|
|
case CKPT_ACT_MSG:
|
|
if ( g_ActivationStatus != ERR_ACT_SUCCESS )
|
|
{
|
|
GoNavigate(CKPT_ACTIVSVC);
|
|
break;
|
|
}
|
|
// Fall through
|
|
case CKPT_DONE:
|
|
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");
|
|
g.document.body.style.backgroundColor = "transparent";
|
|
|
|
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) {}
|
|
|
|
window.setTimeout("EnableDefaultCursor();",500);
|
|
}
|
|
|
|
function EnableDefaultCursor()
|
|
{
|
|
g.document.body.style.cursor="default";
|
|
}
|
|
|
|
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';
|
|
WPAKey.src = 'images/wpakey.jpg';
|
|
WPATop.src = 'images/wpatop.jpg';
|
|
WPABottom.src = 'images/wpabtm.jpg';
|
|
WPAFlag.src = 'images/wpaflag.jpg';
|
|
|
|
WPABottom.style.top = WPAWindowHeight - 45;
|
|
WPAKey.style.left = WPAWindowWidth - 237;
|
|
WPAKey.style.top = WPAWindowHeight - 315;
|
|
|
|
}
|
|
|
|
function CheckForAnyConnection()
|
|
{
|
|
var Capabilities = GetConnectionCapabilities();
|
|
|
|
return (Capabilities != CONNECTIONTYPE_INVALID &&
|
|
Capabilities != CONNECTIONTYPE_NONE);
|
|
}
|
|
|
|
|
|
var g_fSIFTimer = false;
|
|
var g_iSIFTimerID;
|
|
function SetTimerShowIFrame(iMilliSeconds)
|
|
{
|
|
// This function is intended to wrap SetTimer calls to ShowIFrame
|
|
// so that we don't get multiple overlapping calls to Show the IFrame
|
|
if (g_fSIFTimer)
|
|
{
|
|
try
|
|
{
|
|
window.clearTimeout(g_iSIFTimerID);
|
|
}
|
|
catch(e) {}
|
|
g_fSIFTimer = false;
|
|
}
|
|
|
|
g_iSIFTimerID = window.setTimeout("ShowIFrame();", iMilliSeconds);
|
|
g_fSIFTimer = true;
|
|
}
|
|
|
|
var g_ShowTransition = false;
|
|
function ShowIFrame(ShowIt, loadingstatus)
|
|
{
|
|
// Kill an existing timers
|
|
if (g_fSIFTimer)
|
|
{
|
|
try
|
|
{
|
|
window.clearTimeout(g_iSIFTimerID);
|
|
}
|
|
catch(e) {}
|
|
g_fSIFTimer = false;
|
|
}
|
|
|
|
if (g_ShowTransition)
|
|
{
|
|
WPATransContainer.filters[0].Apply();
|
|
}
|
|
|
|
if (ShowIt == null)
|
|
{
|
|
// Show Iframe
|
|
WPA_DIV2.style.visibility="visible";
|
|
WPA_DIV1.style.visibility="hidden";
|
|
PageStatus.style.visibility="hidden";
|
|
WPAProgressbar.style.visibility = "hidden";
|
|
|
|
if (g_ShowTransition)
|
|
{
|
|
WPATransContainer.filters[0].Play();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Hide Iframe
|
|
WPA_DIV2.style.visibility="hidden";
|
|
WPA_DIV1.style.visibility="visible";
|
|
|
|
if (g_ShowTransition)
|
|
{
|
|
WPATransContainer.filters[0].Play();
|
|
}
|
|
|
|
// Show progress text...
|
|
if (loadingstatus!=null)
|
|
{
|
|
PageStatus.style.visibility="visible";
|
|
PageStatus.innerHTML=loadingstatus;
|
|
WPAProgressbar.style.visibility = "hidden"; // lets hide this for now...
|
|
}
|
|
else
|
|
{
|
|
PageStatus.style.visibility="hidden";
|
|
WPAProgressbar.style.visibility = "hidden";
|
|
}
|
|
}
|
|
}
|
|
|
|
window.onresize = SetupPageLayout;
|
|
var g_Already_Activated;
|
|
function InitApplication()
|
|
{
|
|
|
|
// Make sure all the services have started up
|
|
window.external.ComputerNameChangeComplete(false);
|
|
WPATransContainer.style.display="inline";
|
|
|
|
try
|
|
{
|
|
g_Already_Activated = window.external.NeedActivation();
|
|
}
|
|
catch(e)
|
|
{
|
|
g_Already_Activated = 999;
|
|
}
|
|
|
|
// 0 means activation is not needed or has already occurred.
|
|
|
|
|
|
if (g_Already_Activated == 0)
|
|
{
|
|
// If we're here, Windows is already activated and all we need is to show CKPT_ACTDONE.
|
|
SetupPageLayout();
|
|
InitFrameRef();
|
|
g_status = STATUS_OFF;
|
|
g_DoActivation = false;
|
|
InitCKPT();
|
|
if (0 != DirObj.get_AppMode)
|
|
{
|
|
do
|
|
{
|
|
PopCKPT();
|
|
}
|
|
while (null != g_CurrentCKPT);
|
|
}
|
|
GoNavigate(CKPT_ACTDONE);
|
|
SetTimerShowIFrame(900);
|
|
}
|
|
else if (g_Already_Activated == 999)
|
|
{
|
|
window.external.Finish();
|
|
}
|
|
else
|
|
{
|
|
SetupPageLayout();
|
|
g_bStartup = true;
|
|
InitFrameRef();
|
|
GetConnectionCapabilities();
|
|
g_status = STATUS_OFF;
|
|
g_DoActivation = true;
|
|
CheckForAnyConnection();
|
|
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_ACTIV);
|
|
SetTimerShowIFrame(900);
|
|
}
|
|
}
|
|
|
|
function loadTransitionFilter()
|
|
{
|
|
document.all.WPATransContainer.style.display = "none";
|
|
document.all.WPATransContainer.style.position = "absolute";
|
|
document.all.WPATransContainer.style.top = 0;
|
|
document.all.WPATransContainer.style.left = 0;
|
|
document.all.WPATransContainer.style.width = "100%";
|
|
document.all.WPATransContainer.style.height = "100%";
|
|
|
|
if ((window.screen.colordepth >= 16) && window.external.UseFadeEffect())
|
|
{
|
|
document.all.WPATransContainer.style.filter = "progid:DXImageTransform.Microsoft.Fade(duration=0.2,overlap=0.8)";
|
|
|
|
try
|
|
{
|
|
if (WPATransContainer.filters[0])
|
|
{
|
|
g_ShowTransition = true;
|
|
}
|
|
}
|
|
catch(e)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
</script>
|
|
|
|
</HEAD>
|
|
|
|
<BODY topMargin=0 bgcolor="#4E6FD6" leftMargin=0 onload="loadTransitionFilter();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=WPAKey style="LEFT: 0px; TOP: 0px; POSITION: absolute; z-index:-98;" 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="WPATransContainer">
|
|
|
|
<!-- First Content (by design, don't remove) -->
|
|
<span ID="WPA_DIV1" STYLE="POSITION: absolute; left:0; top:0; width=100%; height=100%; background-Color: transparent;">
|
|
<table border=0 width="100%" height="100%" class="text-primary">
|
|
<tr>
|
|
<td valign=middle align=center>
|
|
<span id=PageStatus></span>
|
|
<br>
|
|
<span id=WPAProgressbar style="visibility:hidden;"><img src="images/progress.gif"></span>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</span>
|
|
|
|
<!-- Actual Content -->
|
|
<span id="WPA_DIV2" style="visibility: hidden; 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>
|
|
|