var marqueeTimer;
var marqueeWatchdog;
var marqueeScrollTimer;
var marqueeIsScrolling=true;
var marqueeScrollAmount=0;
var marqueeScrollHeight=0;
var marqueeScrollStep=0;
var marqueePause=false;
var marqueeExpired= true;
var marqueeDiv;
var marqueeTicker;
var marqueeDelay= 0;
var marqueeWaitForUpdate= 30;

function marqueeMayFetch() {
   marqueeExpired=true;
}

function marqueeFetch() {
    var a= AjaxCallback();
    if (a) {
       var v=a.split('::');
       if (!v[0]) v[0]= 300;
       clearTimeout(marqueeWatchdog);
       marqueeTimer=setTimeout(marqueeMayFetch, v[0]*1000);

       if (!v[1] || (v[1]=='-')) { // No more live games
          if (marqueeDiv) { marqueeDiv.display='none'; }
          if (!marqueeTicker) { marqueeTicker= document.getElementById('ticker'); }
          if (marqueeTicker) { marqueeTicker.style.display='none';  }
          clearTimeout(marqueeWatchdog);
          marqueeWatchdog= setTimeout('marqueeReload()', v[0]* 1000);
       }
       else {
          if (!marqueeDiv) { marqueeDiv=document.getElementById('marquee'); }
          if (!marqueeDiv) return;

          marqueeDiv.display='block';
          if (marqueeTicker) { marqueeTicker.style.display='block'; }
          marqueeExpired= false;
          if (v[1]) {
             marqueeDiv.innerHTML= v[1];
             marqueeScrollHeight= marqueeDiv.offsetHeight;
             marqueeScrollStep= (marqueeDiv.childNodes.length>1) ? marqueeDiv.childNodes[1].offsetTop- marqueeDiv.childNodes[0].offsetTop : 100;
             marqueeScroll();
          }
       }
    }
}

function marqueeStart() {
   if (marqueeTimer) clearTimeout(marqueeTimer);
   marqueeReload();
}

function marqueeReload() {
   marqueeExpired= false;
   AjaxCall('marquee.ajax.php', null, marqueeFetch);
   // We set a watchdog here to restart in case the update gets lost
   // This watchdog is canceled upon execution of marqueeFetch
   // if marqueeFetch is not executed in time, MarqueeReload will be restarted
   // The watchdog is guarded, in case marqueeReload is triggered externally
   marqueeWatchdog= setTimeout('marqueeReload()', marqueeWaitForUpdate* 1000);
}

// Make this scroll vertical, one table at a time, then stop, then continue
// On MouseOver stop marqueeIsScrolling
// Fetch the latest result while marqueeIsScrolling, always have two versions, so A is refreshed while B is shown and vice versa
//

function doScroll() {
   if (!marqueePause) marqueeScrollAmount--;

   if (marqueeScrollAmount+marqueeScrollHeight<0) {
      if (marqueeExpired) {
         if (marqueeScrollTimer) { clearTimeout(marqueeScrollTimer); marqueeTimer= 0; }
         marqueeReload();
      }
      marqueeScrollAmount=marqueeScrollStep;
   }
   if (marqueeDiv) {
      marqueeDiv.style.marginTop= marqueeScrollAmount+'px';
   }
}

function marqueeScroll() {
    marqueeDelay= ((marqueeScrollAmount % marqueeScrollStep)==-10) ? 3000 : 30;
    marqueeScrollTimer= setTimeout('marqueeScroll()', marqueeDelay);
    doScroll();
}

