//
// StreamStatus.js
// Paul Dragicevich, 7/10/2007
//
// Javascript to fetch and display the current club info.
//

// Define the namespace.
var StreamStatus = StreamStatus ? StreamStatus : new Object();

// Namespace variables for the page.
StreamStatus.UpdatePeriodMs = 60000;
StreamStatus.Request = false;
StreamStatus.TimeoutId = -1;

//
// StreamStatus.RequestStart
// Fire off the async request to get the stream info.
//
StreamStatus.RequestStart = function ()
{
   var url = './?action=StreamInfoDisplay&dts=' + (new Date()).valueOf();
   StreamStatus.Request = new Ajax.Request(url,
      { onSuccess: StreamStatus.RequestSuccess, method: 'get', onFailure: StreamStatus.RequestFailure }
   );
}

//
// StreamStatus.RequestSuccess
// Handle a successful async request callback - populate the fields on the page.
//
StreamStatus.RequestSuccess = function ( p_Transport )
{
   var response = StreamStatus.ParseResponseText(p_Transport.responseText);
   if (
      typeof(response.StreamStatus) === 'string' &&
      typeof(response.StreamCurrentSong) === 'string' &&
      typeof(response.CurrentDjGuid) === 'string' &&
      typeof(response.CurrentDjName) === 'string' &&
      typeof(response.StreamPlayUrl) === 'string' &&
      typeof(response.TimeDisplay === 'string' )
      )
   {
      var status = $('stream_status');
      var dj = $('stream_current_dj');
      var song = $('stream_current_song');
      var time = $('stream_time');
      var play = $('stream_play_url');
      
      so_clearInnerHTML(status);
      so_clearInnerHTML(dj);
      so_clearInnerHTML(song);
      so_clearInnerHTML(time);
      so_clearInnerHTML(play);

      var online = (response.StreamStatus === '1');
      act(status,(online ? 'ONLINE' : 'OFFLINE'));
      if ( online )
      {
         var djUrl = './?action=ProfileDetail&UserGUID=' + response.CurrentDjGuid;
         var djAnchor = dcea(djUrl,response.CurrentDjName);
         ac(dj,djAnchor);

         act(song,response.StreamCurrentSong);

         var playAnchor = dcea(response.StreamPlayUrl,'Launch Stream');
         ac(play,playAnchor);
      }
      else
      {
         act(dj,'n/a');
         act(song,'n/a');
         act(play,'n/a');
      }
      act(time,response.TimeDisplay);
   }
   
   StreamStatus.TimeoutId = setTimeout(StreamStatus.RequestStart,StreamStatus.UpdatePeriodMs);
}

//
// StreamStatus.RequestFailure
// Handle a request failure - keep the timer ticking.
//
StreamStatus.RequestFailure = function ()
{
   StreamStatus.TimeoutId = setTimeout(StreamStatus.RequestStart,StreamStatus.UpdatePeriodMs);
}


//
// StreamStatus.ParseResponseText
// Parse the delimited text returned by the call to the server into
// an associative object array.
//
StreamStatus.ParseResponseText = function ( p_ResponseText )
{
   var response = new Object();
   var line = p_ResponseText.split("\n");
   var lineIndex;
   var kv;
   var k;
   var kvIndex;
   for ( lineIndex = 0 ; lineIndex < line.length ; lineIndex++ )
   {
      kv = line[lineIndex].split('|');
      if ( kv.length > 1 )
      {
         k = kv[0];
         response[k] = '';
         for ( kvIndex = 1 ; kvIndex < kv.length ; kvIndex++ )
            response[k] += kv[kvIndex]+'|';
         response[k] = response[k].substr(0,response[k].length-1);
      }
   }
   return response;
}



Event.observe(window,'load',StreamStatus.RequestStart,false);

