var nCallouts             = 10;
var nCalloutVisible       = 2;
var ndxCallout            = 0;
var aTweens               = new Array();
var bTweensPaused         = true;
var playList              = new Array();
var bPlayPaused           = false;
var bDisplaySubnav        = false;
var bSpaDiscoveryOpen     = false;
var bDiscoverYourselfOpen = false;
var bDiscoveryOpen        = false;
var bDiscoveryTipsOpen    = false;


// scrolling callout functions
function scrollCalloutLeft()
{
  if (ndxCallout == 0)
  {
    ndxCallout = 6;
    setMarginLeft("calloutScroller", 6 * -210);
  }

  ndxCallout--;
  var newLeftMargin = ndxCallout * -210;
  addTween("calloutScroller", "marginLeft", newLeftMargin, true);
}

function scrollCalloutRight()
{
  if (ndxCallout == nCallouts)
  {
    ndxCallout = 0;
    setMarginLeft("calloutScroller", 0);
  }

  ndxCallout++;
  var newLeftMargin = ndxCallout * -210;
  addTween("calloutScroller", "marginLeft", newLeftMargin, true);
}

function scrollCalloutRightAuto()
{
  scrollCalloutRight ();
  playListAppend ("setCalloutScrollRightTimer()");
}

function setCalloutScrollRightTimer()
{
  calloutScrollTimer = setTimeout("scrollCalloutRightAuto()",5000);
}

// discover yourself functions
function hideResult()
{
  if (talent != 0)
  {
    addTween ("resultTalent" + talent, "opacity", "0",    false);
    addTween ("resultTalent" + talent, "display", "none", false);
  }
  else
  if (travel != 0)
  {
    addTween ("resultTravel" + travel, "opacity", "0",    false);
    addTween ("resultTravel" + travel, "display", "none", false);
  }
  else
  if (dream != 0)
  {
    addTween ("resultDream" + dream, "opacity", "0",    false);
    addTween ("resultDream" + dream, "display", "none", false);
  }
}

function showResult(name)
{
  if (name == "talent")
  {
    addTween ("resultTalent" + talent, "display", "block", false);
    addTween ("resultTalent" + talent, "opacity", "100",   false);
  }
  if (name == "travel")
  {
    addTween ("resultTravel" + travel, "display", "block", false);
    addTween ("resultTravel" + travel, "opacity", "100",   false);
  }
  if (name == "dream")
  {
    addTween ("resultDream"  + dream,  "display", "block", false);
    addTween ("resultDream"  + dream,  "opacity", "100",   false);
  }
}

function getOpacity(divName) 
{ 
  return(getStyle(divName, 'opacity') * 100);
}
function setOpacity(divName, opacity)
{
  $(divName).style.opacity = opacity / 100;
  $(divName).style.filter  = 'alpha(opacity=' + opacity + ')';
}


// product detail functions
function showIngredients()
{
  moveCurrentTabOut();
  addTween("ingredients",   "display",   "block", false);
  addTween("ingredients",   "marginTop", 1,         false);
}
function showBestWith()
{
  moveCurrentTabOut();
  addTween("bestWith",      "display",   "block", false);
  addTween("bestWith",      "marginTop", 1,         false);
}

function moveCurrentTabOut()
{
  if (currentTab == "optionIngredients")
  {
    addTween("ingredients",   "marginTop", 118,    true);
    addTween("ingredients",   "display",   "none", false);
  }
  else
  if (currentTab == "optionBestWhen")
  {
    addTween("bestWith",      "marginTop", 118,    true);
    addTween("bestWith",      "display",   "none", false);
  }
}

// nav bar functions
function overMenu(divName)
{
  if (divName)
    if (currentPage != divName)
    {
      setCursor(divName + "_text", "pointer");
      setBackgroundImage(divName, backgroundFocus);
    }
  bDisplaySubnav = true;
}
function outMenu(divName)
{
  if (divName)
    if (currentPage != divName)
      setBackgroundImage(divName, "");

  bDisplaySubnav = false;
  setTimeout ("collapseOptions()", 4000);
}

function collapseOptions()
{
  if ((currentPage != "/spadiscovery/OlaySpaDiscovery.do")   && (currentPage != "/spadiscovery/ProductDetail.do")       && (currentPage != "/spadiscovery/CreateYourSpaDiscovery.do"))
    collapseSpaDiscovery     ();

  if ((currentPage != "/spadiscovery/DiscoverYourself.do")   && (currentPage != "/spadiscovery/HandwritingAnalysis.do") && (currentPage != "/spadiscovery/DreamAnalysis.do"))
    collapseDiscoverYourself ();

  if ((currentPage != "/spadiscovery/Discovery.do")          && (currentPage != "/spadiscovery/DiscoveryForum.do")      && (currentPage != "/spadiscovery/TellAFriendGiftOfMeTime.do"))
    collapseDiscovery        ();

  if ((currentPage != "/spadiscovery/DailyDiscoveryTips.do") && (currentPage != "/spadiscovery/ConsumerTips.do")        && (currentPage != "/spadiscovery/ShareATip.do"))
    collapseDiscoveryTips    ();
}

function expandSpaDiscovery()
{
  bDisplaySubnav = true;
  if (bSpaDiscoveryOpen == false)
  {
    bSpaDiscoveryOpen = true;
    addTween("spaDiscoverySubNav", "height", 52, true);
  }
}
function expandDiscoverYourself()
{
  bDisplaySubnav = true;
  if (bDiscoverYourselfOpen == false)
  {
    bDiscoverYourselfOpen = true;
    addTween("discoverYourselfSubNav", "height", 40, true);
  }
}
function expandDiscovery()
{
  bDisplaySubnav = true;
  if (bDiscoveryOpen == false)
  {
    bDiscoveryOpen = true;
    addTween("discoverySubNav", "height", 40, true);
  }
}
function expandDiscoveryTips()
{
  bDisplaySubnav = true;
  if (bDiscoveryTipsOpen == false)
  {
    bDiscoveryTipsOpen = true;
    addTween("discoveryTipsSubNav", "height", 40, true);
  }
}

function collapseSpaDiscovery()
{
  if (bDisplaySubnav == false)
  {
    bSpaDiscoveryOpen = false;
    addTween("spaDiscoverySubNav", "height", 1, true);
  }
}
function collapseDiscoverYourself()
{
  if (bDisplaySubnav == false)
  {
    bDiscoverYourselfOpen = false;
    addTween("discoverYourselfSubNav", "height", 1, true);
  }
}
function collapseDiscovery()
{
   if (bDisplaySubnav == false)
  {
    bDiscoveryOpen = false;
    addTween("discoverySubNav", "height", 1, true);
  }
}
function collapseDiscoveryTips()
{
  if (bDisplaySubnav == false)
  {
    bDiscoveryTipsOpen = false;
    addTween("discoveryTipsSubNav", "height", 1, true);
  }
}


// tween functions
function Tween (who, what, whereTo, when)
{
  this.who     = who;
  this.what    = what;
  this.whereTo = whereTo;
  this.when    = when;
}

function addTween(who, what, whereTo, when)
{
  //alert("adding Tween: " + what);
  var nTweens   = aTweens.length;
  var lastTween = aTweens[nTweens - 1];

  // always pause everything before altering tween and play lists - just keeps thing simple
  pauseTweens();

  if (nTweens == 0)
  {
    aTweens[0] = new Tween (who, what, whereTo, when);
  }
  else
  {
    // check if the last tween in the tween Q is the same or opposite and this new one
    //  if so, then replace it with the new one
    lastTween = aTweens[nTweens - 1];
    if ((lastTween.who == who) && ((lastTween.what == what) || (isOppositeTween(lastTween.what, what))))
    {
      // replace last tween with this new tween command
      aTweens[nTweens - 1].whereTo = whereTo;
    }
    else
    {
      // add to end of tween todo list
      aTweens[nTweens] = new Tween (who, what, whereTo, when);
    }
  }

  playTweens();
}

function isOppositeTween(currentWhat, nextWhat)
{
  var bOpposite = false;

  if ((currentWhat == "marginLeft")  && (nextWhat == "marginRight"))
    bOpposite = true;
  else
  if ((currentWhat == "marginRight") && (nextWhat == "marginLeft"))
    bOpposite = true;

  return (bOpposite);
}

function playTweens ()
{
  // if tweens are not being play, start them
  if (bTweensPaused)
    executeTweens();
  bTweensPaused = false;
}

function executeTweens ()
{
  var cmds  = new Array();
  var tween;

  if (aTweens.length != 0)
  {
    tween = aTweens.shift();
    //alertTween(tween);

    buildCmdList   (tween, cmds);
    playListAdd    (cmds, tween.when);
    playUnpause    ();
    play           ();
  }
  else
  {
    pauseTweens    ();
  }
}

function buildCmdList (tween, cmds)
{
  var suffix = ')';
  var prefix;

  if (tween.what == "marginLeft")
  {
    prefix = 'setMarginLeft("' + tween.who + '", ';
    calcIncrements (getMarginLeft(tween.who), tween.whereTo, cmds);
  }
  if (tween.what == "marginTop")
  {
    prefix = 'setMarginTop("' + tween.who + '", ';
    calcIncrements (getMarginTop(tween.who), tween.whereTo, cmds);
  }
  if (tween.what == "height")
  {
    prefix = 'setHeight("' + tween.who + '", ';
    calcIncrements (getHeight(tween.who), tween.whereTo, cmds);
  }
  if (tween.what == "opacity")
  {
   //alert('starting calcs');
   //alert(getOpacity(tween.who));
   //alert(tween.whereTo);
    prefix = 'setOpacity("' + tween.who + '", ';
    calcIncrements (getOpacity(tween.who), tween.whereTo, cmds);
  }
  if (tween.what == "display")
  {
    prefix = '';
    if (tween.whereTo == "none")
      cmds[0] = 'unblock("' + tween.who + '"';
    else
      cmds[0] = 'block("' + tween.who + '"';
  }

  for (var ndx=0; ndx < cmds.length; ndx++)
    cmds[ndx] = prefix + cmds[ndx] + suffix;
}

function pauseTweens ()
{
  bTweensPaused = true;
}

function alertTween (tween)
{
  alert ("Tween = " + tween.who + " " + tween.what + " " + tween.whereTo);
}


function calcIncrements (orgValue, newValue, cmds)
{
  var delta;
  try
  {
    orgValue = parseInt(orgValue);
    newValue = parseInt(newValue);
    delta    = newValue - orgValue;

    cmds[0]   = orgValue + delta * .02;
    cmds[1]   = orgValue + delta * .06;
    cmds[2]   = orgValue + delta * .2;
    cmds[3]   = orgValue + delta * .5;
    cmds[4]   = orgValue + delta * .8;
    cmds[5]   = orgValue + delta * .94;
    cmds[6]   = orgValue + delta * .98;
    cmds[7]   = newValue;
  }
  catch (err)
  {
    alert (err.description);
  }
}

function play ()
{
  if ((playList.length != 0) && (bPlayPaused == false))
  {
    currentSelection = playList.shift();
    //logDebug (currentSelection);
    //alert ("pause before " + currentSelection);
    eval (currentSelection);
    //alert ("pause after " + currentSelection);
  }
  else
  {
    if (bPlayPaused != false)
      executeTweens ();
  }

  if ((playList.length != 0) && (bPlayPaused == false))
    setTimeout ("play()", 66);
}

function playListAdd (items, bImmediate)
{
  if (bImmediate)
  {
    for (var ndx = 0; ndx < items.length; ndx++)
    {
      //alert (ndx + " " + items[ndx]);
      if (playList.length > ndx)
        playList[ndx] = playList[ndx] + ";" + items[ndx];
      else
        playList[ndx] = items[ndx];
    }
  }
  else
  {
    playList = playList.concat (items);
  }
}

function playListAppend (item)
{
  playList.push(item);
}

function playUnpause ()
{
  bPlayPaused = false;
}

function playPause ()
{
  bPlayPaused = true;
}

