/*
*
* should redo a lot of this with jquery!!!!!
*

########################################################
#                                                      #
# All code Copyright 2001-2005 by David Lee Cohen      #
# Copying, modification, or reuse is prohibited        #
# without written authorization from David Lee Cohen.  #
#                                                      #
########################################################
*/

var MoverSwitch = true; // saved in cookie
var MoverWhich = 1; // 1=moose, 2=cow truck, 3=dog flying, 4=pig flying, 5=hank popup, 6=propeller dog, 7=goat, 8=balloon
var MoverType = 1; // 1=around page, 2=popup, 3=zigzag up (not done)

var MoverImage; 
var MoverObject;
var MoverImageWidth;
var MoverImageHeight;
var MoverImageBase;
var BaseDir = "/images/mover/";
var MoverXMax;
var MoverYMax;
var MoverXAdj = 0;//-100;
var MoverYAdj = 0;

var MoverState = 0; // 0=load, 1=start, 2=stop

var MoverIconImage; // document object for start/stop text
var MoverIconText; // document object for start/stop text
var MoverIconLink; // document object for link start/stop
var MoverIconTextStart;  // start text
var MoverIconTextStop;   // stop text

var MoverDir = 1; // 1=left, 2=up, 3=right, 4=down
var MoverSeq = 0; // frame sequence set
var MoverSeqCnt = 1;
var MoverIx = new Array();  // current index
var MoverIxCnt = new Array(); // max frames
var MoverArray = new Array(); // array of array of images
var MoverLoopIxCnt = new Array(); // how many times to loop thru sequence
var MoverLoopIx = new Array(); // current loop index

var MoverID = -1;
var MoverLoadID = -1;
//var MoverImgLoadID = -1;

var MoverInterval = new Array(); // per sequence
var MoverLoadInterval = 100; // pretty big, allows animated headers to get going

var MoverXMove = new Array(); // per sequence, how many to move image, smaller = smoother
var MoverYMove = new Array(); // per sequence, how many to move image, smaller = smoother

var MoverXPos;
var MoverYPos;

var MoverSeq3Done = false; // toggle so not loop

var x=0;

function MoverSeq3Do()
{
  if (MoverSeqCnt < 3)
  {
    return false;
  }
  if (MoverSeq3Done)
  {
    MoverSeq3Done = false;
    return false;
  }
  else
  {
    MoverSeq3Done = true;
    MoverSeq = 3;
    MoverLoopIx[MoverSeq] = 1;
    MoverIx[MoverSeq] = 1;
    return true;
  }
}

function MoverMove()
{
  if (MoverID > 0)
  {
    clearTimeout(MoverID);
    MoverID = -1;
  }

  var xm, ym, ix;
  var src;

  if ((MoverSeq < 1) || (MoverSeq > MoverSeqCnt))
  // initialize
  {
    MoverSeq = 1;
    MoverIx[MoverSeq] = 1;
    MoverLoopIx[MoverSeq] = 1;
  }
  else
  // increment image
  {
    MoverIx[MoverSeq] += 1;
  }
  if (MoverIx[MoverSeq] == (MoverIxCnt[MoverSeq]+1))
  // check if at end of image sequence
  {
    MoverLoopIx[MoverSeq] += 1;
    if (MoverLoopIx[MoverSeq] > MoverLoopIxCnt[MoverSeq])
    // check if at end of number of loops thru sequence
    {
      MoverSeq += 1;
      if ((MoverSeq > MoverSeqCnt) || (MoverSeq > 2)) // seq 3 is special, end of line thing
      {
        MoverSeq = 1;
      }
      MoverLoopIx[MoverSeq] = 1;
    }
    MoverIx[MoverSeq] = 1;
  }
  if ((MoverIx[MoverSeq] == 1) && (MoverLoopIx[MoverSeq] == 1))
  // first image, first loop sequence
  {
//    if (MoverID > 0)
//    {
//      clearTimeout(MoverID);
//      MoverID = -1;
//    }
  }

  if (MoverType == 1) // around the page
  {
    if (MoverDir == 1)
    {
      MoverXPos -= MoverXMove[MoverSeq];
      if ((MoverXPos) < 0)
      {
        MoverDir += 1;
        MoverXPos = 0;
        MoverYPos = MoverYMax - MoverImageWidth;
        if (MoverSeq3Do())
        {
          MoverDir = 1;
          MoverXPos = 0;
          MoverYPos = MoverYMax - MoverImageHeight;
        }
      }
    }
    else if (MoverDir == 2)
    {
      MoverYPos -= MoverYMove[MoverSeq];
      if ((MoverYPos) < 0) // yes, width!
      {
        MoverDir += 1;
        MoverXPos = 0;
        MoverYPos = 0;
        if (MoverSeq3Do())
        {
          MoverDir = 2;
          MoverXPos = 0;
          MoverYPos = 0;
        }
      }
    }
    else if (MoverDir == 3)
    {
      MoverXPos += MoverXMove[MoverSeq];
      if ((MoverXPos + MoverImageWidth) > MoverXMax) 
      {
        MoverDir += 1;
        MoverXPos = MoverXMax - MoverImageHeight;
        MoverYPos = 0;
        if (MoverSeq3Do())
        {
          MoverDir = 3;
          MoverXPos = MoverXMax - MoverImageWidth;
          MoverYPos = 0;
        }
      }
    }
    else if (MoverDir == 4)
    {
      MoverYPos += MoverYMove[MoverSeq];
      if ((MoverYPos + MoverImageWidth) > MoverYMax) // yes width
      {
        MoverDir = 1;
        MoverXPos = MoverXMax - MoverImageWidth;
        MoverYPos = MoverYMax - MoverImageHeight;
        if (MoverSeq3Do())
        {
          MoverDir = 4;
          MoverXPos = MoverXMax - MoverImageHeight;
          MoverYPos = MoverYMax - MoverImageWidth;
        }
      }
    }
    src = MoverArray[MoverSeq][MoverDir][MoverIx[MoverSeq]].src;
//    $("#MoverImage").attr('src',MoverArray[MoverSeq][MoverDir][MoverIx[MoverSeq]].src);
  }
  else if (MoverType == 2) // popup
  {
    // double up max move, if less than max move, do negative
    xm = Math.round(2*MoverXMove[MoverSeq] * Math.random());
    ym = Math.round(2*MoverYMove[MoverSeq] * Math.random());
    if (xm <= MoverXMove[MoverSeq])
    {
      xm *= -1;
    }
    else
    {
      xm /= 2;
    }
    if (ym <= MoverYMove[MoverSeq])
    {
      ym *= -1;
    }
    else
    {
      ym /= 2;
    }
    xm = Math.round(xm);
    ym = Math.round(ym);
    MoverXPos += xm;
    MoverYPos += ym;
    if ((MoverXPos + MoverImageWidth) > MoverXMax)
    {
      MoverXPos = MoverXMax - MoverImageWidth;
    }
    else if (MoverXPos < 0)
    {
      MoverXPos = 0;
    }
    if ((MoverYPos + MoverImageHeight) > MoverYMax)
    {
      MoverYPos = MoverYMax - MoverImageHeight;
    }
    else if (MoverYPos < 0)
    {
      MoverYPos = 0;
    }
    ix = Math.round(Math.random()*MoverIxCnt[MoverSeq]);
    if (ix <= 0)
    {
      ix = 1;
    }
    src = MoverArray[1][1][ix].src;
//if (x<30)
//{alert(x + " " + ix + " at " + MoverXPos + " " + MoverYPos + " moved " + xm + " " + ym); x++;}
  }
  
  var top = MoverYPos + MoverYAdj;
  var left = MoverXPos + MoverXAdj;
  MoverObject.style.top = top+'px';
  MoverObject.style.left = left+'px';
  MoverImage.src = src;
  if (MoverState == 2)
  {
    MoverID = setTimeout('MoverMove()', MoverInterval[MoverSeq]); 
  }
}

function MoverStart()
{
  if (MoverState == 1)
  {
    if (!BrowserSupportsAnimation())
    {
      ShowBrowserNotSupported();
    }
    MoverState = 2;
    if (MoverIconText)
    {
      MoverIconText.innerHTML = MoverIconTextStop;
    }
    MoverMove();
    MoverSwitch = true;
    SetMoverCookie();
  }
  else if (MoverState == 2)
  {
    MoverState = 1;
    if (MoverIconText)
    {
      MoverIconText.innerHTML = MoverIconTextStart;
    }
    if (MoverID >= 0)
    {
//      clearInterval(MoverID);
      clearTimeout(MoverID);
      MoverID = -1;
    }
    MoverSwitch = false;
    SetMoverCookie();
  }
  else // loading
  {
    return;
  }
}

function MoverInit(mover, mainobject, innerobject)
// assumes:
// MoverImage
// MoverObject
// MoverIconImage
// MoverIconText
{
  MoverWhich = mover;
  MoverImage = document.getElementById("MoverImage");
  MoverObject = document.getElementById("MoverObject");
  if (!mainobject)
  {
    mainobject = document.body;
  }
  MoverXMax = parseInt(mainobject.style.width);
  MoverYMax = parseInt(mainobject.style.height);
  if (isNaN(MoverXMax))
  {
    MoverXMax = GetDocumentWidth();
  }
  if (isNaN(MoverYMax))
  {
    MoverYMax = GetDocumentHeight();
  }
  MoverXMax -= 20; // buffer, so horiz scrollbars not suddenly pop up
  if (innerobject) // to adjust x,y
  {
    MoverXAdj = -1 * parseInt(innerobject.style.left);
    MoverYAdj = -1 * parseInt(innerobject.style.top);
  }
  if (!MoverImage || !MoverObject || (MoverXMax < 0) || (MoverYMax < 0))
  {
    return;
  }

  if (MoverXMax < 400)
  {
    MoverXMax = 400;
  }
  if (MoverYMax < 400)
  {
    MoverYMax = 400;
  }
  MoverIconText = document.getElementById("MoverIconText");
  MoverIconImage = document.getElementById("MoverIconImage");
  MoverIconLink = document.getElementById("MoverIconLink");

  MoverType = 1;
  MoverSeqCnt = 1;
  MoverIxCnt[1] = 0;
  MoverIxCnt[2] = 0;
  MoverIxCnt[3] = 0;
  MoverLoopIxCnt[1] = 1;
  MoverLoopIxCnt[2] = 0;
  MoverLoopIxCnt[3] = 0;
  MoverXMove[1] = 5;
  MoverXMove[2] = 0;
  MoverXMove[3] = 0;
  MoverYMove[1] = 5;
  MoverYMove[2] = 0;
  MoverYMove[3] = 0;
  MoverArray[1] = new Array();
  MoverInterval[1] = 100; // bigger = slower  100 is too small for FF
  MoverInterval[2] = 5000; // bigger = slower
  MoverInterval[3] = 5000; // bigger = slower
  if (MoverWhich == 1) // moose
  {
//    MoverImageBase = "http://www.lumbybooks.com" + "/images/moose";
    MoverImageBase = BaseDir+"moose";
    MoverIconTextStart = "Go Moose!";
    MoverIconTextStop = "Halt Moose!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"mooseicon.gif";
    }
    MoverImageWidth = 72;
    MoverImageHeight = 100;
    MoverSeqCnt = 2;
    MoverIxCnt[1] = 8;
    MoverIxCnt[2] = 1;
    MoverArray[2] = new Array();
    MoverLoopIxCnt[1] = 10;
    MoverLoopIxCnt[2] = 1;
    MoverXMove[1] = 5;
    MoverYMove[1] = 5;
  }  
  else if (MoverWhich == 2) // cows in truck
  {
    MoverImageBase = BaseDir+"cowstruck";
    MoverIconTextStart = "Go Truck!";
    MoverIconTextStop = "Halt Truck!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"cowstruckicon.gif";
    }
    MoverImageWidth = 78;
    MoverImageHeight = 69;
    MoverIxCnt[1] = 4;
    MoverXMove[1] = 5;
    MoverYMove[1] = 5;
  }  
  else if (MoverWhich == 3) // flying dog
  {
    MoverImageBase = BaseDir+"dogfly";
    MoverIconTextStart = "Go Dog!";
    MoverIconTextStop = "Halt Dog!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"dogflyicon.gif";
    }
    MoverImageWidth = 92;
    MoverImageHeight = 62;
    MoverIxCnt[1] = 8;
    MoverXMove[1] = 5;
    MoverYMove[1] = 5;
  }  
  else if (MoverWhich == 4) // flying pig
  {
    MoverImageBase = BaseDir+"pigfly";
    MoverIconTextStart = "Go Pig!";
    MoverIconTextStop = "Halt Pig!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"pigflyicon.gif";
    }
    MoverImageWidth = 72;
    MoverImageHeight = 66;
    MoverIxCnt[1] = 8;
    MoverXMove[1] = 5;
    MoverYMove[1] = 5;
  }  
  else if (MoverWhich == 5) // hank
  {
    MoverType = 2;
    MoverImageBase = BaseDir+"flamingo";
    MoverIconTextStart = "Go Hank!";
    MoverIconTextStop = "Halt Hank!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"flamingoicon.gif";
    }
    MoverImageWidth = 75;
    MoverImageHeight = 75;
    MoverIxCnt[1] = 4;
    MoverXMove[1] = MoverXMax; // Math.round(MoverXMax/10); // max move
    MoverYMove[1] = MoverYMax; // Math.round(MoverYMax/10); // max move
    MoverInterval[1] = 3000; // bigger = slower
  }  
  else if (MoverWhich == 6) // propeller dog
  {
    MoverImageBase = BaseDir+"dogprop";
    MoverIconTextStart = "Go Doggy!";
    MoverIconTextStop = "Halt Doggy!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"dogpropicon.gif";
    }
    MoverImageWidth = 48;
    MoverImageHeight = 104;
    MoverIxCnt[1] = 8;
    MoverXMove[1] = 5;
    MoverYMove[1] = 5;
  }  
  else if (MoverWhich == 7) // goat
  {
    MoverImageBase = BaseDir+"goat";
    MoverIconTextStart = "Go Goat!";
    MoverIconTextStop = "Halt Goat!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"goaticon.gif";
    }
    MoverImageWidth = 81;
    MoverImageHeight = 100;
    MoverSeqCnt = 3;
    MoverIxCnt[1] = 8;
    MoverIxCnt[2] = 1;
    MoverIxCnt[3] = 1;
    MoverArray[2] = new Array();
    MoverArray[3] = new Array();
    MoverLoopIxCnt[1] = 10;
    MoverLoopIxCnt[2] = 1;
    MoverLoopIxCnt[3] = 1;
    MoverXMove[1] = 5;
    MoverYMove[1] = 5;
  }  
  else if (MoverWhich == 8) // hot air balloon
  {
    MoverImageBase = BaseDir+"balloon";
    MoverIconTextStart = "Go Balloon!";
    MoverIconTextStop = "Halt Balloon!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"balloonicon.gif";
    }
    MoverImageWidth = 66;
    MoverImageHeight = 100;
    MoverIxCnt[1] = 8;
    MoverXMove[1] = 4;
    MoverYMove[1] = 4;
  }  
  else if (MoverWhich == 9) // horse
  {
    MoverImageBase = BaseDir+"horse";
    MoverIconTextStart = "Go Horse!";
    MoverIconTextStop = "Halt Horse!";
    if (MoverIconImage)
    {
      MoverIconImage.src = BaseDir+"horseicon.gif";
    }
    MoverImageWidth = 84;
    MoverImageHeight = 100;
    MoverIxCnt[1] = 8;
    MoverLoopIxCnt[1] = 10;
    MoverXMove[1] = 5;
    MoverYMove[1] = 5;
  }  
  MoverDir = 3; // start going right
  MoverXPos = 0;
//  MoverYPos = MoverYMax - MoverImageWidth;
  MoverYPos = 0;

  if (MoverType == 2) // random popup
  {
    // random start
    MoverXPos = Math.round(Math.random()*MoverXPos);
    MoverYPos = Math.round(Math.random()*MoverYPos);
  }
  
  if (MoverIconText)
  {
    MoverIconText.innerHTML = "Loading...";
  }
  
  MoverLoad();
}

var ImageCache = [];
var ImageCacheCnt = 0;
var ImageLoadCnt = 0;
var ImageTotalCnt = -1;
function MoverLoad()
{
  var dirs;
  var sx,dx,ix;
  var img;
  
  if (MoverType == 1)
  {
    dirs = 4;
  }
  else
  {
    dirs = 1;
  }

  for (sx = 1; sx <= MoverSeqCnt; sx++) // sequence
  {
    for (dx = 1; dx <= dirs; dx++) // direction
    {
      MoverArray[sx][dx] = new Array();
      for (ix = 1; ix <= MoverIxCnt[sx]; ix++) // images
      {
        ImageTotalCnt += 1;
        MoverArray[sx][dx][ix] = new Image();
        img = MoverImageBase + sx + dx + ix + ".gif";
        MoverArray[sx][dx][ix].src = img;
        ImageCache[ImageTotalCnt] = img;
      }
    }
  }
  $.preLoadImages(ImageCache,MoverLoaded);
/*  
  for (sx = 1; sx <= MoverSeqCnt; sx++) // sequence
  {
    for (dx = 1; dx <= dirs; dx++) // direction
    {
      MoverArray[sx][dx] = new Array();
      for (ix = 1; ix <= MoverIxCnt[sx]; ix++) // images
      {
        MoverArray[sx][dx][ix] = new Image();
        ImageCacheCnt += 1;
        ImageCache[ImageCacheCnt] = document.createElement('img');
        ImageCache[ImageCacheCnt].src = MoverImageBase + sx + dx + ix + ".gif";
        MoverArray[sx][dx][ix].src = MoverImageBase + sx + dx + ix + ".gif";
        ImageCache[ImageCacheCnt].onload = function() 
        { 
          ImageLoadCnt += 1;
          if (ImageLoadCnt >= ImageTotalCnt) MoverLoaded();
        };
        
      }
    }
  }
  // guess what? ie8 won't fire event if pull image from cache!
  if (BrowserName == BROWSER_MSIE)
  {
    // so, set timeout and if nothing loaded by then, assume they were cached
    MoverImgLoadID = setTimeout('MoverImgLoaded()', 3000); 
  }
*/
}
/*
function MoverImgLoaded()
// only for IE
{
  if (ImageLoadCnt <= 0) // waited awhile, probably got from cache
  {
    clearTimeout(MoverImgLoadID);
    MoverImgLoadID = -1;
    MoverLoaded();
    // possible here that loading was slow, too bad ie, no animation for you!
  }
}
*/
function MoverLoaded()
{
  // all loaded
/*  
  if (MoverImgLoadID > 0)
  {
    clearTimeout(MoverImgLoadID);
    MoverImgLoadID = -1;
  }
*/
  if (MoverIconLink)
  {
    MoverIconLink.href = "javascript:MoverStart();";
  }
  if (!BrowserSupportsAnimation())
  {
    MoverSwitch = false;
  }
  else
  {
    GetMoverCookie();
  }
  if (MoverSwitch)
  {
    if (MoverIconText)
    {
      MoverIconText.innerHTML = MoverIconTextStart;
      MoverState = 1;
    }
    else
    {
      MoverState = 1; // no on/off switch, turn it on!
    }
  }
  else
  {
    if (MoverIconText)
    {
      MoverIconText.innerHTML = MoverIconTextStop;
      MoverState = 2;
    }
  }
  MoverStart();
}

function GetMoverCookie()
{
  var cookie = document.cookie;
  // mover on by default
  if (cookie.indexOf("MoverSwitch=false") >= 0)
  {
    MoverSwitch = false;
  }
}

function SetMoverCookie()
{
  var cookie = "";
  
  cookie += "MoverSwitch=" + MoverSwitch;
  cookie += "; expires=" + GetCookieExp(1);
  document.cookie = cookie;
}



