var marqueeTimer=0;
var marqueeWatchdog=0;
var marqueeScrollTimer=0;
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;
       if (marqueeWatchdog) clearTimeout(marqueeWatchdog);
       marqueeTimer=setTimeout(marqueeMayFetch, v[0]*1000);

       if (v[1]=='-') { // No more live games
          if (marqueeDiv) { marqueeDiv=null; }
          if (!marqueeTicker) { marqueeTicker= document.getElementById('ticker'); }
          if (marqueeTicker) { marqueeTicker.style.display='none';  }
       }
       else { // callback dictates refresh rate in text up to '::'
          if (!marqueeDiv) {
             if (marqueeTicker) { marqueeTicker.style.display='block'; }
             marqueeDiv=document.getElementById('marquee');
             if (!marqueeDiv) return;
          }
          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();
       }
    }
}

// Name should be marqueeStart...
function marqueeUpdate(delay) {
   if (marqueeTimer) clearTimeout(marqueeTimer);
//   marqueeTimer=setTimeout(marqueeReload, delay* 1000); // To make sure we get started..
   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
   if (!marqueeWatchdog) 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();
}
