// SCRIPTS FOR UTILMENU.HTM


var ddmenuThisPage_Style = null;  // Style object for this page's entry in dd menu


function initialiseUtilMenu(pageID)
{
if (pageID > 0)
  {
  SetDHTMLElementVisibility(ddmenuHeader, true);
  SetDHTMLElementVisibility(utilHomeHeader, true);
  SetDHTMLElementVisibility(utilFavoritesHeader, true);
  SetDHTMLElementVisibility(utilPrintPageHeader, true);
  SetDHTMLElementVisibility(utilContactHeader, true);
  var ddmenuThisPage_IDString = 'ddmenuItem' + pageID;  
  ddmenuThisPage_Style        = GetDHTMLElementStyle(ddmenuThisPage_IDString);
  }
if (!BrowserIsInternetExplorer() || (InternetExplorerVersion() < 5)) alert('You will need Internet Explorer 5.0 or later   \nto view this web site correctly.\n\nA version of the site for users of Netscape 6 and      \nlater will go on line shortly.');
}



// -- Drop-down menu Popup --------------------------------------

var ddmenuDelay          = 200;   // No. of ms before closure
var ddmenuTimeoutID      = 0;
var ddmenuTimeoutRunning = false;


function hideddmenuPopup(event)
{
HidePopup('ddmenuPopup', event);
}


function showddmenuPopup(evt)
{
if (pageInitialised)
  {
  hideddmenuPopup(evt); 
  ShowPopup('ddmenuPopup', 0, LeftXOfInlineElem('ddmenuHeader') + (GetDHTMLElementWidth('ddmenuHeader')/2) - 32, TopYOfInlineElem('ddmenuHeader')+GetDHTMLElementHeight('ddmenuHeader')-2, evt);
  ddmenuThisPage_Style.display = 'none';

  }
}


function ddmenuTimeoutReset() // Called: onMouseOver all ddmenu elements
{ 
if (ddmenuTimeoutRunning)
  {
  clearTimeout(ddmenuTimeoutID);
  ddmenuTimeoutRunning = false;
  }
}


function ddmenuCloseAfterDelay(evt) // Called: onMouseOut all ddmenu elements
{
ddmenuTimeoutReset();
ddmenuTimeoutID      = setTimeout('hideddmenuPopup(' + evt + ')', ddmenuDelay);
ddmenuTimeoutRunning = true;
}


function ddmenuOpen(evt) // Called: onMouseOver parent link
{
ddmenuTimeoutReset(); // Clear any existing timeouts
showddmenuPopup(evt);
}







// -- Open / Close Animation ------------------------------------

// -- Open / Close Coords --
var anim_CP_X0 = -600;
var anim_CP_X1 = 150;
var anim_CP_Y0 = -700;
var anim_CP_Y1 = 88;
var anim_CP_DX = 0;
var anim_CP_DY = 0;

// -- Animation State Variables --
var CPIsClosed      = true;  // Set false when FULLY open, true again when FULLY closed
var anim_CPOpened_X = 0;     // Actual "opened" coords, set at END of Open animation
var anim_CPOpened_Y = 0;     //
var anim_CPOpen     = null;  // Animation objects (with .Start(), .Stop(), .Reset() methods)
var anim_CPClose    = null;  //



// -- Straight-Line, Sinusiodal-Speed Animation --

var anim_CP_DT = 1;
var anim_CP_K  = 0;

function anim_CPOpenX(T) { return(anim_CP_X0 + anim_CP_DX*Math.sin(anim_CP_K*T)); }
function anim_CPOpenY(T) { return(anim_CP_Y0 + anim_CP_DY*Math.sin(anim_CP_K*T)); }
function anim_CPOpenFinished(T, X, Y)
{
var Finished = (T >= anim_CP_DT);
if (Finished)
  {
  CPIsClosed = false;
  anim_CPOpened_X = X;
  anim_CPOpened_Y = Y;
  }
return(Finished);
}


function anim_CPCloseX(T) { return(anim_CPOpened_X - anim_CP_DX*Math.sin(anim_CP_K*T)); }
function anim_CPCloseY(T) { return(anim_CPOpened_Y - anim_CP_DY*Math.sin(anim_CP_K*T)); }
function anim_CPCloseFinished(T, X, Y)
{
var Finished = (T >= anim_CP_DT);
if (Finished) CPIsClosed = true;
return(Finished);
}



var anim_CP_Initialised = false;

function setupContactPanelAnims()
{
anim_CP_DX = anim_CP_X1 - anim_CP_X0;
anim_CP_DY = anim_CP_Y1 - anim_CP_Y0;
anim_CP_K  = Math.PI/(2*anim_CP_DT);
anim_CPOpen  = new Animation('anim_CPOpen',  anim_CPOpenX,  anim_CPOpenY,  defaultR, defaultTheta, anim_CPOpenFinished,  0.02, 0, 0, -10000, -10000, 1);
anim_CPClose = new Animation('anim_CPClose', anim_CPCloseX, anim_CPCloseY, defaultR, defaultTheta, anim_CPCloseFinished, 0.02, 0, 0, -10000, -10000, 1);
anim_CPOpen.AddTrailElement('contactPanel', 0, 0);
anim_CPClose.AddTrailElement('contactPanel', 0, 0);
anim_CP_Initialised = true;
}


var CPClick = false;

function anim_CP_PanelClick()
{
CPClick = true;
}


function anim_CP_AutoClose()
// To be called from each page's <BODY onClick="..."> event handler
// NB Clicks occurring in the panel should be swallowed by the panel's
// onClick event handler.
{
if (anim_CP_Initialised)
  {
  if ((!CPClick) && (!CPIsClosed) && (!anim_CPClose.running)) 
    {
    anim_CPClose.Reset();
    anim_CPClose.Start();
    }
  CPClick = false;
  }
}



function anim_CP_Toggle()
// Called from buttons' onClick handlers
{
if (anim_CP_Initialised)
  {
  if (CPIsClosed) 
         {
         if (!anim_CPOpen.running)
           {
           anim_CPOpen.Reset();
           anim_CPOpen.Start(); 
           }
         }
    else {
         if (!anim_CPClose.running)
           {
           anim_CPClose.Reset();
           anim_CPClose.Start();
           }
         }
  }
}
