////////////////////////////////////////////////////////////////////////////////
// Page Handler Library
////////////////////////////////////////////////////////////////////////////////

// <script language="javascript">
// Copyright (c) Home Automation, Inc. All rights reserved.          
// Copyright (c) HomeRun Software Systems LLC. All rights reserved.

////////////////////////////////////////////////////////////////////////////////
// Globals
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Page Initialiation Routines
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Welcome: Welcome page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Welcome()
{
	// Initialize Horizontal Menu
	HM_Init();
	AIButtonNew("HM_ScrollLeft");
	AIButtonNew("HM_ScrollRight");
	
	// Create focus table array
	g_aryFocusTable = new Array();
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, Item, Enabled, DeferTo
	
	for (var x=0; x<spnHorizMenu.length; x++)
	{
		// Handle first item in the list
		if (x == 0)
			g_aryFocusTable[x] = new Array(-1,-1,-1,1,"'HM_Select(spnHorizMenu[" + x + "]);'","","'spnHorizMenu[" + x + "].onclick();'");
		else if ( x == (spnHorizMenu.length-1) )
			g_aryFocusTable[x] = new Array(-1,-1,x-1,-1,"'HM_Select(spnHorizMenu[" + x + "]);'","","'spnHorizMenu[" + x + "].onclick();'");
		else
			g_aryFocusTable[x] = new Array(-1,-1,x-1,x+1,"'HM_Select(spnHorizMenu[" + x + "]);'","","'spnHorizMenu[" + x + "].onclick();'");
		
		// If the viewport is visible then account for it in focus table
		if ( IsViewportVisible() )
		{
			g_aryFocusTable[x][1] = spnHorizMenu.length;
		}
	}
	
	// If the viewport is visible then add it to the focus table array
	if ( IsViewportVisible() )
	{
		g_aryFocusTable[spnHorizMenu.length] = new Array(0,-1,-1,-1,"'window.external.MediaCenter.SharedViewPort.Focus()'","","");
	}
	
	// Center menu vertically
	var iPageTitleHeight = 100;
	var iPageOffset      = iPageTitleHeight/2;
	var iPageHeight = document.body.clientHeight - iPageTitleHeight; // 668 @ 1024x768, 500 @ 800x600
	
	// Adjust for scale
	if (g_PageZoom < 1)
		iPageHeight = 768 - iPageTitleHeight;
		
	var iViewportHeight   = 210;
	var iBodyClientHeight = tblBody.clientHeight;	// 435 @ 1024x768, 339@800x600

	if ( IsViewportVisible() ) 
	{
		var iPageElementSize = iPageTitleHeight + iBodyClientHeight + iViewportHeight;
		var iFreeMargin      = 768 - iPageElementSize;
		
		iPageOffset = iFreeMargin/2;

	}
	
	tblBody.style.marginTop = ((iPageHeight - iBodyClientHeight)/2) + iPageOffset;
	var iAdjustment = parseInt(tblBody.style.marginTop.substr(0,tblBody.style.marginTop.indexOf("px"))) - (131);
	
	spnHorizMenuItems.style.top = iAdjustment;
	spnScrollLeft.style.top  = ((iPageHeight - (spnScrollLeft.clientHeight  ))/2) + iPageOffset;
	spnScrollRight.style.top = ((iPageHeight - (spnScrollRight.clientHeight ))/2) + iPageOffset;

	// Align logo to right
	if (g_PageZoom == 1)
		spnPageLogo.style.left = document.body.clientWidth - spnPageLogo.clientWidth - 10;
	else
		spnPageLogo.style.left = 1024 - (spnPageLogo.clientWidth);

	// Set the default focus
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Home: Home page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Home()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");
	
	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, Item, Enabled, DeferTo
	g_aryFocusTable = new Array(
		new Array(-1,1, 7,6,"'AIButtonSelect(spnControl, 'NavBtn')'","'AIButtonDeselect(spnControl, 'NavBtn')'","'ShowPage(1)'",spnControl,1,-1),						// Control
		new Array(0,2, 7,6,"'AIButtonSelect(spnSecurity, 'NavBtn')'","'AIButtonDeselect(spnSecurity, 'NavBtn')'","'ShowPage(2)'",spnSecurity,1,-1),						// Security
		new Array(1,3, 7,6,"'AIButtonSelect(spnTemperature, 'NavBtn')'","'AIButtonDeselect(spnTemperature, 'NavBtn')'","'ShowPage(3)'",spnTemperature,1,-1),				// Temperature
		new Array(2,4, 7,6,"'AIButtonSelect(spnButton, 'NavBtn')'","'AIButtonDeselect(spnButton, 'NavBtn')'","'ShowPage(4)'",spnButton,1,-1),							// Buttons
		new Array(3,5, 7,6,"'AIButtonSelect(spnEvent, 'NavBtn')'","'AIButtonDeselect(spnEvent, 'NavBtn')'","'ShowPage(5)'",spnEvent,1,-1),								// Events
		new Array(4,-1, 7,6,"'AIButtonSelect(spnSettings, 'NavBtn')'","'AIButtonDeselect(spnSettings, 'NavBtn')'","'ShowPage(90)'",spnSettings,1,-1),					// Settings
		new Array(-1,-1,0,7,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp,0,7),			// Scroll Up
		new Array(-1,-1,6,0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown,1,6)	// Scroll Down
	);
	
	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 20, true);
	
	// Prevent navigation to hidden controls
	if (spnVMScrollButtons.style.display == "none")
	{
		for (x = 0; x<6; x++)
		{
			g_aryFocusTable[x][2] = -1;
			g_aryFocusTable[x][3] = -1;
		}
	}
	
	// Set default button state
	AIButtonSelect(spnControl, 'NavBtn');
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Control: Control	 page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Control()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtnStateSel");
	AIButtonNew("NavBtnStateDesel");
	AIButtonNew("NavBtn");
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 1,6,6,"'AIButtonSelect(spnUnitsBtn, 'NavBtnStateSel')'","'AIButtonDeselect(spnUnitsBtn, 'NavBtnStateSel')'","'RefreshCurrentPage()'",spnUnitsBtn),				// Units
		new Array(0 , 2,6,6,"'AIButtonSelect(spnOutputsBtn, 'NavBtnStateDesel')'","'AIButtonDeselect(spnOutputsBtn, 'NavBtnStateDesel')'","'ShowPage(12)'",spnOutputsBtn),	// Outputs
		new Array(1 , 3,6,6,"'AIButtonSelect(spnAllOnBtn, 'NavBtn')'","'AIButtonDeselect(spnAllOnBtn, 'NavBtn')'","'spnAllOnBtn.onclick()'",spnAllOnBtn),								// All On
		new Array(2 ,-1,6,6,"'AIButtonSelect(spnAllOffBtn, 'NavBtn')'","'AIButtonDeselect(spnAllOffBtn, 'NavBtn')'","'spnAllOffBtn.onclick()'",spnAllOffBtn),							// All Off
		new Array(-1,-1,0,5,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),					// Scroll Up
		new Array(-1,-1,4,0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown),			// Scroll Down
		new Array(6,6,0,0,  "'g_VM_VerticalMenu.SelectRowRemote()'","'g_VM_VerticalMenu.DeselectRow()'","'g_VM_VerticalMenu.ChooseRow(11)'",spnVertMenu)	// Vertical Menu
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, true);
	
	// Set the default focus
	g_VM_VerticalMenu.SelectRowRemote(0);
	g_CurrentFocus = 6;
	
	// Reset the active control to null so we don't select a default button any more
	g_iSetActiveControl = null;
	
	// If No lights exist then alter the focus table
	try
	{
		if (spnVMItem.ItemID == -1)
		{
			// Prevent navigating Left/Right
			for (x=0; x<g_aryFocusTable.length; x++)
			{
				g_aryFocusTable[x][2] = -1;
				g_aryFocusTable[x][3] = -1;
			}
			
			g_aryFocusTable[6][6]="";
			
			// Set the default focus
			AIButtonSelect(spnUnitsBtn, 'NavBtnStateSel');
			g_CurrentFocus = 0;
		}
	}
	catch (oError)
	{
	}
	
	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Control_Outputs: Control	Outputs page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Control_Outputs()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtnStateSel");
	AIButtonNew("NavBtnStateDesel");
	AIButtonNew("NavBtn");
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 1,6,6,"'AIButtonSelect(spnUnitsBtn, 'NavBtnStateDesel')'","'AIButtonDeselect(spnUnitsBtn, 'NavBtnStateDesel')'","'ShowPage(1)'",spnUnitsBtn),		// Units
		new Array(0 , 2,6,6,"'AIButtonSelect(spnOutputsBtn, 'NavBtnStateSel')'","'AIButtonDeselect(spnOutputsBtn, 'NavBtnStateSel')'","'RefreshCurrentPage()'",spnOutputsBtn),	// Outputs
		new Array(1 , 3,6,6,"'AIButtonSelect(spnAllOnBtn, 'NavBtn')'","'AIButtonDeselect(spnAllOnBtn, 'NavBtn')'","'CMD_Control(control_all_on)'",spnAllOnBtn),			// All On
		new Array(2 ,-1,6,6,"'AIButtonSelect(spnAllOffBtn, 'NavBtn')'","'AIButtonDeselect(spnAllOffBtn, 'NavBtn')'","'CMD_Control(control_all_off)'",spnAllOffBtn),		// All Off
		new Array(-1,-1,0,5,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),				// Scroll Up
		new Array(-1,-1,4,0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown),		// Scroll Down
		new Array(6,6,0,0,  "'g_VM_VerticalMenu.SelectRowRemote()'","'g_VM_VerticalMenu.DeselectRow()'","'g_VM_VerticalMenu.ChooseRow(13)'",spnVertMenu)	// Vertical Menu
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, true);

	// Set the default focus
	g_VM_VerticalMenu.SelectRowRemote(0);
	g_CurrentFocus = 6;

	// If No outputs exist then alter the focus table
	try
	{
		if (spnVMItem.ItemID == -1)
		{
			// Prevent navigating Left/Right
			for (x=0; x<g_aryFocusTable.length; x++)
			{
				g_aryFocusTable[x][2] = -1;
				g_aryFocusTable[x][3] = -1;
			}
			
			g_aryFocusTable[6][6]="";
			
			// Set the default focus
			AIButtonSelect(spnUnitsBtn, 'NavBtnStateSel');
			g_CurrentFocus = 0;
		}
	}
	catch (oError)
	{
	}

	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Control_Command: Control Lights Command page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Control_Command()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");
	AIButtonNew("WizardBtn");
	AIButtonNew("ExpandBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Get unit ID
	var nodeResult = oXMLDoc.selectSingleNode("UNIT/ID");
	var iID = nodeResult.childNodes(0).text - 0;

	// Create focus table array
	//	   Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 1,-1,-1,"'AIButtonSelect(spnBtnOn, 'NavBtn');g_EM_ExpandMenu.Collapse();'","'AIButtonDeselect(spnBtnOn, 'NavBtn')'" ,"'CMD_Control(control_on ," + iID + ",0,0);RefreshCurrentPage()'",spnBtnOn),							// On	
		new Array( 0, 2,-1,-1,"'AIButtonSelect(spnBtnOff, 'NavBtn');g_EM_ExpandMenu.Collapse();'","'AIButtonDeselect(spnBtnOff, 'NavBtn')'","'CMD_Control(control_off," + iID + ",0,0);RefreshCurrentPage()'",spnBtnOff),							// Off	
		new Array( 1, 3,-1,-1,"'AIButtonSelect(spnBtnDim, 'NavBtn');g_EM_ExpandMenu.Collapse();'","'AIButtonDeselect(spnBtnDim, 'NavBtn')'","'CMD_Control(control_dim," + iID + ",1,0);g_iSetActiveControl=2;RefreshCurrentPage()'",spnBtnDim),						// Dim	
		new Array( 2, 4,-1,-1,"'AIButtonSelect(spnBtnBrighten, 'NavBtn');g_EM_ExpandMenu.Collapse();'","'AIButtonDeselect(spnBtnBrighten, 'NavBtn')'","'CMD_Control(control_bright," + iID + ",1,0);g_iSetActiveControl=3;RefreshCurrentPage()'",spnBtnBrighten),	// Brighten	
		new Array( 4, 4, 3,-1,"'AIButtonSelect(spnBtnMenu, 'ExpandBtn');g_EM_ExpandMenu.SelectItemRemote(0)'","'AIButtonDeselect(spnBtnMenu, 'ExpandBtn');g_EM_ExpandMenu.DeselectItem()'","'g_EM_ExpandMenu.ChooseItem()'",spnBtnMenu)	// Scene/Level	
	);

	// Create & Populate Expansion Menu
	g_EM_ExpandMenu = new ExpansionList();
	//g_EM_ExpandMenu.style.top = spnBtnMenu.style.top;
	
	var nodeResult = oXMLDoc.selectSingleNode("UNIT/FORMAT");
	var iFormat = nodeResult.childNodes(0).text - 0;

	if (iFormat == 1)
	{
		g_EM_ExpandMenu.Add("25%","CMD_Control(control_level," + iID + ",25,0)");
		g_EM_ExpandMenu.Add("50%","CMD_Control(control_level," + iID + ",50,0)");
		g_EM_ExpandMenu.Add("75%","CMD_Control(control_level," + iID + ",75,0)");
		g_EM_ExpandMenu.Add("100%","CMD_Control(control_level," + iID + ",100,0)");
	}
	else
	{
		g_EM_ExpandMenu.Add("A","CMD_Control(control_scene," + iID + ",2,0)");
		g_EM_ExpandMenu.Add("B","CMD_Control(control_scene," + iID + ",3,0)");
		g_EM_ExpandMenu.Add("C","CMD_Control(control_scene," + iID + ",4,0)");
		g_EM_ExpandMenu.Add("D","CMD_Control(control_scene," + iID + ",5,0)");
	}

	g_EM_ExpandMenu.Initialize();		// Initialize Menu
	
	// Set the default focus
	try
	{
		// Override smart focus if Dim or Brighten override it
		if (null != g_iSetActiveControl)
		{
			if (g_iSetActiveControl == 2)
				AIButtonSelect(spnBtnDim, 'NavBtn');
			else
				AIButtonSelect(spnBtnBrighten, 'NavBtn');
			
			g_CurrentFocus = g_iSetActiveControl;	
		}
		else
		{
			// Get the current status of the item
			var nodeResult = oXMLDoc.selectSingleNode("UNIT/STATUS");

			var iStatus = nodeResult.childNodes(0).text - 0;

			if (iStatus == 0)
			{
				AIButtonSelect(spnBtnOn, 'NavBtn');
				g_CurrentFocus = 0;
			}
			else
			{
				AIButtonSelect(spnBtnOff, 'NavBtn');
				g_CurrentFocus = 1;
			}
		}
	}
	catch(oError)
	{
	}
	
	// If screen resolution is zoomed then swap PNG for GIF
	if (g_PageZoom < 1)
	{
		spnWatermark.style.display = "none";
		spnWatermarkGIF.style.display = "block";
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Control_Command_Aplnc: Control Appliance Command page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Control_Command_Aplnc()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Get the ID of the item
	var nodeResult = oXMLDoc.selectSingleNode("UNIT/ID");
	var iID = nodeResult.childNodes(0).text - 0;

	// Create focus table array
	//	   Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1,1,-1,-1,"'AIButtonSelect(spnBtnOn, 'NavBtn')'","'AIButtonDeselect(spnBtnOn, 'NavBtn')'" ,"'CMD_Control(control_on ," + iID + ",0,0);RefreshCurrentPage()'",spnBtnOn),	// On	
		new Array(0,-1,-1,-1,"'AIButtonSelect(spnBtnOff, 'NavBtn')'","'AIButtonDeselect(spnBtnOff, 'NavBtn')'","'CMD_Control(control_off," + iID + ",0,0);RefreshCurrentPage()'",spnBtnOff)	// Off	
	);

	// Set the default focus
	try
	{
		// Get the current status of the item
		var nodeResult = oXMLDoc.selectSingleNode("UNIT/STATUS");

		var iStatus = nodeResult.childNodes(0).text - 0;

		if (iStatus == 0)
		{
			AIButtonSelect(spnBtnOn, 'NavBtn');
			g_CurrentFocus = 0;
		}
		else
		{
			AIButtonSelect(spnBtnOff, 'NavBtn');
			g_CurrentFocus = 1;
		}
		
	}
	catch(oError)
	{
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Security: Security page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Security()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 1,-1, 2,"'AIButtonSelect(spnArmAllBtn, 'NavBtn')'","'AIButtonDeselect(spnArmAllBtn, 'NavBtn')'","'CMD_Security(120,0,null,null,0);RefreshCurrentPage()'",spnArmAllBtn),			// Arm All
		new Array( 0,-1,-1, 2,"'AIButtonSelect(spnDisarmAllBtn, 'NavBtn')'","'AIButtonDeselect(spnDisarmAllBtn, 'NavBtn')'","'CMD_Security(121,0,null,null,0);RefreshCurrentPage()'",spnDisarmAllBtn),	// Disarm All
		new Array( 2, 2, 0,-1,  "'g_VM_VerticalMenu.SelectRowRemote()'","'g_VM_VerticalMenu.DeselectRow()'","'g_VM_VerticalMenu.ChooseRow(21)'",spnVertMenu),											// Vertical Menu
		new Array( 2,-1,-1, 4,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),								// Scroll Up
		new Array( 2,-1, 3,-1,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown)						// Scroll Down
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, true);

	// Set the default focus
	g_VM_VerticalMenu.SelectRowRemote(0);
	g_CurrentFocus = 2;
	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Security_Zones: Security Zones (all zones) page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Security_Zones()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Get the ID of the item
	var nodeResult = oXMLDoc.selectSingleNode("ZONES/AREA/ID");
	var iID = nodeResult.childNodes(0).text - 0;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 1,6,5,"'AIButtonSelect(spnDisarm, 'NavBtn')'","'AIButtonDeselect(spnDisarm, 'NavBtn')'","'CMD_Security(61," + iID + ",null,null,0)'",spnDisarm),				// Scroll Down
		new Array( 0, 2,6,5,"'AIButtonSelect(spnArmAway, 'NavBtn')'","'AIButtonDeselect(spnArmAway, 'NavBtn')'","'CMD_Security(63," + iID + ",null,null,0)'",spnArmAway),						// Units
		new Array( 1, 3,6,5,"'AIButtonSelect(spnArmDay, 'NavBtn')'","'AIButtonDeselect(spnArmDay, 'NavBtn')'","'CMD_Security(60," + iID + ",null,null,0)'",spnArmDay),						// Units
		new Array( 2, 4,6,5,"'AIButtonSelect(spnArmNight, 'NavBtn')'","'AIButtonDeselect(spnArmNight, 'NavBtn')'","'CMD_Security(62," + iID + ",null,null,0)'",spnArmNight),		// Scroll Up
		new Array( 3,-1,6,5,"'AIButtonSelect(spnRestoreAll, 'NavBtn')'","'AIButtonDeselect(spnRestoreAll, 'NavBtn')'","'CMD_Security(69," + iID + ",null,null,0)'",spnRestoreAll),				// Scroll Down
		new Array( 4,-1,0,6,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),					// Scroll Up
		new Array( 4,-1,5,0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown)			// Scroll Down
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, true);

	// Set the default focus
	AIButtonSelect(spnScrollDown, 'VMScrollDown');
	g_CurrentFocus = 6;
	
	// If No zones exist then alter the focus table
	try
	{
		if (spnVMItem.ItemID == -1)
		{
			// Prevent navigating Left/Right
			for (x=0; x<g_aryFocusTable.length; x++)
			{
				g_aryFocusTable[x][2] = -1;
				g_aryFocusTable[x][3] = -1;
			}

			// Set the default focus
			AIButtonSelect(spnDisarm, 'NavBtn');
			g_CurrentFocus = 0;		
		}
	}
	catch (oError)
	{
	}
	
	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Security_Zones: Security Zone initialization.
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Security_Zone()
{
	// Create focus table array
	g_aryFocusTable = new Array();
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Login: Login page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Login()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");
	g_CurrentFocus = 0;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 1,-1,-1,"'pwCode.focus()'","'pwCode.blur()'","'NoOp()'",pwCode),		// Password Input
		new Array( 0, -1,-1,-1,"'AIButtonSelect(spnLoginButton, 'NavBtn')'","'AIButtonDeselect(spnLoginButton, 'NavBtn')'","'spnLoginButton.click()'",spnLoginButton)		// Login Button
	);
	
 	// Set the default focus
 	//AIButtonSelect(spnLoginButton, 'NavBtn')
 	pwCode.focus();
 	pwCode.select();
	g_CurrentFocus = 0;
 	
	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_No_Controller: 'No Controller' page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_No_Controller()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");
	g_CurrentFocus = 0;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1,-1, 1, 1,"'AIButtonSelect(spnRetry, 'NavBtn')'","'AIButtonDeselect(spnRetry, 'NavBtn')'","'spnRetry.onclick()'",spnRetry,1,-1),	// Retry
		new Array(-1,-1, 0, 0,"'AIButtonSelect(spnDemo, 'NavBtn')'","'AIButtonDeselect(spnDemo, 'NavBtn')'","'spnDemo.onclick()'",spnDemo,1,-1)			// Help
	);

 	// Set the default focus
 	AIButtonSelect(spnRetry, 'NavBtn')
	g_CurrentFocus = 0;

	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Help: Help page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Help()
{
	g_CurrentFocus = 0;

	// Create focus table array
	g_aryFocusTable = new Array();

	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Login: Handle Login when login executed by remote/keybd
////////////////////////////////////////////////////////////////////////////////
function PG_Login
(
	iCmd,
	iID,
	iItemType
)
{
	CMD_Security(	iCmd,
					iID,
					null,
					pwCode.value,
					iItemType);
	ShowPreviousPage()

}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Temperature: Welcome page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Temperature()
{
	// Load navigation buttons into memory
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1,-1,0,1,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),					// Scroll Up
		new Array(-1,-1,0,0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown),			// Scroll Down
		new Array( 2, 2,-1,-1,  "'g_VM_VerticalMenu.SelectRowRemote()'","'g_VM_VerticalMenu.DeselectRow()'","'g_VM_VerticalMenu.ChooseRow()'",spnVertMenu)	// Vertical Menu
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, false);

	// Initialize Vertical Menu
	g_VM_HorizResize = false;
	
	// Set the default focus
	g_VM_VerticalMenu.SelectRowRemote(0);
	g_CurrentFocus = 2;

	// If No temperature devices exist then alter the focus table
	try
	{
		if (spnVMItem.ItemID == -1)
		{
			// Prevent navigating Left/Right
			for (x=0; x<g_aryFocusTable.length; x++)
			{
				g_aryFocusTable[x][2] = -1;
				g_aryFocusTable[x][3] = -1;
			}
			
			g_aryFocusTable[2][6]="";
			
		}
	}
	catch (oError)
	{
	}

	return;

}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Temp_PESM: PESM Temperature page initialization.
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Temp_PESM()
{
	// Load navigation buttons into memory
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");
	AIButtonNew("WizardBtn");

	// Get the command information
	var nodeResult = oXMLDoc.selectSingleNode("TEMPERATURESENSOR/ID");
	var iID = nodeResult.childNodes(0).text - 0;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDownLow, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownLow, 'Spinner_Minus')'","'spnLowSetting.innerText=parseInt(spnLowSetting.innerText) - 1'",spnSpinDownLow),						// Low Minus Spinner
		new Array(-1, 4, 0, 2,"'AIButtonSelect(spnSpinUpLow, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpLow, 'Spinner_Plus')'","'spnLowSetting.innerText=parseInt(spnLowSetting.innerText) + 1'",spnSpinUpLow),								// Low Plus Spinner
		new Array(-1, 5, 1,-1,"'AIButtonSelect(spnLowSet, 'WizardBtn')'","'AIButtonDeselect(spnLowSet, 'WizardBtn')'","'if(CMD_Temperature(temperature_setpoint_low," + iID + ",spnLowSetting.innerText,0)) RefreshCurrentPage()'",spnLowSet),	// Low Set
		new Array( 0, 6,-1, 4,"'AIButtonSelect(spnSpinDownHigh, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownHigh, 'Spinner_Minus')'","'spnHighSetting.innerText=parseInt(spnHighSetting.innerText) - 1'",spnSpinDownHigh),					// High Minus Spinner
		new Array( 1, 6, 3, 5,"'AIButtonSelect(spnSpinUpHigh, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpHigh, 'Spinner_Plus')'","'spnHighSetting.innerText=parseInt(spnHighSetting.innerText) + 1'",spnSpinUpHigh),							// High Plus Spinner
		new Array( 2, 6, 4,-1,"'AIButtonSelect(spnHighSet, 'WizardBtn')'","'AIButtonDeselect(spnHighSet, 'WizardBtn')'","'if(CMD_Temperature(temperature_setpoint_high," + iID + ",spnHighSetting.innerText,0)) RefreshCurrentPage()'",spnHighSet),	// High Set
		new Array( 5,-1,-1,-1,"'AIButtonSelect(spnModeSet, 'WizardBtn')'","'AIButtonDeselect(spnModeSet, 'WizardBtn')'","'spnModeSet.onclick()'",spnModeSet)					// Mode Set
	);
	
	// Set default focus
	AIButtonSelect(spnSpinDownLow, 'Spinner_Minus');
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Temp_TempSensor: Temperature sensor page initialization.
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Temp_TempSensor()
{
	// Load navigation buttons into memory
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");
	AIButtonNew("WizardBtn");

	// Get the command information
	var nodeResult = oXMLDoc.selectSingleNode("TEMPERATURESENSOR/ID");
	var iID = nodeResult.childNodes(0).text - 0;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDownLow, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownLow, 'Spinner_Minus')'","'spnLowSetting.innerText=parseInt(spnLowSetting.innerText) - 1'",spnSpinDownLow),	// Heat Minus Spinner
		new Array(-1, 4, 0, 2,"'AIButtonSelect(spnSpinUpLow, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpLow, 'Spinner_Plus')'","'spnLowSetting.innerText=parseInt(spnLowSetting.innerText) + 1'",spnSpinUpLow),			// Heat Plus Spinner
		new Array(-1, 5, 1,-1,"'AIButtonSelect(spnLowSet, 'WizardBtn')'","'AIButtonDeselect(spnLowSet, 'WizardBtn')'","'if(CMD_Temperature(temperature_setpoint_low," + iID + ",spnLowSetting.innerText,0)) RefreshCurrentPage()'",spnLowSet),	// Heat Set
		new Array( 0,-1,-1, 4,"'AIButtonSelect(spnSpinDownHigh, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownHigh, 'Spinner_Minus')'","'spnHighSetting.innerText=parseInt(spnHighSetting.innerText) - 1'",spnSpinDownHigh),	// Cool Minus Spinner
		new Array( 1,-1, 3, 5,"'AIButtonSelect(spnSpinUpHigh, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpHigh, 'Spinner_Plus')'","'spnHighSetting.innerText=parseInt(spnHighSetting.innerText) + 1'",spnSpinUpHigh),			// Cool Plus Spinner
		new Array( 2,-1, 4,-1,"'AIButtonSelect(spnHighSet, 'WizardBtn')'","'AIButtonDeselect(spnHighSet, 'WizardBtn')'","'if(CMD_Temperature(temperature_setpoint_high," + iID + ",spnHighSetting.innerText,0)) RefreshCurrentPage()'",spnHighSet)	// Cool Set
	);
	
	// Set default focus
	AIButtonSelect(spnSpinDownLow, 'Spinner_Minus');
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Temp_Humidity: Humidity sensor page initialization.
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Temp_Humidity()
{
	// Load navigation buttons into memory
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");
	AIButtonNew("WizardBtn");

	// Get the command information
	var nodeResult = oXMLDoc.selectSingleNode("TEMPERATURESENSOR/ID");
	var iID = nodeResult.childNodes(0).text - 0;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDownLow, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownLow, 'Spinner_Minus')'","'spnLowSetting.innerText=parseInt(spnLowSetting.innerText) - 1'",spnSpinDownLow),	// Heat Minus Spinner
		new Array(-1, 4, 0, 2,"'AIButtonSelect(spnSpinUpLow, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpLow, 'Spinner_Plus')'","'spnLowSetting.innerText=parseInt(spnLowSetting.innerText) + 1'",spnSpinUpLow),			// Heat Plus Spinner
		new Array(-1, 5, 1,-1,"'AIButtonSelect(spnLowSet, 'WizardBtn')'","'AIButtonDeselect(spnLowSet, 'WizardBtn')'","'if(CMD_Temperature(temperature_setpoint_low," + iID + ",spnLowSetting.innerText,0)) RefreshCurrentPage()'",spnLowSet),	// Heat Set
		new Array( 0,-1,-1, 4,"'AIButtonSelect(spnSpinDownHigh, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownHigh, 'Spinner_Minus')'","'spnHighSetting.innerText=parseInt(spnHighSetting.innerText) - 1'",spnSpinDownHigh),	// Cool Minus Spinner
		new Array( 1,-1, 3, 5,"'AIButtonSelect(spnSpinUpHigh, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpHigh, 'Spinner_Plus')'","'spnHighSetting.innerText=parseInt(spnHighSetting.innerText) + 1'",spnSpinUpHigh),			// Cool Plus Spinner
		new Array( 2,-1, 4,-1,"'AIButtonSelect(spnHighSet, 'WizardBtn')'","'AIButtonDeselect(spnHighSet, 'WizardBtn')'","'if(CMD_Temperature(temperature_setpoint_high," + iID + ",spnHighSetting.innerText,0)) RefreshCurrentPage()'",spnHighSet)	// Cool Set
	);
	
	// Set default focus
	AIButtonSelect(spnSpinDownLow, 'Spinner_Minus');
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Temp_Thermostat: Thermostat page initialization.
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Temp_Thermostat()
{
	// Load navigation buttons into memory
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");
	AIButtonNew("WizardBtn");

	// Get the command information
	var nodeResult = oXMLDoc.selectSingleNode("THERMOSTAT/SYSTEMMODE");
	var iSystemMode = nodeResult.childNodes(0).text - 0;	
	nodeResult = oXMLDoc.selectSingleNode("THERMOSTAT/ID");
	var iID = nodeResult.childNodes(0).text - 0;
	
	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDownHeat, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownHeat, 'Spinner_Minus')'","'spnHeatSetting.innerText=parseInt(spnHeatSetting.innerText) - 1'",spnSpinDownHeat),	// Heat Minus Spinner
		new Array(-1, 4, 0, 2,"'AIButtonSelect(spnSpinUpHeat, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpHeat, 'Spinner_Plus')'","'spnHeatSetting.innerText=parseInt(spnHeatSetting.innerText) + 1'",spnSpinUpHeat),			// Heat Plus Spinner
		new Array(-1, 5, 1,-1,"'AIButtonSelect(spnHeatSet, 'WizardBtn')'","'AIButtonDeselect(spnHeatSet, 'WizardBtn')'","'if(CMD_Temperature(temperature_setpoint_heat," + iID + ",spnHeatSetting.innerText,temperature_heat)) RefreshCurrentPage()'",spnHeatSet),	// Heat Set
		new Array( 0, 6,-1, 4,"'AIButtonSelect(spnSpinDownCool, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownCool, 'Spinner_Minus')'","'spnCoolSetting.innerText=parseInt(spnCoolSetting.innerText) - 1'",spnSpinDownCool),	// Cool Minus Spinner
		new Array( 1, 7, 3, 5,"'AIButtonSelect(spnSpinUpCool, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpCool, 'Spinner_Plus')'","'spnCoolSetting.innerText=parseInt(spnCoolSetting.innerText) + 1'",spnSpinUpCool),			// Cool Plus Spinner
		new Array( 2, 8, 4,-1,"'AIButtonSelect(spnCoolSet, 'WizardBtn')'","'AIButtonDeselect(spnCoolSet, 'WizardBtn')'","'if(CMD_Temperature(temperature_setpoint_cool," + iID + ",spnCoolSetting.innerText,temperature_cool)) RefreshCurrentPage()'",spnCoolSet),	// Cool Set
		new Array( 3, 9,-1, 7,"'AIButtonSelect(spnSpinDownSysMode, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownSysMode, 'Spinner_Minus')'","'g_oSpinner.SpinDown()'",spnSpinDownSysMode),	// System Mode Minus Spinner
		new Array( 4, 9, 6, 8,"'AIButtonSelect(spnSpinUpSysMode, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpSysMode, 'Spinner_Plus')'","'g_oSpinner.SpinUp()'",spnSpinUpSysMode),			// System Mode Plus Spinner
		new Array( 5, 9, 7,-1,"'AIButtonSelect(spnSysModeSet, 'WizardBtn')'","'AIButtonDeselect(spnSysModeSet, 'WizardBtn')'","'spnSysModeSet.onclick()'",spnSysModeSet),						// System Mode Set
		new Array( 8,10,-1,-1,"'AIButtonSelect(spnFanModeSet, 'WizardBtn')'","'AIButtonDeselect(spnFanModeSet, 'WizardBtn')'","'spnFanModeSet.onclick()'",spnFanModeSet),						// Fan Mode Set
		new Array( 9,-1,-1,-1,"'AIButtonSelect(spnHoldModeSet, 'WizardBtn')'","'AIButtonDeselect(spnHoldModeSet, 'WizardBtn')'","'spnHoldModeSet.onclick()'",spnHoldModeSet)					// Hold Mode Set
	);
	
	g_oSpinner = new SpinnerList(spnSpinnerSysMode, spnSpinDownSysMode, spnSpinUpSysMode);

	// Add Startup Page Options
	g_oSpinner.Add("Off");
	g_oSpinner.Add("Heat");
	g_oSpinner.Add("Cool");
	g_oSpinner.Add("Auto");
	
	// Display default value in list
	if (iSystemMode == tsmEmergencyHeat)
		iSystemMode = tsmHeat;
	g_oSpinner.Display(iSystemMode);
	
	// Set default focus
	AIButtonSelect(spnSpinDownHeat, 'Spinner_Minus');
	g_CurrentFocus = 0;
	
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Button: Welcome page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Button()
{
	// Load navigation buttons into memory
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1,-1,0,1,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),					// Scroll Up
		new Array(-1,-1,0,0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown),			// Scroll Down
		new Array(2,2,0,0,  "'g_VM_VerticalMenu.SelectRowRemote()'","'g_VM_VerticalMenu.DeselectRow()'","'g_VM_VerticalMenu.ChooseRow(91);ShowPreviousPage()'",spnVertMenu)	// Vertical Menu
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, false);

	// Initialize Vertical Menu
	g_VM_bSelectable = false;
	
	// Set the default focus
	g_VM_VerticalMenu.SelectRowRemote(0);
	g_CurrentFocus = 2;

	// If No buttons exist then alter the focus table
	try
	{
		if (spnVMItem.ItemID == -1)
		{
			// Prevent navigating Left/Right
			for (x=0; x<g_aryFocusTable.length; x++)
			{
				g_aryFocusTable[x][2] = -1;
				g_aryFocusTable[x][3] = -1;
			}
			
			g_aryFocusTable[2][6]="";
		}
	}
	catch (oError)
	{
	}

	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Event: Welcome page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Event()
{
	// Load navigation buttons into memory
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1,-1, 1, 1,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),					// Scroll Up
		new Array(-1,-1, 0, 0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown)			// Scroll Down
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, true);
	g_VM_VerticalMenu.Selectable = false;
	
	// Set the default focus
	AIButtonSelect(spnScrollDown, 'VMScrollDown');
	g_CurrentFocus = 1;

	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Rule_List: Rule List page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Rule_List()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 1, 4, 4,"'AIButtonSelect(spnRuleAddBtn, 'NavBtn')'","'AIButtonDeselect(spnRuleAddBtn, 'NavBtn')'","'spnRuleAddBtn.onclick()'",spnRuleAddBtn),		// Add Rule
		new Array( 0,-1, 4, 4,"'AIButtonSelect(spnShowVideosBtn, 'NavBtn')'","'AIButtonDeselect(spnShowVideosBtn, 'NavBtn')'","'spnShowVideosBtn.onclick()'",spnShowVideosBtn),		// Goto Videos Place
		new Array(-1,-1, 0, 3,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),				// Scroll Up
		new Array(-1,-1, 2, 0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown),		// Scroll Down
		new Array( 4, 4, 0, 0,"'g_VM_VerticalMenu.SelectRowRemote()'","'g_VM_VerticalMenu.DeselectRow()'","'g_VM_VerticalMenu.ChooseRow(128)'",spnVertMenu)	// Vertical Menu
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, true);
	
	// If list is empty then set default focus
	if ( !document.all.spnVMItem[0] )
	{
		if (document.all.spnVMItem.ItemID == "-1")
			g_aryFocusTable[4][6] = "'spnRuleAddBtn.onclick()'";

		// Set the default focus
		AIButtonSelect(spnRuleAddBtn, 'NavBtn');
		g_CurrentFocus = 0;
	}
	else
	{
		// Set the default focus
		g_VM_VerticalMenu.SelectRowRemote(0);
		g_CurrentFocus = 4;
	}
	
	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Rule_Edit: Rule Edit page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Rule_Edit()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtn");
	g_CurrentFocus = 0;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click
	g_aryFocusTable = new Array(
		new Array(-1, 1,-1,-1,"'AIButtonSelect(spnRuleAddBtn, 'NavBtn')'","'AIButtonDeselect(spnRuleAddBtn, 'NavBtn')'","'spnRuleAddBtn.onclick()'",spnRuleAddBtn),							// Edit Rule
		new Array( 0, 2,-1,-1,"'AIButtonSelect(spnDeleteBtn, 'NavBtn')'","'AIButtonDeselect(spnDeleteBtn, 'NavBtn')'","'spnDeleteBtn.onclick()'",spnDeleteBtn),								// Delete Rule
		new Array( 1,-1,-1,-1,"'AIButtonSelect(spnToggleEnabledBtn, 'NavBtn')'","'AIButtonDeselect(spnToggleEnabledBtn, 'NavBtn')'","'spnToggleEnabledBtn.onclick()'",spnToggleEnabledBtn)	// Enable/Disable Rule
	);

	// Set the default focus
	AIButtonSelect(spnRuleAddBtn, 'NavBtn');
	
	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Rule_Condition: Rule Wizard - Condition
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Rule_Condition()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDown, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDown, 'Spinner_Minus')'","'spnSpinDown.onclick()'",spnSpinDown),	// Minus Spinner
		new Array( 0, 3, 0,-1,"'AIButtonSelect(spnSpinUp, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUp, 'Spinner_Plus')'","'spnSpinUp.onclick()'",spnSpinUp),				// Plus Spinner
		new Array( 0,-1,-1, 3,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'spnWizardBack.onclick()'",spnWizardBack),						// Wizard Nav Back
		new Array( 0,-1, 2, 4,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'spnWizardNext.onclick()'",spnWizardNext),	// Wizard Nav Next
		new Array( 0,-1, 3,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'spnWizardCncl.onclick()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	g_oSpinner = new SpinnerList(spnSpinnerList, spnSpinDown, spnSpinUp);

	var nodeCondition = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//EVENT_TYPE");
	var iCondition;
	try
	{
		iCondition   = parseInt(nodeCondition.text);
	}
	catch (oError)
	{
		iCondition = -1;
	}
	var iDefaultCondition = 0;
	
	// Add conditions to list
	g_oSpinner.Add("Alarm is activated", EC_ALARM);
	g_oSpinner.Add("Light or Appliance changes state", EC_UNIT);
	g_oSpinner.Add("Security is armed or disarmed", EC_SECURITY);
	g_oSpinner.Add("Security zone changes state", EC_ZONE);

	// Display default value in list
	for (idx=0; idx<g_oSpinner.length; idx++)
	{
		if (iCondition == g_oSpinner.List[idx][1])
			iDefaultCondition = idx;
	}
	g_oSpinner.Display(iDefaultCondition);

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	if (iDefaultCondition > 0)
	{
		AIButtonSelect(spnSpinDown, 'Spinner_Minus');
		g_CurrentFocus = 0;
	}
	else
	{
		AIButtonSelect(spnSpinUp, 'Spinner_Plus');
		g_CurrentFocus = 1;
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Rule_Unit: Rule Wizard - Condition
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Rule_Unit()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDownUnit, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownUnit, 'Spinner_Minus')'","'spnSpinDownUnit.onclick()'",spnSpinDownUnit),	// Minus Spinner Unit
		new Array(-1, 3, 0,-1,"'AIButtonSelect(spnSpinUpUnit, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpUnit, 'Spinner_Plus')'","'spnSpinUpUnit.onclick()'",spnSpinUpUnit),				// Plus Spinner Unit
		new Array( 1, 5,-1, 3,"'AIButtonSelect(spnSpinDownState, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownState, 'Spinner_Minus')'","'spnSpinDownState.onclick()'",spnSpinDownState),	// Minus Spinner Unit
		new Array( 1, 5, 2,-1,"'AIButtonSelect(spnSpinUpState, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpState, 'Spinner_Plus')'","'spnSpinUpState.onclick()'",spnSpinUpState),				// Plus Spinner Unit
		new Array( 3,-1,-1, 5,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'spnWizardBack.onclick()'",spnWizardBack),						// Wizard Nav Back
		new Array( 3,-1, 4, 6,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'spnWizardNext.onclick()'",spnWizardNext),	// Wizard Nav Next
		new Array( 3,-1, 5,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'spnWizardCncl.onclick()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	g_oSpinner = new Array(
						new SpinnerList(spnSpinnerUnit, spnSpinDownUnit, spnSpinUpUnit),
						new SpinnerList(spnSpinnerState, spnSpinDownState, spnSpinUpState)
					 );

	
	// Add units to list
	var oXMLTemp = new ActiveXObject("MICROSOFT.XMLDOM");
	oXMLTemp.async = false;
	oXMLTemp.loadXML(Get_Units_XML());

	var nodeUnits = oXMLTemp.documentElement.selectNodes("//UNITS//UNIT");
	
	g_oSpinner[0].Add("[Any Light or Appliance]", -1);

	if (nodeUnits.length > 0)	
	{
		for (idx=0; idx<nodeUnits.length; idx++)	
		{
			var nodeName = nodeUnits.item(idx).selectSingleNode("NAME");
			var szName   = nodeName.text;
			var nodeID   = nodeUnits.item(idx).selectSingleNode("ID");
			var szID     = nodeID.text;
			g_oSpinner[0].Add(szName, szID);
		}
	}
	
	// Display default value in list
	var iUnit;
	var nodeItem = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//UNITID");
	try
	{
		iUnit    = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iUnit = -1;
	}
	var iDefaultUnit = 0;
	
	for (idx=0; idx<g_oSpinner[0].length; idx++)
	{
		if (iUnit == g_oSpinner[0].List[idx][1])
			iDefaultUnit = idx;
	}
	g_oSpinner[0].Display(iDefaultUnit);

	nodeItem   = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//STATEID");
	var iState;
	try
	{
		iState = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iState = -1;
	}
	var iDefault = 0;

	// Add states to the list
	g_oSpinner[1].Add("[Any State]", -1);
	g_oSpinner[1].Add("On", 1);
	g_oSpinner[1].Add("Off", 0);

	for (idx=0; idx<g_oSpinner[1].length; idx++)
	{
		if (iState == g_oSpinner[1].List[idx][1])
			iDefault = idx;
	}
	g_oSpinner[1].Display(iDefault);	
	
	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	if (iDefaultUnit > 0)
	{
		AIButtonSelect(spnSpinDownUnit, 'Spinner_Minus');
		g_CurrentFocus = 0;
	}
	else
	{
		AIButtonSelect(spnSpinUpUnit, 'Spinner_Plus');
		g_CurrentFocus = 1;
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Rule_Zone: Rule Wizard - Condition
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Rule_Zone()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDownZone, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownZone, 'Spinner_Minus')'","'spnSpinDownZone.onclick()'",spnSpinDownZone),	// Minus Spinner Zone
		new Array(-1, 3, 0,-1,"'AIButtonSelect(spnSpinUpZone, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpZone, 'Spinner_Plus')'","'spnSpinUpZone.onclick()'",spnSpinUpZone),				// Plus Spinner Zone
		new Array( 1, 5,-1, 3,"'AIButtonSelect(spnSpinDownState, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownState, 'Spinner_Minus')'","'spnSpinDownState.onclick()'",spnSpinDownState),	// Minus Spinner Unit
		new Array( 1, 5, 2,-1,"'AIButtonSelect(spnSpinUpState, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpState, 'Spinner_Plus')'","'spnSpinUpState.onclick()'",spnSpinUpState),				// Plus Spinner Unit
		new Array( 3,-1,-1, 5,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'spnWizardBack.onclick()'",spnWizardBack),						// Wizard Nav Back
		new Array( 3,-1, 4, 6,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'spnWizardNext.onclick()'",spnWizardNext),	// Wizard Nav Next
		new Array( 3,-1, 5,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'spnWizardCncl.onclick()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	g_oSpinner = new Array(
						new SpinnerList(spnSpinnerZone, spnSpinDownZone, spnSpinUpZone),
						new SpinnerList(spnSpinnerState, spnSpinDownState, spnSpinUpState)
					 );

	// Add zones to list
	var oXMLTemp = new ActiveXObject("MICROSOFT.XMLDOM");
	oXMLTemp.async = false;
	oXMLTemp.loadXML(Get_Zones_XML());

	var nodeUnits = oXMLTemp.documentElement.selectNodes("//ZONES//ZONE");
	
	g_oSpinner[0].Add("[Any Zone]", -1);

	if (nodeUnits.length > 0)	
	{
		for (idx=0; idx<nodeUnits.length; idx++)	
		{
			var nodeName = nodeUnits.item(idx).selectSingleNode("NAME");
			var szName   = nodeName.text;
			var nodeID   = nodeUnits.item(idx).selectSingleNode("ID");
			var szID     = nodeID.text;
			g_oSpinner[0].Add(szName, szID);
		}
	}
	
	// Display default value in list
	var nodeItem = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//ZONEID");
	var iZone;
	try
	{
		iZone    = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iZone = -1;
	}
	var iDefaultZone = 0;
	
	for (idx=0; idx<g_oSpinner[0].length; idx++)
	{
		if (iZone == g_oSpinner[0].List[idx][1])
			iDefaultZone = idx;
	}
	g_oSpinner[0].Display(iDefaultZone);
	
	nodeItem   = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//STATEID");
	var iState;
	try
	{
		iState = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iState = -1;
	}
	var iDefault = 0;

	// Add states to the list
	g_oSpinner[1].Add("[Any State]", -1);
	g_oSpinner[1].Add("Secure", 0);
	g_oSpinner[1].Add("Not Ready", 1);
	g_oSpinner[1].Display(0);
	
	for (idx=0; idx<g_oSpinner[1].length; idx++)
	{
		if (iState == g_oSpinner[1].List[idx][1])
			iDefault = idx;
	}
	g_oSpinner[1].Display(iDefault);	

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	if (iDefaultZone > 0)
	{
		AIButtonSelect(spnSpinDownZone, 'Spinner_Minus');
		g_CurrentFocus = 0;
	}
	else
	{
		AIButtonSelect(spnSpinUpZone, 'Spinner_Plus');
		g_CurrentFocus = 1;
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Rule_Alarm: Rule Wizard - Condition
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Rule_Alarm()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDownArea, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownArea, 'Spinner_Minus')'","'spnSpinDownArea.onclick()'",spnSpinDownArea),	// Minus Spinner Area
		new Array(-1, 3, 0,-1,"'AIButtonSelect(spnSpinUpArea, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpArea, 'Spinner_Plus')'","'spnSpinUpArea.onclick()'",spnSpinUpArea),				// Plus Spinner Area
		new Array( 1, 5,-1, 3,"'AIButtonSelect(spnSpinDownAlarm, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownAlarm, 'Spinner_Minus')'","'spnSpinDownAlarm.onclick()'",spnSpinDownAlarm),	// Minus Spinner Alarm Type
		new Array( 1, 5, 2,-1,"'AIButtonSelect(spnSpinUpAlarm, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpAlarm, 'Spinner_Plus')'","'spnSpinUpAlarm.onclick()'",spnSpinUpAlarm),				// Plus Spinner Alarm Type
		new Array( 3,-1,-1, 5,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'spnWizardBack.onclick()'",spnWizardBack),						// Wizard Nav Back
		new Array( 3,-1, 4, 6,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'spnWizardNext.onclick()'",spnWizardNext),	// Wizard Nav Next
		new Array( 3,-1, 5,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'spnWizardCncl.onclick()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	g_oSpinner = new Array(
						new SpinnerList(spnSpinnerArea, spnSpinDownArea, spnSpinUpArea),
						new SpinnerList(spnSpinnerAlarm, spnSpinDownAlarm, spnSpinUpAlarm)
					 );

	
	// Add areas to list
	var oXMLTemp = new ActiveXObject("MICROSOFT.XMLDOM");
	oXMLTemp.async = false;
	oXMLTemp.loadXML(Get_Areas_XML());

	var nodeUnits = oXMLTemp.documentElement.selectNodes("//AREAS//AREA");
	
	g_oSpinner[0].Add("[Any Area]", -1);

	if (nodeUnits.length > 0)	
	{
		for (idx=0; idx<nodeUnits.length; idx++)	
		{
			var nodeName = nodeUnits.item(idx).selectSingleNode("NAME");
			var szName   = nodeName.text;
			var nodeID   = nodeUnits.item(idx).selectSingleNode("ID");
			var szID     = nodeID.text;
			g_oSpinner[0].Add(szName, szID);
		}
	}
	
	// Display default value in list
	var nodeItem = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//AREAID");
	var iArea;
	try
	{
		iArea    = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iArea = -1;
	}
	var iDefaultArea = 0;
	
	for (idx=0; idx<g_oSpinner[0].length; idx++)
	{
		if (iArea == g_oSpinner[0].List[idx][1])
			iDefaultArea = idx;
	}
	g_oSpinner[0].Display(iDefaultArea);
	
	nodeItem   = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//ALARMTYPEID");
	var iType;
	try
	{
		iType = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iType = -1;
	}
	var iDefault = 0;

	// Add states to the list
	g_oSpinner[1].Add("[Any Alarm]", -1);
	g_oSpinner[1].Add("Burglary", 1);
	g_oSpinner[1].Add("Fire", 2);
	g_oSpinner[1].Add("Gas", 3);
	g_oSpinner[1].Add("Auxiliary", 4);
	g_oSpinner[1].Add("Freeze", 5);
	g_oSpinner[1].Add("Water", 6);
	g_oSpinner[1].Add("Duress", 7);
	g_oSpinner[1].Add("Temperature", 8);
	g_oSpinner[1].Display(0);
	
	for (idx=0; idx<g_oSpinner[1].length; idx++)
	{
		if (iType == g_oSpinner[1].List[idx][1])
			iDefault = idx;
	}
	g_oSpinner[1].Display(iDefault);	

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	if (iDefaultArea > 0)
	{
		AIButtonSelect(spnSpinDownArea, 'Spinner_Minus');
		g_CurrentFocus = 0;
	}
	else
	{
		AIButtonSelect(spnSpinUpArea, 'Spinner_Plus');
		g_CurrentFocus = 1;
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Rule_Security: Rule Wizard - Condition
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Rule_Security()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDownArea, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownArea, 'Spinner_Minus')'","'spnSpinDownArea.onclick()'",spnSpinDownArea),	// Minus Spinner Area
		new Array(-1, 3, 0,-1,"'AIButtonSelect(spnSpinUpArea, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpArea, 'Spinner_Plus')'","'spnSpinUpArea.onclick()'",spnSpinUpArea),				// Plus Spinner Area
		new Array( 1, 5,-1, 3,"'AIButtonSelect(spnSpinDownMode, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownMode, 'Spinner_Minus')'","'spnSpinDownMode.onclick()'",spnSpinDownMode),	// Minus Spinner Security Mode
		new Array( 1, 5, 2,-1,"'AIButtonSelect(spnSpinUpMode, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpMode, 'Spinner_Plus')'","'spnSpinUpMode.onclick()'",spnSpinUpMode),				// Plus Spinner Security Mode
		new Array( 3, 7,-1, 5,"'AIButtonSelect(spnSpinDownUser, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownUser, 'Spinner_Minus')'","'spnSpinDownUser.onclick()'",spnSpinDownUser),	// Minus Spinner User
		new Array( 3, 7, 4,-1,"'AIButtonSelect(spnSpinUpUser, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpUser, 'Spinner_Plus')'","'spnSpinUpUser.onclick()'",spnSpinUpUser),				// Plus Spinner User
		new Array( 5,-1,-1, 7,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'spnWizardBack.onclick()'",spnWizardBack),						// Wizard Nav Back
		new Array( 5,-1, 6, 8,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'spnWizardNext.onclick()'",spnWizardNext),	// Wizard Nav Next
		new Array( 5,-1, 7,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'spnWizardCncl.onclick()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	g_oSpinner = new Array(
						new SpinnerList(spnSpinnerArea, spnSpinDownArea, spnSpinUpArea),
						new SpinnerList(spnSpinnerMode, spnSpinDownMode, spnSpinUpMode),
						new SpinnerList(spnSpinnerUser, spnSpinDownUser, spnSpinUpUser)
					 );

	var nodeCondition = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//EVENT_TYPE");
	var szCondition   = nodeCondition.text;
	var iDefaultCondition = 0;
	
	// Add areas to list
	var oXMLTemp = new ActiveXObject("MICROSOFT.XMLDOM");
	oXMLTemp.async = false;
	oXMLTemp.loadXML(Get_Areas_XML());

	var nodeUnits = oXMLTemp.documentElement.selectNodes("//AREAS//AREA");
	
	g_oSpinner[0].Add("[Any Area]", -1);

	if (nodeUnits.length > 0)	
	{
		for (idx=0; idx<nodeUnits.length; idx++)	
		{
			var nodeName = nodeUnits.item(idx).selectSingleNode("NAME");
			var szName   = nodeName.text;
			var nodeID   = nodeUnits.item(idx).selectSingleNode("ID");
			var szID     = nodeID.text;
			g_oSpinner[0].Add(szName, szID);
		}
	}
	
	// Display default value in list
	var nodeItem = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//AREAID");
	var iArea;
	try
	{
		iArea    = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iArea = -1;
	}
	var iDefaultArea = 0;
	
	for (idx=0; idx<g_oSpinner[0].length; idx++)
	{
		if (iArea == g_oSpinner[0].List[idx][1])
			iDefaultArea = idx;
	}
	g_oSpinner[0].Display(iDefaultArea);
	
	nodeItem   = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//SECURITYMODEID");
	var iMode;
	try
	{
		iMode = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iMode = -1;
	}
	var iDefault = 0;

	// Add modes to the list
	g_oSpinner[1].Add("[Any Mode]", -1);
	g_oSpinner[1].Add("Disarm", 0);
	g_oSpinner[1].Add("Arm Day", 1);
	g_oSpinner[1].Add("Arm Night", 2);
	g_oSpinner[1].Add("Arm Away", 3);
	g_oSpinner[1].Add("Arm Vacation", 4);
	g_oSpinner[1].Add("Arm Day Instant", 5);
	g_oSpinner[1].Add("Arm Night Delayed", 6);
	g_oSpinner[1].Display(0);
	
	for (idx=0; idx<g_oSpinner[1].length; idx++)
	{
		if (iMode == g_oSpinner[1].List[idx][1])
			iDefault = idx;
	}
	g_oSpinner[1].Display(iDefault);	

	// Add Users to the list
	oXMLTemp.loadXML(Get_Users_XML());

	var nodeUsers = oXMLTemp.documentElement.selectNodes("//CODES//CODE");
	
	g_oSpinner[2].Add("[Any User]", -1);

	if (nodeUsers.length > 0)	
	{
		for (idx=0; idx<nodeUsers.length; idx++)	
		{
			var nodeName = nodeUsers.item(idx).selectSingleNode("NAME");
			var szName   = nodeName.text;
			var nodeID   = nodeUsers.item(idx).selectSingleNode("ID");
			var szID     = nodeID.text;
			g_oSpinner[2].Add(szName, szID);
		}
	}

	nodeItem   = oXMLDoc.documentElement.selectSingleNode("//RULE//EVENT//SECURITYCODE");
	var iUser;
	try
	{
		iUser = parseInt(nodeItem.text);
	}
	catch (oError)
	{
		iUser = -1;
	}
	iDefault = 0;

	for (idx=0; idx<g_oSpinner[2].length; idx++)
	{
		if (iUser == g_oSpinner[2].List[idx][1])
			iDefault = idx;
	}
	g_oSpinner[2].Display(iDefault);	

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	if (iDefaultArea > 0)
	{
		AIButtonSelect(spnSpinDownArea, 'Spinner_Minus');
		g_CurrentFocus = 0;
	}
	else
	{
		AIButtonSelect(spnSpinUpArea, 'Spinner_Plus');
		g_CurrentFocus = 1;
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Rule_Video_Properties: Rule Wizard - Video Properties
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Rule_Video_Properties()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 1,-1,-1,"'txtChannel.focus();txtChannel.select()'","'txtChannel.blur()'","'NoOp()'",txtChannel),		// Record Channel
		new Array( 0, 2,-1,-1,"'txtDuration.focus();txtDuration.select()'","'txtDuration.blur()'","'NoOp()'",txtDuration),		// Record Duration
		new Array( 1, 4,-1,-1,"'CheckBox_MouseOver(spnGuaranteedRecording)'","'CheckBox_MouseOut(spnGuaranteedRecording)'","'CheckBox_Toggle(spnGuaranteedRecording)'",spnGuaranteedRecording),		// Guaranteed Recording
		new Array( 2,-1,-1, 4,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'spnWizardBack.onclick()'",spnWizardBack),						// Wizard Nav Back
		new Array( 2,-1, 3, 5,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'spnWizardNext.onclick()'",spnWizardNext),	// Wizard Nav Next
		new Array( 2,-1, 4,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'spnWizardCncl.onclick()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	txtChannel.focus();
	txtChannel.select();
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Rule_Name: Rule Wizard - Name
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Rule_Name()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 1,-1,-1,"'txtName.focus();txtName.select()'","'txtName.blur()'","'NoOp()'",txtName),		// Rule Name
		new Array( 0, 3,-1,-1,"'CheckBox_MouseOver(spnEnabled)'","'CheckBox_MouseOut(spnEnabled)'","'CheckBox_Toggle(spnEnabled)'",spnEnabled),		// Enable Rule
		new Array( 1,-1,-1, 3,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'spnWizardBack.onclick()'",spnWizardBack),						// Wizard Nav Back
		new Array( 1,-1, 2, 4,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'spnWizardNext.onclick()'",spnWizardNext),	// Wizard Nav Next
		new Array( 1,-1, 3,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'spnWizardCncl.onclick()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	txtName.focus();
	txtName.select();
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Settings_Main: Main Settings page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Settings_Main()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtnStateSel");
	AIButtonNew("NavBtnStateDesel");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");
	AIButtonNew("WizardBtn");
	AIButtonNew("NavBtn");

	// Initialize
	g_CurrentFocus = -1;
	
	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 1, 7, 3,"'AIButtonSelect(spnSettingsMain, 'NavBtnStateSel')'","'AIButtonDeselect(spnSettingsMain, 'NavBtnStateSel')'","'ShowPage(90)'",spnSettingsMain),					// Settings - Main Button
		new Array( 0, 2, 7, 3,"'AIButtonSelect(spnSettingsController, 'NavBtnStateDesel')'","'AIButtonDeselect(spnSettingsController, 'NavBtnStateDesel')'","'ShowPage(93)'",spnSettingsController),			// Settings - Controller Button
		new Array( 1, 8, 7, 3,"'AIButtonSelect(spnSettingsSync, 'NavBtnStateDesel')'","'AIButtonDeselect(spnSettingsSync, 'NavBtnStateDesel')'","'ShowPage(107)'",spnSettingsSync),			// Settings - Data Sync Button
		new Array(-1, 4, 0, 4,"'AIButtonSelect(spnSpinDown, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDown, 'Spinner_Minus')'","'g_oSpinner.SpinDown()'",spnSpinDown),	// Minus Spinner
		new Array(-1, 5, 3,-1,"'AIButtonSelect(spnSpinUp, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUp, 'Spinner_Plus')'","'g_oSpinner.SpinUp()'",spnSpinUp),			// Plus Spinner
		new Array( 4, 6, 0,-1,"'CheckBox_MouseOver(spnEnableSounds)'","'CheckBox_MouseOut(spnEnableSounds)'","'CheckBox_Toggle(spnEnableSounds)'",spnEnableSounds),		// Enable Sounds
		new Array( 5, 7, 0,-1,"'CheckBox_MouseOver(spnEnabledNotifications)'","'CheckBox_MouseOut(spnEnabledNotifications)'","'CheckBox_Toggle(spnEnabledNotifications)'",spnEnabledNotifications),		// Enable Notifications
		new Array( 6,-1, 0, 0,"'AIButtonSelect(spnSaveSettings, 'WizardBtn')'","'AIButtonDeselect(spnSaveSettings, 'WizardBtn')'","'spnSaveSettings.onclick()'",spnSaveSettings),								// Save Settings
		new Array( 2,-1, 7, 3,"'AIButtonSelect(spnSettingsSrvrLog, 'NavBtn')'","'AIButtonDeselect(spnSettingsSrvrLog, 'NavBtn')'","'ShowPage(129)'",spnSettingsSrvrLog)			// ServerLog Button
	);

	g_oSpinner = new SpinnerList(spnSpinnerList, spnSpinDown, spnSpinUp);
	
	// Set default state of checkboxes
	if (g_iSoundsEnabled)
	{
		CheckBox_Toggle(spnEnableSounds);
		CheckBox_MouseOut(spnEnableSounds);
	}
		
	if (g_iNotificationsEnabled)
	{
		CheckBox_Toggle(spnEnabledNotifications);
		CheckBox_MouseOut(spnEnabledNotifications);
	}
		
	// Add Startup Page Options
	g_oSpinner.Add("Welcome");
	g_oSpinner.Add("Home");
	g_oSpinner.Add("Control");
	g_oSpinner.Add("Security");
	g_oSpinner.Add("Temperature");
	g_oSpinner.Add("Buttons");
	g_oSpinner.Add("Events");
	
	// Add surveillance option if video is supported
	if (IsVideoSupported())
		g_oSpinner.Add("Surveillance");
		
	
	// Display default value in user name list
	var iDefault;
	switch (g_szStartupPage)
	{
		case PAGE_WELCOME:
			iDefault = 0;
			break;
		case PAGE_HOME:
			iDefault = 1;
			break;
		case PAGE_CONTROL:
			iDefault = 2;
			break;
		case PAGE_SECURITY:
			iDefault = 3;
			break;
		case PAGE_TEMPERATURE:
			iDefault = 4;
			break;
		case PAGE_BUTTON:
			iDefault = 5;
			break;
		case PAGE_EVENT:
			iDefault = 6;
			break;
		case PAGE_RULES_LIST:
			iDefault = 7;
			break;
		default:
			iDefault = 0;
	};
	
	g_oSpinner.Display(iDefault);

	// Set the default focus
	AIButtonSelect(spnSettingsController, 'NavBtnStateDesel');
	g_CurrentFocus = 1;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Settings_Controller: Controller Settings page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Settings_Controller()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtnStateSel");
	AIButtonNew("NavBtnStateDesel");
	AIButtonNew("NavBtn");
	AIButtonNew("WizardBtn");
	AIButtonNew("NavBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 1, 4, 4,"'AIButtonSelect(spnSettingsMain, 'NavBtnStateDesel')'","'AIButtonDeselect(spnSettingsMain, 'NavBtnStateDesel')'","'ShowPage(90)'",spnSettingsMain),					// Settings - Main Button
		new Array( 0, 2, 4, 4,"'AIButtonSelect(spnSettingsController, 'NavBtnStateSel')'","'AIButtonDeselect(spnSettingsController, 'NavBtnStateSel')'","'ShowPage(93)'",spnSettingsController),	// Settings - Controller Button
		new Array( 1, 3, 4, 4,"'AIButtonSelect(spnSettingsSync, 'NavBtnStateDesel')'","'AIButtonDeselect(spnSettingsSync, 'NavBtnStateDesel')'","'ShowPage(107)'",spnSettingsSync),					// Settings - Data Sync Button
		new Array( 2,-1, 4, 4,"'AIButtonSelect(spnSettingsSrvrLog, 'NavBtn')'","'AIButtonDeselect(spnSettingsSrvrLog, 'NavBtn')'","'ShowPage(129)'",spnSettingsSrvrLog),							// ServerLog Button
		new Array(-1,-1, 0, 0,"'AIButtonSelect(spnChangeSettingsBtn, 'NavBtn')'","'AIButtonDeselect(spnChangeSettingsBtn, 'NavBtn')'","'ShowPage(100)'",spnChangeSettingsBtn)						// Change Settings Button
	);

	// Set the default focus
	AIButtonSelect(spnSettingsMain, 'NavBtnStateDesel');
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Settings_Sync: Data Sync Page
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Settings_Sync()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtnStateSel");
	AIButtonNew("NavBtnStateDesel");
	AIButtonNew("NavBtn");
	AIButtonNew("WizardBtn");
	AIButtonNew("NavBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 1, 8, 3,"'AIButtonSelect(spnSettingsMain, 'NavBtnStateDesel')'","'AIButtonDeselect(spnSettingsMain, 'NavBtnStateDesel')'","'ShowPage(90)'",spnSettingsMain),					// Settings - Main Button
		new Array( 0, 2, 8, 3,"'AIButtonSelect(spnSettingsController, 'NavBtnStateDesel')'","'AIButtonDeselect(spnSettingsController, 'NavBtnStateDesel')'","'ShowPage(93)'",spnSettingsController),	// Settings - Controller Button
		new Array( 1, 9, 8, 3,"'AIButtonSelect(spnSettingsSync, 'NavBtnStateSel')'","'AIButtonDeselect(spnSettingsSync, 'NavBtnStateSel')'","'ShowPage(107)'",spnSettingsSync),			// Settings - Controller Button
		new Array(-1, 6, 0,-1,"'CheckBox_MouseOver(spnDownloadSetup)'","'CheckBox_MouseOut(spnDownloadSetup)'","'CheckBox_Toggle(spnDownloadSetup)'",spnDownloadSetup),		// Download Setup Checkbox
		new Array( 6, 7, 0,-1,"'CheckBox_MouseOver(spnDownloadNames)'","'CheckBox_MouseOut(spnDownloadNames)'","'CheckBox_Toggle(spnDownloadNames)'",spnDownloadNames),		// Download Names Checkbox
		new Array( 7, 8, 0,-1,"'CheckBox_MouseOver(spnSyncTime)'","'CheckBox_MouseOut(spnSyncTime)'","'CheckBox_Toggle(spnSyncTime)'",spnSyncTime),		// Download Setup Checkbox
		new Array( 3, 4, 0,-1,"'AIButtonSelect(spnUpdateSetup, 'WizardBtn')'","'AIButtonDeselect(spnUpdateSetup, 'WizardBtn')'","'data_Download(DL_SETUP)'",spnUpdateSetup),		// Setup Sync button
		new Array( 4, 5, 0,-1,"'AIButtonSelect(spnUpdateNames, 'WizardBtn')'","'AIButtonDeselect(spnUpdateNames, 'WizardBtn')'","'data_Download(DL_NAMES)'",spnUpdateNames),		// Names Sync button
		new Array( 5,-1, 0, 0,"'AIButtonSelect(spnSaveSettings, 'WizardBtn')'","'AIButtonDeselect(spnSaveSettings, 'WizardBtn')'","'spnSaveSettings.onclick()'",spnSaveSettings),		// Save Settings
		new Array( 2,-1, 8, 3,"'AIButtonSelect(spnSettingsSrvrLog, 'NavBtn')'","'AIButtonDeselect(spnSettingsSrvrLog, 'NavBtn')'","'ShowPage(129)'",spnSettingsSrvrLog)							// ServerLog Button
	);
		
	// Set the default focus
	AIButtonSelect(spnSettingsMain, 'NavBtnStateDesel');
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_ServerLog: ServerLog Page
////////////////////////////////////////////////////////////////////////////////
function PG_Init_ServerLog()
{
	// Load navigation buttons into memory
	AIButtonNew("NavBtnStateSel");
	AIButtonNew("NavBtnStateDesel");
	AIButtonNew("NavBtn");
	AIButtonNew("VMScrollUp");
	AIButtonNew("VMScrollDown");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1,-1, 2, 1,"'AIButtonSelect(spnClearSrvrLog, 'NavBtn')'","'AIButtonDeselect(spnClearSrvrLog, 'NavBtn')'","'spnClearSrvrLog.onclick()'",spnClearSrvrLog),				// Clear ServerLog button
		new Array(-1,-1, 0, 2,"'AIButtonSelect(spnScrollUp, 'VMScrollUp')'","'AIButtonDeselect(spnScrollUp, 'VMScrollUp')'","'g_VM_VerticalMenu.Scroll(1)'",spnScrollUp),								// Scroll Up
		new Array(-1,-1, 1, 0,"'AIButtonSelect(spnScrollDown, 'VMScrollDown')'","'AIButtonDeselect(spnScrollDown, 'VMScrollDown')'","'g_VM_VerticalMenu.Scroll(2)'",spnScrollDown)						// Scroll Down
	);

	// Create vertical list
	g_VM_VerticalMenu = new VerticalList(null, null, 5, true);
	g_VM_VerticalMenu.Selectable = false;
		
	// If list is empty then set default focus to Main 
	if ( !document.all.spnVMItem[0] )
	{
		// Set the default focus
		AIButtonSelect(spnClearSrvrLog, 'NavBtn');
		g_CurrentFocus = 0;
	}
	else
	{
		// Set the default focus
		AIButtonSelect(spnScrollDown, 'VMScrollDown');
		g_CurrentFocus = 2;
	}
	
	return;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Ctrlr_Connection: Controller Wizard - Connection
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Ctrlr_Connection()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 3,-1, 1,"'AIButtonSelect(spnSpinDown, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDown, 'Spinner_Minus')'","'g_oSpinner.SpinDown()'",spnSpinDown),	// Minus Spinner
		new Array( 0, 3, 0,-1,"'AIButtonSelect(spnSpinUp, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUp, 'Spinner_Plus')'","'g_oSpinner.SpinUp()'",spnSpinUp),				// Plus Spinner
		new Array( 0,-1,-1, 3,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'ShowPreviousPage()'",spnWizardBack),						// Wizard Nav Back
		new Array( 0,-1, 2, 4,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'Wizard_Save_Connection(g_oSpinner.Value)'",spnWizardNext),	// Wizard Nav Next
		new Array( 0,-1, 3,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'CancelWizard()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	g_oSpinner = new SpinnerList(spnSpinnerList, spnSpinDown, spnSpinUp);

	var nodeCommHandlers   = oXMLDoc.documentElement.selectNodes("//CONTROLLER//COMMHANDLERS//COMMHANDLER//NAME");
	var nodeDefaultHandler = oXMLDoc.documentElement.selectSingleNode("//CONTROLLER//COMMHANDLERS//CURRENT");
	var szDefaultHandler   = nodeDefaultHandler.text;
	var iDefaultHandler    = 0;

	if (nodeCommHandlers.length > 0)	
	{
		for (idx=0; idx<nodeCommHandlers.length; idx++)	
		{
			g_oSpinner.Add(nodeCommHandlers.item(idx).text);

			if (szDefaultHandler == nodeCommHandlers.item(idx).text)
				iDefaultHandler = idx;
		}
	}

	// Display default value in list
	g_oSpinner.Display(iDefaultHandler);

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	if (iDefaultHandler > 0)
	{
		AIButtonSelect(spnSpinDown, 'Spinner_Minus');
		g_CurrentFocus = 0;
	}
	else
	{
		AIButtonSelect(spnSpinUp, 'Spinner_Plus');
		g_CurrentFocus = 1;
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Ctrlr_Address_Port: Controller Wizard - Connection
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Ctrlr_Address_Port()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 4,-1, 1,"'IP1.focus();IP1.select()'","'IP1.blur()'","'NoOp()'",IP1),		// IP1 Input
		new Array(-1, 4, 0, 2,"'IP2.focus();IP2.select()'","'IP2.blur()'","'NoOp()'",IP2),		// IP2 Input
		new Array(-1, 4, 1, 3,"'IP3.focus();IP3.select()'","'IP3.blur()'","'NoOp()'",IP3),		// IP3 Input
		new Array(-1, 4, 2,-1,"'IP4.focus();IP4.select()'","'IP4.blur()'","'NoOp()'",IP4),		// IP4 Input
		new Array( 0, 6,-1,-1,"'ControllerPort.focus();ControllerPort.select()'","'ControllerPort.blur()'","'NoOp()'",ControllerPort),		// Controller Port
		new Array( 4,-1,-1, 6,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'ShowPreviousPage()'",spnWizardBack),		// Wizard Nav Back
		new Array( 4,-1, 5, 7,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'spnWizardNext.onclick()'",spnWizardNext),				// Wizard Nav Next
		new Array( 4,-1, 6,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'CancelWizard()'",spnWizardCncl)				// Wizard Nav Cancel
	);

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
		
	// Set the default focus
	IP1.focus();
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Ctrlr_Serial: Controller Wizard - Serial
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Ctrlr_Serial()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");
	AIButtonNew("Spinner_Minus");
	AIButtonNew("Spinner_Plus");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 2,-1, 1,"'AIButtonSelect(spnSpinDownComm, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownComm, 'Spinner_Minus')'","'g_oSpinner[0].SpinDown()'",spnSpinDownComm),	// Comm Port Minus Spinner
		new Array(-1, 2, 0,-1,"'AIButtonSelect(spnSpinUpComm, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpComm, 'Spinner_Plus')'","'g_oSpinner[0].SpinUp()'",spnSpinUpComm),				// Comm Port Plus Spinner
		new Array( 0, 5,-1, 3,"'AIButtonSelect(spnSpinDownBaud, 'Spinner_Minus')'","'AIButtonDeselect(spnSpinDownBaud, 'Spinner_Minus')'","'g_oSpinner[1].SpinDown()'",spnSpinDownBaud),	// Baud Port Minus Spinner
		new Array( 0, 5, 2,-1,"'AIButtonSelect(spnSpinUpBaud, 'Spinner_Plus')'","'AIButtonDeselect(spnSpinUpBaud, 'Spinner_Plus')'","'g_oSpinner[1].SpinUp()'",spnSpinUpBaud),				// Baud Port Plus Spinner
		new Array( 3,-1,-1, 5,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'ShowPreviousPage()'",spnWizardBack),						// Wizard Nav Back
		new Array( 3,-1, 4, 6,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'Wizard_Save_Serial()'",spnWizardNext),						// Wizard Nav Next
		new Array( 3,-1, 5,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'CancelWizard()'",spnWizardCncl)								// Wizard Nav Cancel
	);

	g_oSpinner = new Array(
						new SpinnerList(spnSpinnerComm, spnSpinDownComm, spnSpinUpComm),
						new SpinnerList(spnSpinnerBaud, spnSpinDownBaud, spnSpinUpBaud)
					 );

	var nodeResult = oXMLDoc.selectSingleNode("CONTROLLER/COMMHANDLERS/COMMHANDLER[NAME = 'Serial']");
	var iBaudRate = parseInt(nodeResult.childNodes(2).text);	// BaudRate
	var iCommPort = parseInt(nodeResult.childNodes(3).text);	// Port
	
	// Fill comm port list
	for (i=1; i<10; i++)
	{
			g_oSpinner[0].Add("Com" + i + ":");
	}

	// Fill Baud Rate list
	var iDefault = 7;
	var iIdx = 0;
	for (var i = 75; i <= 9600; i*=2)	
	{
		g_oSpinner[1].Add(i);
		
		if (i == iBaudRate)
			iDefault = iIdx;
		iIdx++;
	}

	// Display default value in list
	g_oSpinner[0].Display(iCommPort-1);
	g_oSpinner[1].Display(iDefault);


	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	if (iCommPort > 1)
	{
		AIButtonSelect(spnSpinDownComm, 'Spinner_Minus');
		g_CurrentFocus = 0;
	}
	else
	{
		AIButtonSelect(spnSpinUpComm, 'Spinner_Plus');
		g_CurrentFocus = 1;
	}
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Ctrlr_Nwrk_Encrypt: Controller Wizard - Encryption
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Ctrlr_Nwrk_Encrypt()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 1,-1,-1,"'Encrypt1.focus();Encrypt1.select()'","'Encrypt1.blur()'","'NoOp()'",Encrypt1),		// Encrypt1 Input
		new Array( 0, 3,-1,-1,"'Encrypt2.focus();Encrypt2.select()'","'Encrypt2.blur()'","'NoOp()'",Encrypt2),		// Encrypt2 Input
		new Array( 1,-1,-1, 3,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'ShowPreviousPage()'",spnWizardBack),		// Wizard Nav Back
		new Array( 1,-1, 2, 4,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'Wizard_Save_Encrypt(Encrypt1.value, Encrypt2.value)'",spnWizardNext),				// Wizard Nav Next
		new Array( 1,-1, 3,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'CancelWizard()'",spnWizardCncl)				// Wizard Nav Cancel
	);

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Set the default focus
	Encrypt1.focus();
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Ctrlr_Code: Controller Wizard - Code
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Ctrlr_Code()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");

	// Initialize
	g_CurrentFocus = -1;

	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 2,-1,-1,"'AccessCode.focus();AccessCode.select()'","'AccessCode.blur()'","'NoOp()'",AccessCode),		// Access Code Input
		new Array( 0,-1,-1, 2,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'ShowPreviousPage()'",spnWizardBack),		// Wizard Nav Back
		new Array( 0,-1, 1, 3,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'Wizard_Save_Code(AccessCode.value)'",spnWizardNext),				// Wizard Nav Next
		new Array( 0,-1, 2,-1,"'AIButtonSelect(spnWizardCncl, 'WizardBtn')'","'AIButtonDeselect(spnWizardCncl, 'WizardBtn')'","'CancelWizard()'",spnWizardCncl)				// Wizard Nav Cancel
	);

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
		
	// Set the default focus
	AccessCode.focus();
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Wiz_Ctrlr_Finish: Controller Wizard - Finish
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Wiz_Ctrlr_Finish()
{
	// Load navigation buttons into memory
	AIButtonNew("WizardBtn");
	AIButtonNew("NavBtn");

	// Initialize
	g_CurrentFocus = -1;

	
	// Create focus table array
		// Elements = Up, Down, Left, Right, Select, Deselect, Click, object
	g_aryFocusTable = new Array(
		new Array(-1, 2,-1,-1,"'AIButtonSelect(spnTestButton, 'NavBtn')'","'AIButtonDeselect(spnTestButton, 'NavBtn')'","'Wizard_Test_Connection()'",spnTestButton),		// Test Button
		new Array( 0,-1,-1, 2,"'AIButtonSelect(spnWizardBack, 'WizardBtn')'","'AIButtonDeselect(spnWizardBack, 'WizardBtn')'","'ShowPreviousPage()'",spnWizardBack),		// Wizard Nav Back
		new Array( 0,-1, 1,-1,"'AIButtonSelect(spnWizardNext, 'WizardBtn')'","'AIButtonDeselect(spnWizardNext, 'WizardBtn')'","'FinishWizard()'",spnWizardNext)				// Wizard Nav Next
	);

	// Resize page elements
	var ClientWidth = document.body.clientWidth;
	var ClientHeight = document.body.clientHeight;
	if (ClientWidth < 1024)
		ClientWidth = 1024;
	if (ClientHeight <= 600)
		ClientHeight = 768;
	PanelHeader.style.width = ClientWidth;
	PanelFooter.style.width = ClientWidth;
	PanelFooter.style.top = ClientHeight - 100;
	spnWizardNavButtons.style.top = ClientHeight - 68;
	spnWizardNavButtons.style.left = ClientWidth - 450;
	
	// Disable Finish Button
	AIButtonDisable(spnWizardNext, 'WizardBtn');
	
	// Set the default focus
	AIButtonSelect(spnTestButton, 'NavBtn');
	g_CurrentFocus = 0;
}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Status: Welcome page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Settings_Status()
{
	// Create focus table array
	g_aryFocusTable = new Array();

}

////////////////////////////////////////////////////////////////////////////////
// PG_Init_Updates: Welcome page initialization
////////////////////////////////////////////////////////////////////////////////
function PG_Init_Settings_Updates()
{
	// Create focus table array
	g_aryFocusTable = new Array();

}
