/********************************************************************************

  Rotate Banner v1.0 

  Version: 0.9 - 2002   - created for Internet Explorer 4.0+

  Version: 1.0 - Nov 05 - added support for FireFox
                        - tested with FireFox 1.0.7 , IE 6.0.2600, Opera 8.02

  Copyright (c) 2002-2005 by Robert Piller. All rights reserved. 

  No distribution of this script is allowed without permission. This script may 
  not be used without permission. Send email to robert@allrightnow.com to 
  obtain a free license to use the script, for commercial and non-commercial use.
  
********************************************************************************/


function RB_RotateBanner(instname, bannerdisp, startnow, timeoutsecs, sel)
{
// private properties

   var self = this;
   var rb_instname = instname;	// instance name
   var rb_main = bannerdisp;	// object to display banners in
   var rb_isoff = true;		// default = rotating is off
   var rb_cnt = -1;		// current index into rb_sel
   var rb_numbanners = 0;	// number of banners defined
   var rb_timer = 0;		// handle to timer object
   var rb_stopped = false;	// timer is stopped initially
   var rb_timeout = 0;		// in milliseconds
   var rb_min = 255;		// min banner number, used to get a random banner
   var rb_max = -1;		// max banner number, used to get a random banner
   var rb_currbanner = -1;	// currently displayed banner
   var rb_sel = new Array();	// banner display list, entry value of 0 causes a random selection

// constructor code

   try
   {
      if (document.getElementById)
         rb_numbanners = document.getElementById("RB_Banners").childNodes.length;
      else if (document.all)
         rb_numbanners = document.all.RB_Banners.childNodes.length;
   }
   catch(e) {}
   
   if (rb_numbanners == 0)
      return;

   rb_isoff = false;
   
   //alert('In RB_Init');
   rb_timeout = timeoutsecs * 1000;
   rb_sel = sel;
   for(i = 0; i < rb_sel.length; i++)
      if (rb_sel[i] != 0)
      {  if (rb_sel[i] < rb_min) rb_min = rb_sel[i];
         if (rb_sel[i] > rb_max) rb_max = rb_sel[i];
      }
   if (rb_min = 255) rb_min = 1;
   if (rb_max = -1) rb_max = rb_numbanners;
   //alert('rb_numbanners = ' + rb_numbanners + ', rb_sel.length = ' + rb_sel.length + ', instance = ' + rb_instname + ', timeout = ' + rb_timeout);
   if (startnow)
      RB_ChangeBanner();
   else
   {  rb_stopped = true;
      RB_StartBanner();
   }

// private methods

function RB_GetRandom(l_low, l_high)
{
   var iRnd = Math.floor(Math.random()*100);
   //alert( iRnd );
   iRnd = iRnd % (l_high - l_low + 1);
   iRnd = l_low + iRnd;
   //alert( iRnd );
   return iRnd;
}

function RB_ChangeBanner()
{
   //alert('In RB_ChangeBanner - rb_sel.length = ' + rb_sel.length);
   rb_cnt++;
   if (rb_cnt >= rb_sel.length)
      rb_cnt = 0;
   i = rb_sel[rb_cnt];
   //alert('i = ' + i);
   if (i == 0)
   {  j = RB_GetRandom(rb_min, rb_max);
      if (j != (rb_currbanner + 1))
         i = j;
      else
      if (j++ > rb_numbanners) 
         i = 0;
      else
         i = j;
   }
   else
   if (i > 0)
      i--;
   if (i >= rb_numbanners)
      i = rb_numbanners - 1;
   //alert('In RB_ChangeBanner - rb_sel.length = ' + rb_sel.length + ', banner = ' + i + ', rb_instname = ' + rb_instname);
   if (i < 0)
      rb_main.innerHTML = '';
   else if (document.getElementById)
      rb_main.innerHTML = document.getElementById("RB_Banner" + (i + 1)).innerHTML;
   else
      rb_main.innerHTML = document.all.RB_Banner(i).innerHTML;
   rb_currbanner = i;
   rb_stopped = true;
   RB_StartBanner();
}

function RB_StartBanner()
{
   if (rb_stopped)
   {  rb_timer = setTimeout(rb_instname + '.ChangeBanner()', rb_timeout);
      //rb_timer = setTimeout(function () {self.ChangeBanner() }, rb_timeout);
      //alert('RB_StartBanner - rb_timer = ' + rb_timer);
      rb_stopped = false;
   }
}

function RB_StopBanner()
{
   //alert('RB_StopBanner - rb_timer = ' + rb_timer);
   clearTimeout(rb_timer);
   rb_stopped = true;
}

// privileged methods

this.StartBanner = function ()
{
   if (rb_isoff) return;
   RB_StartBanner();
}

this.ChangeBanner = function ()
{
   if (rb_isoff) return;
   RB_ChangeBanner();
}

this.StopBanner = function ()
{
   if (rb_isoff) return;
   RB_StopBanner();
}

} // end of RB_RotateBanner

