if (window.NTorus === undefined)
    throw new Error("Required library(namespace) \"NTorus\" not loaded.");

if (window.NTorus.Ajax === undefined)
    throw new Error("Required library \"NTorus.Ajax\" not loaded.");

if (window.NTorus.Event === undefined)
    throw new Error("Required library \"NTorus.Event\" not loaded.");

if (window.NTorus.Dom === undefined)
    throw new Error("Required library \"NTorus.Dom\" not loaded.");

if (window.NTorus.Utility === undefined)
    throw new Error("Required library \"NTorus.Showcase.Common\" not loaded.");

if (window.NTorus.Showcase === undefined || window.NTorus.Showcase.Common === undefined)
    throw new Error("Required library \"NTorus.Showcase.Common\" not loaded.");

if (window.NTorus.Showcase.ArenaPage === undefined)
    window.NTorus.Showcase.ArenaPage = new Object();

NTorus.Event.bindEvent(window, "load", init);

var vgid;
var toid = null;
var gVideoArray = [];
var playerObject = null;

//--------------------------------------------------------------------
function init() {

	NTorus.Event.unbindEvent(window, "load", init);
   
   playerObject = getFlashMovie("player");
   vgid = NTorus.Utility.getQueryVariable("vgid");

   // Load the featured videos
   buildVideoPanel(gVideoArray, null, true);
   
   if (gVideoArray.length) {   
      if (purchasedVideoInfo) {
          clickVideo(purchasedVideoInfo.id);
      } else {	
         setMetaText(gVideoArray[0], true);						
         launchPreviewOverlay(gVideoArray[0], true, 0);
      }
   }

   // Get the "Best of CBS Today"
   gVideoArray = gVideoArray.concat(_videoListPopular);
   buildVideoPanel(_videoListPopular,"PopularVideosPanel", true, true);
}

//--------------------------------------------------------------------
function updateCredit(credits) {
  credits = parseInt(credits);
  document.getElementById("CreditMeterValue").firstChild.nodeValue = credits;
  document.getElementById("CreditMeterValueLabel").firstChild.nodeValue = "credit" + (credits == 1 ? "" : "s");
  updateCredit.credits = credits;
}
updateCredit.credits = 0;

//TODO: Rewrite this cut & paste code.
//--------------------------------------------------------------------
function getFlashMovie(movieName) {
 var isIE = navigator.appName.indexOf("Microsoft") != -1;
 return (isIE) ? window[movieName] : document[movieName];
}

//--------------------------------------------------------------------
function purchaseVideo(vid, vurl) {

  var v = getVideoFromArray(vid);
  var xhr = new NTorus.Ajax.NtXmlHttpRequest(
    "GET", "json/PurchaseShow.php?VideoId="+escape(vid), null,
    function(responseText) {

      var result = eval("("+responseText+")");
      if ( result.Purchase ) {

         updateCredit(result.Purchase.CreditBalance);

         var thumbnails = videoElementLookup[vid];
         for (var i = 0; i < thumbnails.length; i++)
         {
            var videoElm  = thumbnails[i];
            var pointsElm = videoElm.childNodes[2];

            videoElm.setAttribute("purchased", "true");
            setVideoStyle(videoElm);
            pointsElm.firstChild.nodeValue = PurchasedLabel;
         }
         
         launchPlayer(v);

      } else if (result.Error) {

        alert(result.Error.Name + ": " +  result.Error.Description);

      } else {

        alert("Unknow Purchase Show error.");
      }
    }, true);

    xhr.getResponseText();
}

//--------------------------------------------------------------------
function launchPlayer(video) {

   var targetElm = document.getElementById("player");
   var swf; 
   var flashvars = {};
   var params = {
     menu: "false",
     allowscriptaccess: "always",
     allowfullscreen: "true",
     bgcolor: "#000000",
     wmode: "opaque"     
   };
   var attributes = {
     id:"player",
     name:"player"
   };
   
   while (targetElm.firstChild) 
   {
      targetElm.removeChild(targetElm.firstChild);
   };

   /*
   if (video.cbsVideoId) {
      swf = "http://www.cbs.com/thunder/player/1_0/partner/can/partner.swf";
      flashvars = {
         pid: video.cbsVideoId,
         partner: "partnerSample",
         autoPlayVid: "true"
      }
   } else {
      swf = "flash/cbsplayer3.swf";
      flashvars = {
         videoPath: escape(video.target),
         videoId: video.id,
         showName: escape(video.title),
         relatedVideosURL: "php/Integration/GetRecommendedShows.php?VideoId=",
         previewImageURL: video.previewImageUrl
      };
   }

   swfobject.embedSWF(
     swf, 
     "player", 
     "640", 
     "368", 
     "10.0.0",
     "js/swfobject/expressInstall.swf", 
     flashvars, 
     params, 
     attributes);
   */
   
   swf = "flash/CbsEpisodePlayer.swf";
   flashvars = {
      videoPath: escape(video.target),
      videoId: video.id,
      showName: escape(video.title),
      relatedVideosURL: "php/GetRecommendedShows.php?VideoId=",
      previewImageURL: video.previewImageUrl
   };
   
   swfobject.embedSWF(
     swf, 
     "player", 
     "640", 
     "360", 
     "10.0.0",
     "js/swfobject/expressInstall.swf", 
     flashvars, 
     params, 
     attributes);
}

//--------------------------------------------------------------------
function launchPreviewOverlay(video, isLanding, numCreditsRequired, landingPreviewUrl) {

   var targetElm = document.getElementById("player");
   
   var flashvars = {
      wallpaperUrl: video.previewImageUrl,
      numCreditsRequired: numCreditsRequired,
      isLanding: isLanding
   };
   
   var params = {
     menu: "false",
     allowscriptaccess: "always",
     allowfullscreen: "true",
     bgcolor: "#000000",
     wmode: "opaque"
   };
   
   var attributes = {
     id:"player",
     name:"player"
   };

   swfobject.embedSWF(
     "flash/CBSPreviewOverlay.swf", 
     "player", 
     "640", 
     "360", 
     "10.0.0",
     "js/swfobject/expressInstall.swf", 
     flashvars, 
     params, 
     attributes);
}

var currentVid = null;
var _redirectVid = null;
//--------------------------------------------------------------------
function clickVideo(vid) {

   var thumbnails, videoElm;
   var i;

   var v = getVideoFromArray(vid);

   if (currentVid != vid) {
      //clear selection
      if (currentVid) {   
           thumbnails = videoElementLookup[currentVid];
           for (i = 0; i < thumbnails.length; i++) {
               videoElm  = thumbnails[i];
               videoElm.setAttribute("selected", "false");
               videoElm.setAttribute("playing", "false");
               setVideoStyle(videoElm);
           }	
      }
      //set selection
      currentVid = vid;
      thumbnails = videoElementLookup[vid];
      for (i = 0; i < thumbnails.length; i++) {
         videoElm  = thumbnails[i];
         videoElm.setAttribute("selected", "true");
         setVideoStyle(videoElm);
      }	
   }
  
   var xhr = new NTorus.Ajax.NtXmlHttpRequest(
      "GET", "json/SpotCredits.php?vid="+vid);
   var responseText = xhr.getResponseText();
   var result = eval("("+responseText+")");
   
   if (result.Error) {
      alert(result.Error.Name + ": " +  result.Error.Description);
   } if (result.IsPurchased) {
      launchPlayer(v);
   } else if (result.SpotCredits >= v.points) {
      purchaseVideo(vid, v.target);
   } else {
      _redirectVid = vid;
      //launchPlayer(v);
      //playerObject.setPlayerContentPath(vurl, false, "This video", cost-result.SpotCredits);
      launchPreviewOverlay(v, false, v.points-result.SpotCredits);
   }    
  
   if (v) {
      setMetaText(v, false);
   }
   
   scroll(0,0);
}

function setVideoStyle(videoElm) {
   NTorus.Dom.SetStyleClass(videoElm, 
      (videoElm.getAttribute("purchased") == "true" ? "Video_Purchased" : "Video") +
      (videoElm.getAttribute("selected") == "true" ? " Selected" : "") +
      (videoElm.getAttribute("playing") == "true" ? " Playing" : ""));
}

function setMetaText(v, isLanding) {

	//getFlashMovie("player").setPreview(v.previewImageUrl, isLanding ? true : false);
  
    var meta = document.getElementById("VpMeta");    
    meta.style.display = "block";
    var synopsis = document.getElementById("VpSynopsis");
    
    var html = "";
    html += v.showName ? "<div class='metaShowName'>"+v.showName+"</div>" : "";
    html += v.title ? "<div class='metaTitle'>"+v.title+"</div>" : "";
    html += v.seasonInfo ? "<div class='metaSeasonInfo'>"+v.seasonInfo+"</div>" : "";
    html += (v.isFullEpisode ? 'Full Episode' : 'Clip')
    if (v.duration) {
        html += secondsToSegmentedDurationString(v.duration)
    }
    if (v.airDate) {
        html += '<div class="metaAirInfo">Air Date: ' + v.airDate + '</div>';
    }
    meta.innerHTML = html;
    
    synopsis.innerHTML = v.synopsis ? v.synopsis : ""; 
}

function callbackhandler_SpotTheaterRedirect() {
  window.location = "SpotTheater.php?vgid="+vgid+"&vid="+ _redirectVid;

}

function callbackhandler_PlayerThumbnailClick(vid)
{
   var v = getVideoFromArray(vid);
   if (v.vgid.toLowerCase() == vgid.toLowerCase()) {
      setTimeout("clickVideo('"+vid+"')",0);
   } else {
      location = "arena.php?vgid="+v.vgid+"&vid="+v.id;
   }
   return;
}

function callbackhandler_LandingPlayClick() {
	setTimeout("clickVideo('"+gVideoArray[0].id+"')",10);
   return;
}

function getVideoFromArray(vid) {
  var v = null;
  for (var i = 0; i < gVideoArray.length; i++) {
    if (gVideoArray[i].id == vid) {
      v = gVideoArray[i];
      break;
    }    
  }
  return v;
}

function callbackhandler_Event(name) {
   if (currentVid) {
      thumbnails = videoElementLookup[currentVid];
      for (i = 0; i < thumbnails.length; i++) {
         videoElm  = thumbnails[i];
         videoElm.setAttribute("playing", name == "playing" ? "true" : "false");
         setVideoStyle(videoElm);
      }
   }

/*
   if (currentVid) {
      thumbnails = videoElementLookup[currentVid];
      for (i = 0; i < thumbnails.length; i++) {
         videoElm  = thumbnails[i];
         videoElm.setAttribute("selected", "true");
         setVideoStyle(videoElm);
      }
   } 
*/   
}



