﻿    //##============================================================================
    //## INITIALIZATION
    //##============================================================================
    
    var isPageLoaded = false;
    var gatewayURL = 'http://sa-m.streamads.com/view?t=g&o=jsonx&mmf=3&cbfunc=cbGatewayLoaded&allsync=bt&pid=' + pubID ;
    var bannerRotatorURL = 'http://sa-m.streamads.com/view?t=b&zid=2&ct=1&o=jsonx&l=1&bsr=468,60,768,90&cbfunc=cbRotateBanner&pid=' + pubID ;
    var coverRotatorURL = 'http://sa-m.streamads.com/view?t=b&zid=2&ct=1&o=jsonx&l=1&bs=300,250&cbfunc=cbRotateCover&pid=' + pubID ;
    var playerGateway;
    var playerStation;    
    var idAbort = null;  
    var gwPlayer; 
    var gwDone = false;
    //isTalk is a comma delimited list of stations that are talk or sports stations
    var isTalk = '120608,121343,121346,121366,121365';
    
    //##  END INIT
    
    //########################################################
    //## Once the DOM is loaded we can begin
    //########################################################    
    function pageLoaded()
    {
     //do this only onetime
     if (isPageLoaded) {
       return;
     } else {
         isPageLoaded = true;  //set the page loaded flag 
     }       

     // setup the station links
     var oMyLink ;
     var oMyText  ;
     var strLink ;
     var strText ;
     
     try {
       for(s=0; s<4 ; s++) {
         strLink = 'stLink'+ s ;
         strText = 'stText' + s;
         oMyText = document.getElementById(strText);
         oMyText.innerHTML = sLinkText[s];
         oMyLink = document.getElementById(strLink);
         oMyLink.href = sLink[s];
       }
     } catch(err) {
       //alert(err);
     }  
     //create the station player
     createStationPlayer();
    }

    //########################################################
    //## Creates the player that will hold the LIVE stream
    //## Starts hidden and muted    
    //########################################################    
    function createStationPlayer() {
      doitall.stationID = staID; //AudioRealm station ID
	    doitall.publisherID = pubID; //StreamAds publisher ID [Only required for 1-to-1 targeting]

	    doitall.loadStationInfo = false; //Load station information from AudioRealm
	    doitall.preloadHistory = true; //Load song history from AudioRealm
	    doitall.useDataPoller = false; //Check for track changes using "polling" method (Data provided by AudioRealm)
	    doitall.useLocalMedia = true; //Allow client-side targeted content
	    doitall.RegisterVideoArea("coverArtSync"); //If you wish to display targeted video content you must register video area
	    doitall.RegisterSyncIDs("coverArtSync", "syncBanner", null); //Register TextAd area (As DOM element)

	    //Subscribe to events
	    doitall.onMedia.subscribe(cbDisplayMedia);
	    doitall.onAds.subscribe(cbDisplayAds);
	    doitall.onHistoryLoaded.subscribe(cbHistoryLoaded); //Song history data from AudioRealm loaded
	    doitall.onStationData.subscribe(cbStationData); //Station information from AudioRealm loaded
	    doitall.player.onLoaded.subscribe(cbPlayerLoaded); //Player is loaded & ready to be controlled
	    doitall.onVideoBegin.subscribe(cbVideoBegin); //Video playback is about to start
	    doitall.onVideoEnd.subscribe(cbVideoEnd); //Video playback ended
	    doitall.onRestore.subscribe(cbRestore); //Advertisement time-out triggered

	    //Create player
	    doitall.player.mediaurl = liveURL ;
	    doitall.player.showcontrols = true;
	    doitall.player.width=300;
	    doitall.player.height=45;
	    doitall.player.createPlayer('player');
	    //Start all basic systems
	    doitall.Start();    
	    doitall.player.setVolume(30);
    }

    //########################################################
    //## Creates the gateway video player 
    //########################################################    
    function DoPreRoll(ad)
    {
      gwPlayer = new TDoItAll(); 
      gwPlayer.stationID = null;
	    gwPlayer.publisherID = null;

	    gwPlayer.loadStationInfo = false;
	    gwPlayer.preloadHistory = false;
	    gwPlayer.useDataPoller = false;
	    gwPlayer.useLocalMedia = false;
	    
	    gwPlayer.onAds.subscribe(cbDisplayGatewayAd);

	    //Create player
	    gwPlayer.player.showcontrols = false;
	    gwPlayer.player.mediaurl = ad["deliveryurl"];
	    gwPlayer.player.height = 270;
	    gwPlayer.player.width = 300;
	    gwPlayer.player.createPlayer('gatewayPlayer');
	    var dur = ad["duration"] ;
      
	    //Start it all
	    gwPlayer.Start();
	    gwPlayer.player.setVolume(30);

	    //Call process of advertisement data manually
	    gwPlayer.mediadata.ProcessData(ad);

	    //Check if player is done playing
	    StartCheckDone(dur);
    }    
    
    //##============================================================================
    //## EVENT HANDLERS
    //##============================================================================
    function cbGatewayLoaded(data)
    {
     clearTimeout(idAbort); 
	    //If no valid advertisement in list, return to website
	    if((typeof(data)=="undefined") || (typeof(data[0])=="undefined") || (data[0]["adzID"]<=0)) 
	    { 
	      startStation();
	      return false; 
	    }
	    //Do pre-roll
	    DoPreRoll(data[0]);
    }

    function cbDisplayGatewayAd(type, args, me)
    {
      var ad = args[0];
      doitall.RegisterSyncIDs('coverArtSync', 'syncBanner', null);
      doitall.streamads.SyncToIDs(ad);
    }

    function cbDisplayMedia(type, args, me)
    {
	    var media = args[0];
	    DisplayNowPlaying(media);
	    DisplayHistory();
	    
    }

    function cbDisplayAds(type, args, me)
    {
	    var ad = args[0];
	    DisplayNowPlaying(ad);
	    //Make the advertisement areas visible
	    setVisibility("coverArtSync", (ad['coverID']>0));
	    setVisibility("syncBanner", (ad['bannerID']>0));
	    //setVisibility("tdTextAd", (ad['textID']>0));
	    
	    
    }

    function cbHistoryLoaded(type, args, me)
    {
	    DisplayHistory();
    }

    function cbStationData(type, args, me)
    {
	    var stationdata = args[0];
	    DisplayStation(stationdata);
    }

    function cbPlayerLoaded(type, args, me)
    {
	    //Only show controls if we are able to control player
	    if(doitall.player.isControllable())
	    {
		    //Make our own custom player controls visible
		    //setVisibility('idPlayercontrols', true);
		    //Set the initial player volume
		    //var idVolume = document.getElementById('idVolume');
		    //idVolume.value = doitall.player.getVolume();
	      doitall.player.setMute(true);
	      doitall.player.Hide();
        //try the gateway.
        idAbort = setTimeout("datatimeout()", 5000); //Data has 5sec to load, otherwise we abort!
        JSLoader.LoadJS(gatewayURL, 'localcontent');

		    //Start timer to update status regularly
		    setInterval(cbUpdateStatus, 500);
        
        
 	      if (isTalk.indexOf(staID) >= 0) {
	        // this is a talk station... get the current show.
	        DisplayTalkNowPlaying();
	     }  

	    }
    }

    function cbUpdateStatus()
    {
	    var code = doitall.player.getPlayerStatus();
	    var msg  = doitall.player.getStatusMessage();
	    logStatus("debug", 'Status: ('+code+') '+msg);
    }
    
    function logStatus(divid, msg) {
      var myid = document.getElementById(divid);
      myid.innerHTNL = msg ;
    }


    function cbVideoBegin(type, args, me)
    {
	    //Video about to start...
    }

    function cbVideoEnd(type, args, me)
    {
	    //Video about to ended
    }

    function cbRestore(type, args, me)
    {
      var temp = document.getElementById('debug');
      temp.innerHTML = "We are in the banner rotator" ;
        //we only rotate ads when we are in music
	      JSLoader.LoadJS(bannerRotatorURL, 'bannercontent');
	      JSLoader.LoadJS(coverRotatorURL, 'covercontent');
	     if (isTalk.indexOf(staID) >= 0) {
	       // this is a talk station... get the current show.
	       DisplayTalkNowPlaying();
	     }  
    }

    function cbClearAds()
    {
      var temp = document.getElementById('debug');
        temp.innerHTML = "We are in the Clearing ads" ;
        //we only rotate ads when we are in music
	      JSLoader.LoadJS(bannerRotatorURL, 'bannercontent');
	      JSLoader.LoadJS(coverRotatorURL, 'covercontent');
    }
    
    function cbRotateBanner (data) {
      //rotate the banner when in music
      idBannerDiv = document.getElementById('syncBanner');
      var myAd = '';
      
      //Make sure we have data back.  If not clear the area
      if((typeof(data)=="undefined") || (typeof(data[0])=="undefined") || (data[0]["adzID"]<=0)) 
	    { 
	      setVisibility('syncBanner', false) ;
	      return false; 
	    } else {
          //build the ad text
          var ad = data[0] ; 
          myAd = "<a href='" + ad['clickurl']+ "' target='_blank'>" ;
          myAd += "<img src='" + ad['deliveryurl'] +"' alt='" + ad['alt'] + "' /></a>"
          //insert the ad..
          idBannerDiv.innerHTML = myAd ;
          setVisibility('syncBanner', true) ;
	    }
    }

    function cbRotateCover (data) {
      //rotate the banner when in music
      idBannerDiv = document.getElementById('coverArtSync');
      var myAd = '';
      //Make sure we have data back.  If not clear the area
      if((typeof(data)=="undefined") || (typeof(data[0])=="undefined") || (data[0]["adzID"]<=0)) 
	    { 
	      setVisibility('coverArtSync', false) ;
	      return false; 
	    } else {
          //build the ad text
          var ad = data[0] ; 
          myAd = "<a href='" + ad['clickurl']+ "' target='_blank'>" ;
          myAd += "<img src='" + ad['deliveryurl'] +"' alt='" + ad['alt'] + "' /></a>"
          //insert the ad..
          idBannerDiv.innerHTML = myAd ;
  	      setVisibility('coverArtSync', true) ;
	    }
    }

    //##============================================================================
    //## WORKER FUNCTIONS
    //##============================================================================
    function startStation() {
      doitall.player.setMute(false);
      doitall.player.Show();
      gwDone = true;
      cbClearAds();
      //doitall.player.width=300;
    }

    function datatimeout(){
     startStation();
    }

    function StartCheckDone(timeout)
    {
      refreshID = setTimeout("CheckDone()", timeout);
    }

    function CheckDone(dur)
    {
      //If we are able to detect the status of the player
      //use that to detect when the player is done
      if(gwPlayer.player.isControlable())
      {
	      var state = gwPlayer.player.getPlayerStatus();
		      if(IsDone(state))
		      {
			      setTimeout("startStation()", 300);
			      setVisibility("gatewayPlayer", false);
			      
		      }
		      else StartCheckDone(500);
	      }
	      //Otherwise we are forced to use the duration provided, factoring some extra time for buffering
	      else
	      {
	        dur += 7500;
		      setTimeout("startStation()", dur);
	      }
    }

    function IsDone(state)
    {
	    if(state==2) return true; //Paused
	    if(state==3) return true; //Stopped
	    if(state==5) return true; //Error
 	    if(state==null) return true; //Null - plugin not loaded?
 	    return false;
     }

    function setVolume()
    {
	    var idVolume = document.getElementById('idVolume');
	    doitall.player.setVolume(idVolume.value);
    }

    //This function deletes all the nodes in a DOM tree starting at specified node
    function DeleteAllChildren(domObj)
    {
	    var child = domObj.firstChild;
	    while(child != null)
	    {
		    domObj.removeChild(child);
		    child = domObj.firstChild;
	    }
    }

    function DisplayItem(item)
    {
	    var idMetadata = document.getElementById('debug');
	    DeleteAllChildren(idMetadata);

	    for (var key in item) //Iterate through all the values the item exposes
	    {
		    var display = key+": "+item[key];

		    var objDiv = document.createElement('div');
		    var objText = document.createTextNode(display);
		    objDiv.appendChild(objText);
		    idMetadata.appendChild(objDiv);
	    }
    }

    function DisplayRecent(item,pos)
    {
      var strArtist = '' ;
      var strTitle = '' ;
      var display = '' ;
      
	    for (var key in item) //Iterate through all the values the item exposes
	     {
	       if (key == "artist") { strArtist= item[key]; }
	       if (key == "title") { strTitle= item[key]; }
	     }
	      display = strArtist + " - " + strTitle;
        
        if (pos == 1) { 
          var idSongData = document.getElementById('rp_1');
        } else if (pos==2) {
          var idSongData = document.getElementById('rp_2');
        } else if (pos==3) {
          var idSongData = document.getElementById('rp_3');
        } else if (pos==4) {
          var idSongData = document.getElementById('rp_4');
        } else if (pos==5) {
          var idSongData = document.getElementById('rp_5');
        }
          idSongData.innerHTML = display ;                           
    }
    
    function DisplayTalkNowPlaying() {
      var idMetaArtist = document.getElementById('artistTxt')
      var idMetaTitle = document.getElementById('titleTxt')
      idMetaTitle.innerHTML = getShow();
      idMetaArtist.HTML = '';
    }
    
    function DisplayNowPlaying(item) {
      var idMetaArtist = document.getElementById('artistTxt')
      var idMetaTitle = document.getElementById('titleTxt')
	    //Run the debugger
	    DisplayItem(item); 
	    var display;
	    var strArtist = "Support our streaming sponsors" ;
	    var strTitle;
	    var strSongType ;
	    for (var key in item) //Iterate through all the values the item exposes
	    {
		    if(key == 'artist') {
		     strArtist = item[key];
		    } else if (key == 'title') {
		     strTitle = item[key];
		    } else if (key == 'songtype') {
		     strSongType = item[key] ;
        } 
		  }
      idMetaArtist.innerHTML=strArtist;
      idMetaTitle.innerHTML=strTitle;
      
      if (strSongType != 'A') {
        cbClearAds();
     }

    }

    function DisplayStation(item)
    {
	    //var idStationData = document.getElementById('idStationData');
	    //DeleteAllChildren(idStationData);

	    //for (var key in item) //Iterate through all the values the item exposes
	    //{
		  //  var display = key+": "+item[key];

		  //  var objDiv = document.createElement('div');
		  //  var objText = document.createTextNode(display);
		  //  objDiv.appendChild(objText);
		  //  idStationData.appendChild(objDiv);
	    //}
    }

    function DisplayHistory()
    {
	    var list = doitall.mediadata.getMediaHistory(6,"S"); //Return 6 items with songtype S (song)
	    //clear the history
      document.getElementById('rp_1').innerHTML = '';
      document.getElementById('rp_2').innerHTML = '';
      document.getElementById('rp_3').innerHTML = '';
      document.getElementById('rp_4').innerHTML = '';
      document.getElementById('rp_5').innerHTML = '';	    
	    for(var i=0; i<list.length; i++)
	    {
	      DisplayItem(list[i]); 
		    if (i==0) {
		      DisplayNowPlaying(list[i]); //item 0 goes into currently playing
		    } else {  
		      DisplayRecent(list[i],i);
		    }
	    }
    }


