// CONFIGURATION
var step             =        2;  // distance to move per cycle
var speed            =       10;  // time between cycles
var pause            =      500;  // time to wait when text reaches left gutter
var lpad             =        1;  // left gutter offset
var collection_id    = 'ticker';  // name of wrapper div

// GLOBALS
var curblock    =    0;    // currently displayed textblock
var lastblock   =   -1;    // last block, now scrolling past gutter
var headlines;             // text items to rotate
var collection;            // container object
var resetPos;              // where to start scrolling from
var scrollPos   =    0;    // scroll counter

function init() 
{
   if ( document.getElementById ) 
   {
      /* shift leftpadding slightly right for Moz */
      if ( document.addEventListener ) { lpad += 1; }
        
      /* fetch collection of text in scroller */
      collection = document.getElementById( collection_id );
        
      if ( collection.getElementsByTagName("div").length > 0 ) 
      {
         headlines = collection.getElementsByTagName("div");
         resetPos = collection.offsetWidth + lpad;
            
         /* place all text past right gutter */
         for ( i = 0; i < headlines.length; i++ ) 
         {
            headlines[i].style.left = resetPos;
            headlines[i].style.display = 'block';
         }
            
         ticker_go();

         addHandler( collection, "mouseover", ticker_hold );
         addHandler( collection, "mouseout",  ticker_go   );
      }
   }
   /* else browser is pre-w3c DOM, too annoying, degrade okayfully */
}

function ticker_go () 
{
   scrollPos += step;
   headlines[curblock].style.left = ( resetPos - scrollPos ) + "px";
    
   if ( lastblock >= 0 )
   {
      headlines[lastblock].style.left = ( lpad - scrollPos ) + 'px';
   }
    
   if ( headlines[curblock].offsetLeft <= lpad ) 
   {
      lastblock = curblock++;
      curblock %= headlines.length;
      scrollPos = 0;
        
      headlines[curblock].style.left = resetPos + 'px';
      tickertime = setTimeout( "ticker_go()", pause  );
      return;
   }
    
   tickertime = setTimeout( "ticker_go()", speed );
}

function ticker_hold () 
{
   clearTimeout( tickertime );
}

function addHandler ( obj, eventType, handler )
{
   if ( obj.addEventListener )
   {
      return obj.addEventListener( eventType, handler, true );
   }
  
   if ( obj.attachEvent )
   {
      return obj.attachEvent( "on" + eventType, handler );
   }
}

addHandler( window, "load", init );

