var elementImage ;
var elementAnchor;
var isDom;
var highestIndex;
var counter;
var factorTotal;
var readyGlobal;
var timeout;

function getFactorTotal (items)
{
 var factorTotal = 0;
 
 for (var i = 0; i < items.length; i++)
 {
  factorTotal += items [i].getFactor ();
 }
 
 return factorTotal;
}

function setEmptyLaps (items, factorTotal)
{
 var emptyLaps;
 
 for (var i = 0; i < items.length; i++)
 {
  emptyLaps = Math.floor (factorTotal / items [i].getFactor ());
  
  this.factorTotal += emptyLaps * items [i].getFactor ();
  
  items [i].setEmptyLaps (emptyLaps);
 }
 
 //alert (this.factorTotal);
}

function getNextItemIndex (items)
{
 var item1;
 var item2;
 //var dacapo = true;
 
 for (var i = 0; i < items.length; i++)
 {
  item1 = items [i];
  
  if (item1.getLaps () == 0)
  {

   if (i > highestIndex)
   {
    highestIndex = i;
   }
   
   for (var j = 0; j <= highestIndex; j++)
   {
    item2 = items [j];

    item2.increaseLaps ();
    
    if (item2.getLaps () == item2.getEmptyLaps ())
    {
     item2.setLaps (0);
    }
   }
   
   this.counter ++;
   
   return i;
  }
 }

 clear (this.items);
 
 return 0;
}

function clear (items)
{
 //debugger;
 this.highestIndex = 0;
 this.counter      = 0;
 
 for (var i = 0; i < items.length; i++)
 {
  items [i].setLaps (0);
 }
}

function nextLoop ()
{
 var itemIndex;
 var delay;
 var url;
 var href;
 
 itemIndex = getNextItemIndex (this.items);

 if (counter >= this.factorTotal)
 {
  clear (items);
  
  nextLoop ();
  
  return;
 }
 
 delay = this.items [itemIndex].getDelay ();
 
 if (delay == null)
 {
  delay = this.delayDefault;
 }

 url = this.servletUrl;
 
 url += "?uri=";
 url += this.items [itemIndex].getUri ();
 url += "&laps=";
 url += this.counter;
  
 this.elementImage .src   = url;
 
 href = this.items [itemIndex].getHref  ();
 
 if (href == null)
 {
  this.elementAnchor.removeAttribute ("href");
 }
 
 else
 {
  if (this.elementAnchor.getAttribute ("href") == "")
  {
   this.elementAnchor.setAttribute ("href", href);
  }
  
  this.elementAnchor.href = href;
 }
 
 this.elementAnchor.title = this.items [itemIndex].getTitle ();

 if (this.items [itemIndex].getIsInternal ())
 {
  this.elementAnchor.target = "_self";
 }
 
 else
 {
  this.elementAnchor.target = "_blank";
 }
 
 this.timeout = window.setTimeout ("nextLoop ()", delay);
}

/**
function refreshBanner (bannerItems)
{
 window.clearTimeout(this.timeout);
 
 this.items = new Array ();
 
 for (var i = 0; i < bannerItems.length; i++)
 {
  this.items [i] = new Item
  (
   bannerItems [i].getUri      (),
   bannerItems [i].getHref     (),
   bannerItems [i].getTitle    (),
   bannerItems [i].getInternal (),
   bannerItems [i].getFactor   (),
   bannerItems [i].getDelay    () * 1000
  );
 }
 
 this.clear (this.items);
 this.init ();
}
**/

function initDOM ()
{
 this.elementImage  = document.getElementById ("rotatingImg" );
 this.elementAnchor = document.getElementById ("rotatingLink");
}

function init ()
{
 if (!readyItem || !readyGlobal)
 {
  var jsCall = "init ()";
  
  window.setTimeout (jsCall, 200);
  
  return;
 }
 
 if (!isDom)
 {
  return;
 }

 initDOM  ();
 
 this.factorTotal = 0;
 this.limit       = 0;
 
 setEmptyLaps (this.items, getFactorTotal (this.items));

 this.counter = 0;
 
 for (var i = 0; i < this.initialLaps; i++)
 {
  getNextItemIndex (this.items);
 }
 
 nextLoop ();
 
 //window.setTimeout ("nextLoop ()", this.delayDefault);
}

isDom        = (!!document.getElementById);
highestIndex = 0;
readyGlobal  = true;

// other globals are defined and instanciated dynamicly by linkrotation.jsp before init will be called;


