////////////////////////////////////////////////////////////////////////////////
// Graphics Library
////////////////////////////////////////////////////////////////////////////////

// <script language="javascript">
// Copyright (c) Home Automation, Inc. All rights reserved.          
// Copyright (c) HomeRun Software Systems LLC. All rights reserved.

////////////////////////////////////////////////////////////////////////////////
// Globals
////////////////////////////////////////////////////////////////////////////////
var FADE_IN_INTERVAL = 5;		// Milliseconds between page fade-in intervals
var OPACITY_INTRVL   = 10;		// Page fade-in interval between opacity adjustments
var g_PageZoom       = 0;		// Page zoom amount

var BG_OPACITY_MAX    = 20;
var BG_OPACITY_INTRVL = 2;
var BG_OPACITY_REFRSH = 15000;
var g_iOpacity        = 0;
var g_bOpacityUp      = true;

////////////////////////////////////////////////////////////////////////////////
//  Create Button Item
////////////////////////////////////////////////////////////////////////////////
function ButtonItem
(	
	szName
)
{
	this.Select   = new Image();
	this.Select.src = "images\\" + szName + "_Select.png";
	this.Deselect = new Image();
	this.Deselect.src =	"images\\" + szName + "_Deselect.png";
	this.Disable = new Image();
	this.Disable.src =	"images\\" + szName + "_Disable.png";
}

////////////////////////////////////////////////////////////////////////////////
// Allocate new button
////////////////////////////////////////////////////////////////////////////////
function ButtonNew
(
	szName
) 
{
	ButtonItem[szName] = new ButtonItem(szName);
}

////////////////////////////////////////////////////////////////////////////////
// ButtonSelect: Show selected button state
////////////////////////////////////////////////////////////////////////////////
function ButtonSelect
(
	oTarget,
	szImageName
) 
{
	if (oTarget.src != ButtonItem[szImageName].Disable.src)
	{
		// Remove focus from currently selected item
		eval(g_aryFocusTable[g_CurrentFocus][5].substr(1,g_aryFocusTable[g_CurrentFocus][5].length-2));

		if ( (null != ButtonItem[szImageName]) && (document.images) )
		{ 
			oTarget.src = ButtonItem[szImageName].Select.src;
			g_CurrentFocus = GetIndexFromObject(oTarget);
		}
	}
	
	PlaySound(SOUND_SELECT);
}

////////////////////////////////////////////////////////////////////////////////
// ButtonDeselect: Show deselected button state
////////////////////////////////////////////////////////////////////////////////
function ButtonDeselect
(
	oTarget,
	szImageName
)
{
	if (oTarget.src != ButtonItem[szImageName].Disable.src)
	{
		if ( (null != ButtonItem[szImageName]) && (document.images) ) 
		{
			oTarget.src = ButtonItem[szImageName].Deselect.src;
		}
	}
}

////////////////////////////////////////////////////////////////////////////////
// ButtonDisable: Show disabled button state
////////////////////////////////////////////////////////////////////////////////
function ButtonDisable
(
	oTarget,
	szImageName
)
{
	if ( (null != ButtonItem[szImageName]) && (document.images) ) 
		oTarget.src = ButtonItem[szImageName].Disable.src;
}

////////////////////////////////////////////////////////////////////////////////
// GetIndexFromObject: Gets the index of the specified object from the g_aryFocusTable array
////////////////////////////////////////////////////////////////////////////////
function GetIndexFromObject
(
	oSource
)
{
	var iResult = null;
	
	for (var x=0; x<g_aryFocusTable.length; x++)
	{
		if (g_aryFocusTable[x][7] == oSource)
			iResult = x;
	}
	
	if (null == iResult)
		iResult = g_CurrentFocus;
		
	return iResult;
}

////////////////////////////////////////////////////////////////////////////////
// StartPageFadeIn
////////////////////////////////////////////////////////////////////////////////
function StartPageFadeIn()
{
	divMain.filters.item('DXImageTransform.Microsoft.Alpha').Opacity = 0;
	window.refreshTimer = window.setInterval("PageFadeIn()", FADE_IN_INTERVAL);
}

////////////////////////////////////////////////////////////////////////////////
// StopPageFadeIn
////////////////////////////////////////////////////////////////////////////////
function StopPageFadeIn()
{
	window.clearInterval(window.refreshTimer);

	// Reset to default settings
	divMain.filters.item('DXImageTransform.Microsoft.Alpha').Opacity = 100;
}

////////////////////////////////////////////////////////////////////////////////
// PageFadeIn
////////////////////////////////////////////////////////////////////////////////
function PageFadeIn()
{
	var iOpacity = divMain.filters.item('DXImageTransform.Microsoft.Alpha').Opacity;

	if (iOpacity >= 100)
		StopPageFadeIn();	// Stop the current fade effect
	else
	{
		// Set new opacity level
		divMain.filters.item('DXImageTransform.Microsoft.Alpha').Opacity = iOpacity + OPACITY_INTRVL;;
	}	
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// AlphaImage Button Handler
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Allocate new AlphaImage Button
////////////////////////////////////////////////////////////////////////////////
function AIButtonNew
(
	szName
) 
{
	AIButtonItem[szName] = new AIButtonItem(szName);
}

////////////////////////////////////////////////////////////////////////////////
//  Create AlphaImage Button Item
////////////////////////////////////////////////////////////////////////////////
function AIButtonItem
(	
	szName
)
{
	this.Select   = new Image();
	this.Select.src = "images\\" + szName + "_Select.png";
	this.Deselect = new Image();
	this.Deselect.src =	"images\\" + szName + "_Deselect.png";
	this.Disable = new Image();
	this.Disable.src =	"images\\" + szName + "_Disable.png";
	this.DisableSelect = new Image();
	this.DisableSelect.src = "images\\" + szName + "_DisableSelect.png";
}


////////////////////////////////////////////////////////////////////////////////
// AIButtonSelect: Show selected button state
////////////////////////////////////////////////////////////////////////////////
function AIButtonSelect
(
	oTarget,
	szImageName
) 
{
	if (oTarget.filters(0).src != AIButtonItem[szImageName].Disable.src)
	{
		// Remove focus from currently selected item (if there is one)
		if (g_CurrentFocus >= 0)
		{
			eval(g_aryFocusTable[g_CurrentFocus][5].substr(1,g_aryFocusTable[g_CurrentFocus][5].length-2));
		}

		if ( (null != AIButtonItem[szImageName]) && (document.images) )
		{ 
			oTarget.filters(0).src = AIButtonItem[szImageName].Select.src;
			g_CurrentFocus = GetIndexFromObject(oTarget);
		}
		
		PlaySound(SOUND_SELECT);
	}
	else
	{
		if ( (null != AIButtonItem[szImageName]) && (document.images) )
		{ 
			oTarget.filters(0).src = AIButtonItem[szImageName].DisableSelect.src;
			g_CurrentFocus = GetIndexFromObject(oTarget);
		}
	}
		
}

////////////////////////////////////////////////////////////////////////////////
// AIButtonDeselect: Show deselected button state
////////////////////////////////////////////////////////////////////////////////
function AIButtonDeselect
(
	oTarget,
	szImageName
)
{
	if (oTarget.filters(0).src != AIButtonItem[szImageName].Disable.src)
	{
		if ( (null != AIButtonItem[szImageName]) && (document.images) ) 
		{
			if (oTarget.filters(0).src == AIButtonItem[szImageName].DisableSelect.src)
				AIButtonDisable(oTarget,szImageName);
			else
				oTarget.filters(0).src = AIButtonItem[szImageName].Deselect.src;
		}
	}
}

////////////////////////////////////////////////////////////////////////////////
// AIButtonDisable: Show disabled button state
////////////////////////////////////////////////////////////////////////////////
function AIButtonDisable
(
	oTarget,
	szImageName
)
{
	if ( (null != AIButtonItem[szImageName]) && (document.images) ) 
	{
		oTarget.filters(0).src = AIButtonItem[szImageName].Disable.src;
		
		Nav_MarkAsDisabled(GetIndexFromObject(oTarget));	// Disable item
	}
}

////////////////////////////////////////////////////////////////////////////////
// GotoNextControl: Determine the next control
////////////////////////////////////////////////////////////////////////////////
function GotoNextControl
(
	oDisabled
)
{
	var oItem = g_aryFocusTable[g_CurrentFocus][7];
}

////////////////////////////////////////////////////////////////////////////////
// Background Fade Routines
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// StartBackgroundFade
////////////////////////////////////////////////////////////////////////////////
function StartBackgroundFade()
{
	window.refreshTimer = window.setInterval("BackgroundFade()", 250);
}

////////////////////////////////////////////////////////////////////////////////
// StopBackgroundFade
////////////////////////////////////////////////////////////////////////////////
function StopBackgroundFade()
{
	window.clearInterval(window.refreshTimer);
	
	// Reset to default settings
	g_iOpactiy   = 0;
	g_bOpacityUp = true;
}

////////////////////////////////////////////////////////////////////////////////
// BackgroundFade
////////////////////////////////////////////////////////////////////////////////
function BackgroundFade()
{
	if (g_bOpacityUp)
	{
		g_iOpacity = g_iOpacity + BG_OPACITY_INTRVL;
		if (g_iOpacity >= BG_OPACITY_MAX)
		{
			g_iOpacity = BG_OPACITY_MAX;
			g_bOpacityUp = false;
		}
	}
	else
	{
		g_iOpacity = g_iOpacity - BG_OPACITY_INTRVL;
		if (g_iOpacity <= 0)
		{
			StopBackgroundFade();	// Stop the current fade effect
			window.setTimeout("StartBackgroundFade()",BG_OPACITY_REFRSH);	// Start next fade effect
		}
	}
	divBackgroundOverlay.filters.item('DXImageTransform.Microsoft.Alpha').Opacity = g_iOpacity;
}

