/* video */

/********** utility functions **************/

// log to firebug
function log(m,o){


   if(typeof console != "undefined"){
      if(typeof o == "undefined"){
         console.log(m);
      }else{
         console.log(m,o);
      }
   }else{
      var d = document.getElementById('debug');
      if(typeof d=="undefined"){
         d  =  document.createElement("div");
         YAHOO.util.Dom.setStyle("width","100%");
         document.getElementsByTagName("body")[0].appendChild(d);
      }
         //d.innerHTML = m + "<br>"+ d;
   }

};
function evtlog(m){ if(typeof console != "undefined"){ console.log(m);}};


// convert a brightcove <cough> string array into a string
/*function bctoString(o){

   if(YAHOO.env.ua.ie){
      return o;
   }

   if(typeof o != "object"){
      return o;
   }
   var s = "";
   for(var i in o){
      if(typeof o[i] == "string"){
         if(o[i].indexOf("function")==-1){
         s += o[i];
         }
      }
   }
   return s;
}*/


/****  register the video namespace *****/

registerNS("TSCM.video");
registerNS("TSCM.util");
registerNS("TSCM.cfg");

TSCM.video.Defaults = {
   default_lineup_id:1111449338, // this happens to be "market strategy";
   default_lineup_refid:"strategysession",
   default_lineup_name:"Market Strategy"
};


/* this object deals with managing the whole thing. */
TSCM.video.Player = new function(){

      var dom = YAHOO.util.Dom;
      var Event = YAHOO.util.Event;
      var player = null;
      var carousel = null;
      var guide = null;
      var VG = null;
	  var justSawViagra=false;
	  //var state =  new TSCM.util.PersistenceManager();
   	//state.id = "tscplaylist";


   return {  //Player
      search_id:1,
	  proxy:null,
      adcount:0,
	  playlist:{items:[]},
      lineupid:TSCM.video.Defaults.default_lineup_id, // default lineup id goes here: market updates.
      init:function(){


         // make a reporting call for the main page
		// TSCM.video.Reporter.reportPage();

            //////////// tabs navigation for guide /////////////////
           //TSCM.video.Guide.tabset  = new YAHOO.widget.TabView("vidguidetabs");
           //TSCM.video.Guide.tabset2  = new YAHOO.widget.TabView("vidguidetabs");






      }, // init


convertVidOb:function(vid,id){
	var ret = {};
	ret.displayName = vid.displayName;
	ret.shortDescription = vid.shortDescription;

	log("ID IS %o",id);
	ret.id = id;
	ret.referenceId = vid.referenceId;
	ret.thumbnailURL = vid.thumbnailURL;
	return ret;

}

	  }


}; // ya rly




/** this guide object deals with the gui.
it first loads the list of channels and
displays results in the channeldisplay div
*/


TSCM.video.Guide = new function(el,cfg){

   var dom = YAHOO.util.Dom;
   var Event = YAHOO.util.Event;

   var iconsDT = null;
   var latestDT = null;
   var searchDT = null;





   // pull author out of a video object
   // format is, for example: [authors=Brittany Umar]
   function getAuthor(video){
      var auth = TSCM.video.Guide.getTagValue(video,"authors");
      auth = auth.replace(/\|/, ' & ');
      return auth;
   }


   // format thumbnail cells for a datatable.








   return {
      autoplay:true,
	  context_path:"/tsc",
      default_lineup:TSCM.video.Defaults.default_lineup_refid,
      loadchannels:false,
      search_in_progress:false,
      fetch_in_progress:false,
      adcount:0,
      adfreq:2, //
      current_lineup_name:TSCM.video.Defaults.default_lineup_name, // this should really be named 'default' but oh well.
      search_id:0,
      searchPageIndex:1,
      searchDoneEvent:new YAHOO.util.CustomEvent("searchdone"),
      latestDoneEvent:new YAHOO.util.CustomEvent("latestDone"),
      latestdone:false,
      dialog:null,
      current_lineup:null,
      lineups:[],
      videos:{},
      latest_vids:[],
      fetch_queue:[],
      player_queue:[],
      mostpopDT:null,
      current_video:null,
      queued_video:null,

      getFmtDate:function(pubdate){
	  	var epoch = pubdate;
		if(epoch<10000000000) epoch *= 1000;
		var d = new Date(Number(epoch));
		var fmt = TSCM.util.formatDate(d,"E MM/dd/yy HH:mm a") + " EST";
		return fmt;
		},
      getAuthors:function(video){

       //  log('GET AUTH');
         var auth = TSCM.video.Guide.getTagValue(video,"authors");
         auth = auth.replace(/\|/, ' & ');
         return auth;

      },
      getTickers:function(video,formatlink){
      var t =  TSCM.video.Guide.getTagValue(video,"tickerList");
      if(t == ""){
         t = TSCM.video.Guide.getTagValue(video,"tickers");
      }
      log("ere");
      try {
log("ere2");
         if(t.toString().toLowerCase() == 'none'){
            return "";
         }

         if(typeof formatlink != 'undefined'){
            if(formatlink == true){
               t = t.replace(/ /g,"");
               var ticker = "['" + t.replace(/\|/g,"','") + "']";

               var tickarray = eval(ticker);

               var uniq = {};
               for(var i=0;i<tickarray.length;i++){
                  ticker = tickarray[i];
                  uniq[ticker] = 1;
               }

                  // remove duplicates
               var tickers = [];
               for(var i in uniq){
                  tickers.push(i);
               }

               ticker = "";
               tickarray = tickers;
               for(var i=0;i<tickarray.length;i++){

                  if(TSC.util.isDefined(tickarray[i])){
                  var link = '<a target=new href="' + TSCM.cfg.contextRoot + '/quote/' + tickarray[i] + '.html">' + tickarray[i] + '</a>';
                  } else{
                     link = "";
                  }
                  ticker+=link;
                  ticker+= " | ";
               }
               ticker = ticker.substring(0,ticker.lastIndexOf('|')-1);
            }
         }else{
               var ticker = t.replace(/\|/g,", ");
         }

         return ticker;

      } catch(e){ log(e);return t; }
         return ticker;
     },

      onMediaComplete:function(a,b,c){
         //log(' media complete evnt');
         var lineup = TSCM.video.Guide.current_lineup;
         var currentvid = TSCM.video.Guide.currentvid.id;



      },

      /********************************/
      /*evt_lineupVideosFetched:new YAHOO.util.CustomEvent("lineupVideosFetched"), */
      addLineup:function(lineup){
         log('adding lineup %o',lineup);
         TSCM.video.Guide.lineups.push(lineup);
      },
      getTagValue:function(video,tagname){
         tagname+="=";
         var tags = video.tags;
         try {
            for(var i=0;i<tags.length;i++){
               var tag = tags[i];
               if(tag.indexOf(tagname)!=-1){
                  var ret = tag.substring(tagname.length+1);
                  ret = ret.substring(0,ret.lastIndexOf(']'));
                  return ret;
               }
            }
            return "";
         }catch(e){ log('ERROR' + e.message);}

      },
	  fetchPopular:function(){
          log('@ 657: fetchPopular');
        if( this.mostpopDT != null){
           return;
        }



	      //callFlash("fetchLineupById", TSCM.video.Guide.popularlineup.id);

         this.current_lineup = "popular";

         // build fetch list based
         try {

            var videolist = TSCM.video.Guide.popularlineup.videoIds;
            var tofetch = buildFetchList(videolist);  // returns array of video ids

            if(tofetch.length > 0){
            TSCM.video.WaitDialog.getInstance().show();
            TSCM.video.WaitDialog.getInstance().setHeader('Loading most popular videos...');
            TSCM.video.WaitDialog.getInstance().setBody('Loading most popular videos...');
               this.fetch_queue = tofetch;
               this.fetchNonCachedTitles(tofetch);
            }
         }catch(e){
            log(e);
         }
     },


      /** this function is called when the player returns the lineups **/
      handlePlayerLineupsResult:function(ob){


      },
      loadDefaultLineup:function(){
         var lineup = this.default_lineup;



      },
      getLineupById:function(id){
         for(var i=0;i<TSCM.video.Guide.lineups.length;i++){
            var lineup = TSCM.video.Guide.lineups[i];
            if(Number(lineup.id) == Number(id))return lineup;
         }
      },
      getLineupByRefId:function(refid){
         for(var i=0;i<TSCM.video.Guide.lineups.length;i++){
            var lineup = TSCM.video.Guide.lineups[i];
            if(lineup.refid == refid)return lineup;
         }
      },
      // this displays the list of lineups in a datatable
      loadChannels:function(){


      },



      fetchNonCachedTitles:function(vidlist){
          var tohandle = [];
        /** using 'tohandle', we can pass the vid objects to this.handleTitleFetch in
        *   a single bundle rather than calling the function in the loop for each vid  */
            for(var j=0;j<vidlist.length;j++){
                var vid = modCon.getVideo(vidlist[j]);
                tohandle.push(vid);
            }
          this.handleTitleFetch(tohandle);
      },
      /** fetch a list of titles, @param array of title ids */
      fetchTitles:function(vidlist){

        var tohandle = [];
        /** using 'tohandle', we can pass the vid objects to this.handleTitleFetch in
        *   a single bundle rather than calling the function in the loop for each vid  */

            for(var j=0;j<vidlist.length;j++){
               var id = vidlist[j];
               var vid = modCon.getVideo(vidlist[j]);
               tohandle.push(vid);
            }
            this.handleTitleFetch(tohandle);
      },
      /* given a lineup object extract the list of video ids and fetch */
      fetchLineupTitles:function(lineup){
         // now would be a good time to show a dialog
            var vidlist = lineup.videoIds;
            // this is a list of ids by this point

            for(var j=0;j<vidlist.length;j++){
               var id = vidlist[j];
               if(typeof this.videos[id]== "undefined"){
                   modCon.getVideo(vidlist[j]);
                  //callFlash("fetchTitleById",vidlist[j]);
               }else{
                 // log('found video with id ' + id);
               }
            }
      },
      /** it appears not to be able to handle getting all lineups at the same time */
      fetchAllTitles:function(){
         for(var i=0;i<TSCM.video.Guide.lineups.length;i++){
            var vidlist = TSCM.video.Guide.lineups[i].videoIds;
            for(var j=0;j<vidlist.length;j++){
               var id= vidlist[j].id;
               if(typeof this.videos[id]== "undefined"){
                 // log('need to fetch ' + id);
                  this.fetchTitle(vidlist[j]);
               }else{
                  log('found cached video with id ' + id);
               }
            }
         }
      },
      /* when a title result comes back, store it in the memory cache */
       handleTitleFetch:function(a){ //gets an array
           //log('@ 1182: in handleTitleFetch with this array '+a);
           for(i=0;i<a.length;i++){
                var o = a[i]; //each index of this array is an object

                //log('@ 1171: handling title '+o.id);

                if(TSCM.video.Guide.fromplaylist == true){
                    playVideo(o.id);
                    TSCM.video.Guide.fromplaylist = false;
                }
               
                var id=o.id;
                var id2="refid" + o.referenceId;
                this.videos[id] = o;
                //this.checkQueue(id);
                log('@ 1185: checking queue');
           }
           //TODO: make sure it's OK not to check the queue
           this.displayChannel(TSCM.video.Guide.current_lineup);
      },
      checkQueue:function(id){
         //check  queue for id
         if(this.fetch_queue.length == 0) return;
         for(var i=0;i<this.fetch_queue.length;i++){
            // cast to number since its all wacky types here.
            if(Number(this.fetch_queue[i])==Number(id)){
               // found one, so cut it from the q
               this.fetch_queue.splice(i,1);

            }else{
               // didnt match anything.
            }
         }

         log('@ 1186: fetch_queue is '+ fetch_queue.length);
         // all are retreived so display it
         if(TSCM.video.Guide.current_lineup  == "popular"){
            //if(this.fetch_queue.length == 0){
               this.displayPopular();
            //}
         }else{
            //log('@ 1196: ' + TSCM.video.Guide.current_lineup);
            //if(this.fetch_queue.length == 0){
               this.displayChannel(TSCM.video.Guide.current_lineup);
            //}
         }

      },
      /* given an id call bc to fetch title */
      fetchTitle:function(id){
         modCon.getVideo(id);
          //callFlash("fetchTitleById",id);
      },
      getTitles:function(ids){
         var list = [];
         for(var i=0;i<ids.length;i++){

             list.push(this.videos[ids[i]]); // grabs each object from the this.videos array 

         }
         return list;
      },
      loadLatest:function(lineup){

         this.current_lineup = lineup;
         this.current_lineup.refid = "latestvideos";
         this.current_lineup_name = lineup.displayName;

         var videolist = lineup.videoIds;
         var tofetch = buildFetchList(videolist);
         this.fetch_queue = tofetch;
         this.fetch_length = tofetch.length;
         this.fetchLineupTitles(lineup);

      },
      handleLatest:function( oRequest , oRawResponse , oCallback , oCaller , tId ){
         var vids = oRawResponse.results;
         this.latest_vids_response = oRawResponse.results;

         var cols = 5;

         // create a data table.
         var defs = [];
         var schema = {fields:[]};
         for(var i=0;i<cols;i++){
            var id = "col" + (i+1);
            var o = {key:id,label:"",formatter:latestCellFormat};
            defs.push(o);
            schema.fields.push(id);
         }

         var list = [];
         var o = {};
         var j=1;

         // convert list to multidimensional array
         for(var i=0;i<vids.length;i++,j++){
            var id="col" + j;
            o[id] = vids[i];
            if(j%cols==0){
               list.push(o);
               o={};
               j=0;
            }
         }


      },
      // when a search result comes back with a list of video ids
      // handle it by fetching the necessary videos then displaying
      // a datatable.

      setTitleDisplay:function(video){


      }



   }

};



function playVideo(id,playlist){

      log('playing video ' + id);

	  if(playlist){
	  	TSCM.video.Guide.fromplaylist  = true;
		modCon.getVideo(id);
          //callFlash("fetchTitleById",id);
	  }

      var the_video = TSCM.video.Guide.videos[id];
	   TSCM.video.Guide.currentvideo = the_video;
      //TSCM.video.Guide.current_video = nextvideo;
      if(TSCM.video.Player.isRefId){
        // log("loadTitleByReferenceId");
         modVp.loadVideo(id); //should work with refID
          //callFlash("loadTitleByReferenceId",id,"full");
      }else{
        modVp.loadVideo(id);
          //callFlash("loadTitleById",id,"full");
      }

      var s = document.location.search;
      if(TSC.util.isDefined(s)){
         top.document.location.href = document.location.pathname + document.location.search + '#' + id;
      }else{
         top.document.location.href = document.location.pathname + '#' + id;
      }

     // YAHOO.util.Dom.get('skipset').innerHTML ='';


}

YAHOO.util.Event.on(window,"load",TSCM.video.Player.init);



/******** brightcove native functions -- sadly must be global *****/

function muteVid() {
    modVp.setVolume('0');
}

function pauseVid() {
    modVp.pause(true);
}

function onStreamStart(o){
  //log('_____________reporting vid');
  TSCM.video.Guide.adPlaying=false;
  getVid();
}

function getWorkday(){
   var ret = false;
   var now = new Date();
   if((now.getDay() == 0) || (now.getDay() == 6)){
      ret = true;
   }

   if((now.getHours() >= 17)){
      ret = true;
   }

   return ret;

}

function onContentLoad(o){
  log('content loaded');
    
   //muteVid in bcplayer_hp.jsp if workday
   var workday = getWorkday();
    if (workday) {
        muteVid();
    }

      if(TSCM.video.Player.isRefId){
       //  log('ref id passed in .. fetching title' + vidid);
         modCon.getVideo(vidid);
          //callFlash("fetchTitleByReferenceId",vidid,"full");

         setTimeout(function(){
            //callFlash("fetchLineupByReferenceId",TSCM.video.Guide.default_lineup);
           // callFlash("getPlayerLineups");
         },1000);
      } else {
        // log('no ref id');

            //callFlash("getLineupByReferenceId","latestvideos");
            //callFlash("fetchLineupByReferenceId",TSCM.video.Guide.default_lineup);
            //callFlash("getLineupByReferenceId",TSCM.video.Guide.default_lineup);
            //callFlash("getPlayerLineups");
      }

      //callFlash("getPlayerLineupIds");
      //callFlash("getPlayerLineupIds");
        //log('end content loaded');
}


// $as3 getVid
function getVid(){
  var video = modVp.getCurrentVideo();

  TSCM.video.Guide.currentvid = video;
  TSCM.video.Guide.current_video = video;
  TSCM.video.Guide.currentvideo = video;

	if (TSCM.video.Player.isRefId) {
		var lid = video.lineupId;
		TSCM.video.Player.lineupid = video.lineupId;
		//  log("CHANNEL LINEUP " + lid);
		//callFlash("fetchLineupById",video.lineupId);
	}

	/*
	 if( TSCM.video.Guide.adPlaying ) {
	 log("AD is playing -- report preroll");
	 setTimeout(function(){
	 TSCM.video.Reporter.reportPreroll(video);
	 },1500);
	 return;
	 }
	 */
	TSCM.video.Guide.currentvid = video;
	//TSCM.video.Guide.setTitleDisplay(video);

	//log(" ------------------------------- " + TSCM.video.Player.isRefId);


	//  if(TSCM.video.Player.adcount > 0){

	TSCM.video.Reporter.report(video);
	//}
}



function fetchLineupByReferenceId_Result(o){
      callFlash("getLineupByReferenceId","latestvideos");
     // log('fetch lineup by reference id result');
};

function getLineupByReferenceId_Result(o){
   log('player returned lineup by ref id');
   log(bctoString(o.referenceId));
   //TSCM.video.Guide.loadLatest(o);
};

function getWorkday(){
    var now = new Date();
    if(now.getHours()<6 || now.getHours()>17){
        return false;
    } else {
        return true;
    }
}

// $as3 register components & events - still global :(
var bcExp;
var modVP;
var modExp;
var modCon;

function onTemplateLoaded(pEvent) {
    log("EVENT: TEMPLATE_LOAD "+pEvent);

    //get the experience/object
    bcExp = brightcove.getExperience(pEvent);

    //get API modules
    modVp = bcExp.getModule(APIModules.VIDEO_PLAYER);
    modExp = bcExp.getModule(APIModules.EXPERIENCE);
    modCon = bcExp.getModule(APIModules.CONTENT);
    modAds = bcExp.getModule(APIModules.ADVERTISING);
    modSearch = bcExp.getModule(APIModules.SEARCH);
    
    //add listeners
    modExp.addEventListener(BCExperienceEvent.TEMPLATE_READY, onTemplateReady);
    modExp.addEventListener(BCExperienceEvent.CONTENT_LOAD, onContentLoad);

};

function onTemplateReady() {
    log('template ready');

     // *** ADS ***
    modAds.enableExternalAds(true);
    modAds.enableAdFormats(14, 1);
	modAds.enableAdFormats(16, 2);
    modAds.addEventListener(BCAdvertisingEvent.EXTERNAL_AD, onExternalAd);
    modAds.addEventListener(BCAdvertisingEvent.AD_START, onAdStart);
    modAds.addEventListener(BCAdvertisingEvent.AD_PROGRESS, onAdProgress);
    modAds.addEventListener(BCAdvertisingEvent.AD_PROGRESS, onAdProgress);
    modAds.addEventListener(BCAdvertisingEvent.AD_COMPLETE, onAdComplete);

    modVp.addEventListener(BCVideoEvent.STREAM_START, onStreamStart);

    //events for video playback reporting
    modVp.addEventListener(BCVideoEvent.VIDEO_STOP, onVideoStop);
    modVp.addEventListener(BCVideoEvent.VIDEO_COMPLETE, onMediaComplete);
}

function onVideoStop(evt) {
    TSCM.video.Guide.current_video.position = evt.position.toFixed(0);
    TSCM.video.Reporter.reportVidQuit(TSCM.video.Guide.current_video);
};

function onAdStart(evt) {
    log('adStart');
}
function onAdComplete(evt) {
    log('adComplete');
}

function getPlayerLineupIds_Result(o){
   //log("lineup ids result");
}


/******* reporting stuff *********/
TSCM.video.Reporter = new function(){
   var dom = YAHOO.util.Dom;

    var P = "|";
    var D = ":";
    var VV = "tsctv";
    var VTSC = "tsc";
    var site = "";
      if(document.location.pathname.indexOf("/msvideo/")!=-1){
         VV = "Videos";
         VTSC = "MS";
         site = "MS ";
      }

   return {
      default_channel:"Latest Videos",
      default_hier1:VV,
      section:"video",
      csection:"reference",
      ad:{sponsor:null,campaign:null},
      vdata:"video data",
	   vtsctv:VV,
	   tsc:VTSC,
      content_type:site + "video",
      title:null,
      headline:null,
      callout:null,
      author:null,
      hier:null,
      contenttype:"VIDEO",
      channel:null,
      interval:"VideoInterval",
      init:function(){
         //log("hello from video reporter singleton ");
      },
      link:function(pagename){
        //ob = { pageName:pagename };
         //pi = pagename;
         //TSC.reporting.sendLinkEvent(pagename);
         var ord = Math.floor(Math.random()*1000000);
         var tracker = 'http://102.112.2O7.net/b/ss/streetadsales/1/G.4--NS/' + ord +'?pe=lnk_o&pev2=' + pagename;
         TSCM.video.Reporter.fireTracker(tracker, 'firetracker2');
          //new Image().src = tracker;


      },
      /* interval trackign */
      adstart:function(){

          var ct = "";
          if (TSC.util.isDefined(playerCalledfromHome)){
            if  (playerCalledfromHome==true){
                ct = "home page video";
            } else { 
                ct = "embedded video";
            }
          }

         var pn = this.interval + D + ct + D + this.ad.sponsor + D + this.ad.campaign + D + "start" + D + this.ad.channel + D + this.ad.duration;
         this.link(pn);
      },
      admiddle:function(){
          var ct = "";
          if (TSC.util.isDefined(playerCalledfromHome)){
            if  (playerCalledfromHome==true){
                ct = "home page video";
            } else { 
                ct = "embedded video";
            }
          }
         var pn = this.interval + D + ct + D + this.ad.sponsor + D + this.ad.campaign + D + "middle" + D + this.ad.channel + D + this.ad.duration;
         this.link(pn);
      },
      adend:function(){
          var ct = "";
          if (TSC.util.isDefined(playerCalledfromHome)){
            if  (playerCalledfromHome==true){
                ct = "home page video";
            } else { 
                ct = "embedded video";
            }
          }
         var pn = this.interval + D + ct + D + this.ad.sponsor + D + this.ad.campaign + D + "end" + D + this.ad.channel + D + this.ad.duration;
         this.link(pn);
      },
      reportPreroll:function(video){
         return;

         try {
          var channel = TSCM.video.Guide.current_lineup_name;
          if(!TSC.util.isDefined(channel))channel = this.default_channel;
          var cg = this.default_hier1 + P+this.csection+P+channel;
          var vidObj = new Object();
          var headline =  video.shortDescription;
          vidObj["pageName"]=this.csection + ":" + this.content_type + ":" + headline;
          vidObj["channel"]=this.csection;
          vidObj["hier1"]=this.csection +P+this.vdata+P +"Preroll" + P + channel + P + headline;
          vidObj["contentCat"]=this.csection +P+this.vdata+P +"Preroll" + P + channel;

          TSC.reporting.config(vidObj);
          TSC.reporting.makeCall();

         } catch(e){
            log("ERROR: reporting");
            log(e.message);

         }

      },
      /* function to report the main page when it loads */
      reportPage:function(){


         try {
          this.puc = TSC.util.getPuc();
          var headline = "portal";
          var vidObj = new Object();
          var channel =TSCM.ads.AdPlacer.getParameter("channel");
          if(!TSC.util.isDefined(channel))channel = "other";
          vidObj["pageName"]=site + "Video Portal";
          vidObj["channel"]=this.csection;
          if(site == "MS "){
             vidObj["hier1"]=VTSC + P + site + "Video Portal";
          }else{
             vidObj["hier1"]=this.csection +P+this.vtsctv+P+headline+P+site +"Video Portal";
          }
          vidObj["puc"]=TSC.util.getPuc();
          vidObj["contentCat"]=this.csection + P+this.vtsctv+P+headline;

          TSC.reporting.config(vidObj);
          TSC.reporting.makeCall();

         } catch(e){
            log("ERROR: reporting");
            log(e.message);

         }

         return;
      },
      /** function to report a video play **/
      report:function(video){

         try {
          var channel = TSCM.video.Guide.current_lineup_name;

          var orig_channel = TSCM.video.Guide.getTagValue(_g.current_video,"storyTypeDirName");

          if(!TSC.util.isDefined(channel))channel = this.default_channel;
          var cg = this.default_hier1 + P+this.section+P+channel;
          var vidObj = new Object();
          var headline =  video.shortDescription;
          vidObj["pageName"]=this.default_hier1+":"+ headline;
          vidObj["channel"]=this.default_hier1;
          vidObj["hier1"]=this.tsc+P+this.default_hier1 +P + channel.toLowerCase() + P + headline;
          vidObj["contentCat"]=this.tsc+P+this.default_hier1 +P + channel;
          vidObj["contentType"]="embedded video";
          if (TSC.util.isDefined(playerCalledfromHome)){
            if  (playerCalledfromHome==true){
                vidObj["contentType"]="home page video";
            }  
          }
          vidObj["videoChannel"]=orig_channel;

          var pubdate = TSCM.video.Guide.getTagValue(video,"publishTimestamp");
          var myDate = new Date( Number(pubdate));

          //var datefmt = myDate.toGMTString()+myDate.toLocaleString();

          try {
            vidObj["pubDate"]= TSCM.util.formatDate(myDate,"E NNN dd yyyy");

            }catch(e){log(e);}

            //AS3: diabling search box for now
             /*try{
            var searchterm = dom.get("vidsearchbox").value;
            if (searchterm !=""){
		  	    vidObj["searchTerm"]=searchterm;
			    vidObj["searchType"]="Search Term video page";
            }
          }catch(e){log(e);}*/
          vidObj["articleId"]= video.referenceId;
          //vidObj["topArticles"]=headline;

          vidObj["authorName"]=TSCM.video.Guide.getTagValue(video,"authors");

          vidObj["authorId"]= "" ; //
          vidObj["puc"]=TSC.util.getPuc();
          vidObj["videoViews"]=headline;
          vidObj["keywords"]= "";

          var tickers = TSCM.video.Guide.getTickers(video);

          vidObj["tickers"] = tickers;

          try {
             if(TSC.util.isValidPuc(vidObj.puc)){
                vidObj["stories"]=this.default_hier1 + P + vidObj.authorName + P + vidObj.articleId + P + vidObj.pubDate + headline;
             }
          }catch(e){}
		 vidObj["pi"]="TSCTV|" + TSCM.video.Guide.getTagValue(video,"authors") + " - " + headline + " (" + video.referenceId +  ") 1" + TSC.util.getPuc();

          vidObj["adzone"] = "tsc-video/video";
          TSC.reporting.config(vidObj);
          TSC.reporting.makeCall();


         } catch(e){
            log("ERROR: reporting");
            log(e.message);

         }

          window.rep = vidObj;

      },

       /** function to report when and how users quit vids **/
      reportVidQuit:function(video) {
            // video.position = where the user quit vid
            // video.completed = if the user watched the whole vid

            //match the position property for maths sake
            var length = (video.length/1000).toFixed(0);

            if(video.position === length) {
                video.completed = true;
            } else {
                video.completed = false;
            };

            //log('length: ' + length);
            //log('position: ' + video.position);
            //log('completed is ' + video.completed);


            //TSC.reporting.config(video);
            //TSC.reporting.makeCall();
      },

      /** function to report an ad **/
      reportAd:function(video){

      },

      fireTracker:function(url,div){


			   var allimages="";
			   if(url.indexOf(',')!=-1) {
                  var urls = url.split(",");
				  for(var i=0;i<urls.length;i++){
                     var u = urls[i];
                     // if its not an omni url go for it
                  //   if(u.indexOf('pev2')==-1){
						 //log("firing 3rd party tracker: " + u);
								 //eval("pic" + i + "=new Image().src ='"+ u  + "';");
								 //document.write("<img src='" + u + "'/>");
								 // allimages += "<img  src='" + u + "'>";
     							//leader.innerHTML =("<img src='" + u + "'/>");
                   //  }else{
                        // if it is omni but is not one of ours...
                      //  if(u.indexOf('streetprod')==-1){
                           //new Image().src = u;
						   allimages += "<img src='" + u + "'>";
                       // }
                     //}
                  }

               }else{
                 // if(url.indexOf('streetprod')==-1){
					// log("firing 3rd party tracker 2: " + url);
                    // new Image().src = url;
					  if(url.length > 0){
					allimages += "<img src='" + url + "'>";
					}
                 // }
               }
                if(!YAHOO.util.Dom.get(div)) {
                    var ft = document.createElement('div');
                    ft.id = div;
                    document.body.appendChild(ft);
                }

          log('_____________reporting ad');
               YAHOO.util.Dom.get(div).innerHTML =  allimages;
			   //alert(allimages);
            }
   };
};

//var getPlayerLineups_Result = TSCM.video.Guide.handlePlayerLineupsResult;

//var fetchTitleById_Result = TSCM.video.Guide.handleTitleFetch;

var fetchTitleByReferenceId_Result = function(ob){
  // log("title by ref id ");
  // log(ob);
    modVp.getCurrentVideo();
   //callFlash("getCurrentTitle");
   var id = ob.id;

   if(TSCM.video.Player.isRefId){
    //  log("ref id is true");
      playVideo(vidid);
      log("calling load latest videos");
      //callFlash("fetchLineupByReferenceId","latestvideos");
      //callFlash("fetchLineupById",lid);
   }

}

function getTitleByReferenceId_Result(o){
  // log("get title by ref id result");
  // log(o);

}

function loadTitleByReferenceId_Result(ob){

 //  log('load title by reference id result');
  // log(ob);
   TSCM.video.Player.isRefId = false;

  // log(TSCM.video.Guide.current_video);
  // log('reinit!');
   setTimeout(function(){
  // TSCM.video.Carousel.reinit();
   },700);

}



function loadTitleById_Result(ob){

  // log('load title by id result');
  // log(TSCM.video.Guide.current_video);
  // log('reinit!');
   /*setTimeout(function(){
   TSCM.video.Carousel.reinit();
   },700);*/

}



function searchFetchPage_Result(o){
   log('search fetch page result');
  // TSCM.video.Guide.search_in_progress = false;
}

function onSearchError(o){
   log('search error');

   log(o);
}

function notyet(message){

            var handleYes = function() { this.hide();};
            var dia =  new YAHOO.widget.SimpleDialog("diad",
	             { width: "300px", fixedcenter: true, visible: true, draggable: true, close: true,
	               text: message,
	               icon: YAHOO.widget.SimpleDialog.ICON_INFO,
	               buttons: [ { text:"OK", handler:handleYes, isDefault:true }],
	               constraintoviewport: true,
                  iframe:true } );
                  dia.setHeader("not yet implemented.");
                  dia.render(document.body);


   }

/* listener handlers */


//TODO: ugly global to get around a few problems... need to find a way to store this stuff in TSCM.video.Guide.ad
//this var gets defined in onExternalAd - it holds the 'trackStartURLs' property of the ad object (choked AS3 player, so we can handle it here)
var _$adStartURL;

function onExternalAd(o)
{

    log('onExternalAd');

/*
   var str = adString;
  if(str.indexOf('a target="_new')!=-1) {
    // log('returning');
     //return;

      //adString = '<SynchedBanner728x90 trackPointTime="" version="1" duration="15" trackPointURLs="" trackStartURLs="" trackMidURLs="" trackEndURLs=""> <videoURL>http://images.thestreet.com/tsc/video/dell/114638_8.flv</videoURL> <videoClickURL><![CDATA[http://ad.doubleclick.net/click%3Bh=v8/35da/3/0/%2a/v%3B135193240%3B0-0%3B5%3B12772676%3B31-1/1%3B22755447/22773330/1%3B%3B%7Eokv%3D%3Bfrmt%3D2%3Bfrmt%3D14%3Bfrmt%3D16%3Bfrmt%3D1%3Bfrmt%3D0%3BplID%3D1155328549%3Bsz%3D1x1%3BlnID%3D1137812485%3BttID%3D1209892815%3Blineup%3Dexecutiveinterviews%3B%3Bcue%3Dpre%3Bcgm%3D0%3B%7Eaopt%3D2/1/58/0%3B%7Esscs%3D%3fhttp://ad.doubleclick.net/clk;132560211;19281599;e?http://lt.dell.com/lt/lt.aspx?CID=23859&LID=562774&DGC=BA&DGSeg=BSD&DURL=http://www.dell.com/content/topics/segtopic.aspx/odg/vostro?c%3dus%26cs%3d04%26l%3den%26s%3dbsd%26%7eck%3dbn2]]></videoClickURL> <collapsedBannerURL>http://ad.doubleclick.net/adi/thestreet.com/video;adid=135189729;sz=728x90;ord=5271199?</collapsedBannerURL> <collapsedBannerClickURL></collapsedBannerClickURL> <expandedBannerURL>http://ad.doubleclick.net/adi/thestreet.com/video;adid=135190027;sz=336x280;ord=5271199?</expandedBannerURL> <expandedBannerClickURL></expandedBannerClickURL> <sponsorLogoURL></sponsorLogoURL> <skinURL></skinURL> <starturl>http://ad.doubleclick.net/imp;v7;x;135193240;0-0;5;12772676;1/1;22755447/22773330/1;;~aopt=2/1/58/0;~okv=;frmt=2;frmt=14;frmt=16;frmt=1;frmt=0;plID=1155328549;sz=1x1;lnID=1137812485;ttID=1209892815;lineup=executiveinterviews;;cue=pre;cgm=0;~cs=t%3fhttp://m1.2mdn.net/dot.gif?ord=5271199,http://ad.doubleclick.net/ad/N296.thestreet.com/B2384807.5;sz=1x1;ord=5271199?</starturl> <midurl></midurl> <endurl></endurl> <advertiser>dell</advertiser> <campaign>ros</campaign> </SynchedBanner728x90>';
     }
*/
	//TSCM.video.Guide.skipSet=false;

    log('@ 2258');

   //YAHOO.util.Dom.get('sponsorlogo').innerHTML = "";
   //YAHOO.util.Dom.setStyle('channelcontent',"background-image","none");

    log('@ 2263');

   var foo = 1;
   var ch;
   try {
   ch = TSCM.video.Guide.current_lineup.refid;
   }catch(e){
      ch = TSCM.video.Guide.default_lineup;
   }



   TSCM.video.Guide.adchannel = ch;
   //var override= TSCM.video.Guide.override;
   var override=false;
   //viagra ad ratio
   /*if (TSCM.video.Player.justSawViagra){
	override = true;
	 TSCM.video.Player.justSawViagra=false;
   }
   else {
	override=false;
   }
  */

  /* if(ch == "cramermarketupdates"){
   if(TSCM.video.Guide.adcount % TSCM.video.Guide.adfreq == 0 ){
	override = false;
    }else{
    override = true;
	}
	TSCM.video.Guide.adcount++;
	}
	else {
	override=false;
	}
*/


   var adstring = o.ad;

   try {
      // strip ampersands
      adstring = adstring.replace(/\&/g,"___AMPERSAND___");
      //adstring = adstring.replace(/\&amp;pev2/g,"amp;pev2");
   }catch(e){ }

      //adstring = adstring.replace(/,"/g,'"');

   var adXML;

   try {
	if (window.ActiveXObject)
  	{
		adXML = new ActiveXObject("Microsoft.XMLDOM");
		adXML.async = false;
		adXML.loadXML(adstring); //parses the XML for IE browsers
	}
	else if (window.XMLHttpRequest)
	{
		var adXML = (new DOMParser()).parseFromString(adstring, "text/xml"); //parses the XML for Mozilla browsers
	}
   }catch(e){
      log("xml parse error");
      log(e);
   }

   try {
	var ad = new Object(); //sets up our ad object for passing to the player later

   var duration;
   var starturl;
   var midurl;
   var endurl;
   var videoURL;
   var videoClickURL;
   var collapsedBannerURL;
   var collapsedClickBannerURL;
   var expandedBannerURL;
   var expandedClickBannerURL;
   var sponsorLogoClickURL;


   var trackvars = true;
   var prefix = "VideoInterval-";
   if(trackvars){

      try {
      duration = adXML.firstChild.getAttribute("duration");
      }catch(e){
         log("Error getting duration from xml: " + e.message);
         duration = ""; }


      try {
       starturl = getTheNodeValue(adXML,"starturl");
       starturl = starturl.replace(/___AMPERSAND___/,"&");

      }catch(e){
         log("Error getting start url from xml: " + e.message);
         starturl = ""; }

      try {
       midurl = getTheNodeValue(adXML,"midurl");
       midurl = midurl.replace(/___AMPERSAND___/,"&");
       //log("MID: " + midurl);
      }catch(e){
         log("Error getting mid url from xml: " + e.message);
         midurl = "";
         }

      try {
       endurl = getTheNodeValue(adXML,"endurl");
       endurl = endurl.replace(/___AMPERSAND___/,"&");
       //log("END: " + endurl);
      }catch(e){
         log("Error getting end url from xml: " +e.message);
         endurl = ""; }
      }

   videoURL = getTheNodeValue(adXML,"videoURL");
   videoClickURL = getTheNodeValue(adXML,"videoClickURL");
   videoClickURL = videoClickURL.replace(/___AMPERSAND___/,"&");
   collapsedBannerURL = getTheNodeValue(adXML,"collapsedBannerURL");
   collapsedBannerClickURL = getTheNodeValue(adXML,"collapsedBannerClickURL");
   expandedBannerURL = getTheNodeValue(adXML,"expandedBannerURL");
   expandedBannerClickURL = getTheNodeValue(adXML,"exandedBannerClickURL");
   sponsorLogoURL = getTheNodeValue(adXML,"sponsorLogoURL");
   sponsorLogoClickURL = getTheNodeValue(adXML,"sponsorLogoClickURL");
   skinURL = getTheNodeValue(adXML,"skinURL");

   var sponsor = getTheNodeValue(adXML,"advertiser");
   var campaign = getTheNodeValue(adXML,"campaign");

    _$adStartURL = starturl;

   // now fire a tracker for any start url that was entered
   if(!override){
   	TSCM.video.Reporter.fireTracker(starturl,'firetracker');
	}

   /*if(override){
      TSCM.video.Guide.adPlaying = false;
      videoURL='://www.thestreet.com/video/img/blank.flv';
      videoClickURL='';
   }*/  

   var adObject = {
      type:"videoAd",
      videoURL: videoURL,
      duration: duration,
      trackPointTime:0,
      trackStartURLs:'',
      trackMidURLs:'',
      trackEndURLs:'',
      videoClickURL:videoClickURL
      /*collapsedBannerURL:collapsedBannerURL,
      collapsedBannerClickURL:collapsedBannerClickURL,
      expandedBannerURL:expandedBannerURL,
      expandedBannerClickURL:expandedBannerClickURL*/
      /*(sponsor:sponsor,
      campaign:campaign*/
   }
    log(adObject.videoURL);   
    modAds.showAd(adObject); //send the ad object to the player: in this case, it's just the video related pieces


   /*
	if(!override){
      TSCM.video.Guide.adPlaying = true;
      callFlash("getCurrentTitle");
	}
   */


   //*** set iframes ***//

   if(!override){
      var leader,box;
      if(document.location.pathname.indexOf("/msvideo/")!=-1){
         leader = document.getElementById("iframe_ad728x90t2");
         box  = document.getElementById("iframe_ad336x280t2");
      }else{
         leader = document.getElementById("iframe_ad728x90t2");
         box  = document.getElementById("iframe_ad336x280t3");
      }

	  if (leader && collapsedBannerURL) {
	  	leader.src = collapsedBannerURL;
	  }
	  if (box && expandedBannerURL) {
	  	box.src = expandedBannerURL;
	  }
   }

   // set the sponsor logo if any
   if(sponsorLogoURL.length > 0){
      var link;
      if(sponsorLogoClickURL.length > 0){
         link = sponsorLogoClickURL;
      }else{
         link = videoClickURL;
      }
      var im = "<img src='" + sponsorLogoURL + "'>";
      var ih = "<a target='sponsorwin' href='" + link + "'>" + im  + "</a>";

      YAHOO.util.Dom.get('sponsorlogo').innerHTML = ih;
   }


   if(typeof skinURL != "undefined"){
      if(skinURL.indexOf("http:")!= -1){
         //var channelarea = YAHOO.util.Dom.get('channelcontent');
         YAHOO.util.Dom.setStyle('channelcontent',"background-image","url(" + skinURL + ")");
         //alert('setting skin');
         //YAHOO.util.Dom.setStyle('body',"background-image","url(" + skinURL + ")");
      }
   }else{
      //log('skinurl undefined.');
   }


   /* handle a middle tracker */
   try {



    //setTimeout( foo,(halfdur * 1000));
    //log("TIMER VID ON " + halfdur );


   // need to request current video so as to report it (pageview wise)
   if(!override){
      TSCM.video.Guide.adPlaying = true;
	  //log('no overrride ');
       modVp.getCurrentVideo();
      //callFlash("getCurrentTitle");

      // we are setting an ad in the reporter module to refer back to on interval tracking
      TSCM.video.Guide.ad = ad;
      TSCM.video.Reporter.ad = {duration:duration,sponsor:sponsor,campaign:campaign,starturl:starturl,midurl:midurl,endurl:endurl,mid:false,channel:ch};
      TSCM.video.Reporter.adstart(ad);

   }

    //var ad = TSCM.video.Guide.ad;
    //log ("the sponsor=" + sponsor);
    if(sponsor == "viagra" && override==false){
			  TSCM.video.Player.justSawViagra=true;
			//TSCM.video.Guide.override = true;
		}
	else {
	  TSCM.video.Player.justSawViagra=false;
	}



   }catch(e){
      log('error creating ad obj ');
         duration = 0;

      }

   }catch(e){
     // log("ERROR:" + e.message);
      log(e);
   }



   TSCM.video.Player.adcount++;

}


function getTheNodeValue(xml,node){
   var nodevalue ;
   //log('getting value for ' + node);
   try {
        nodevalue = xml.getElementsByTagName(node)[0].firstChild.nodeValue;
        //log(nodevalue);
        return nodevalue;
   }catch(e){
      //log('failed to get node value ' + e.message);
       return "";
   }
}


_g = TSCM.video.Guide;

function onMediaComplete(){
   //log("ON MEDIA COMPLETE - autoplay is: " + TSCM.video.Guide.autoplay);
   // get next one in the queue
   //log(TSCM.video.Guide.current_lineup);
   TSCM.video.Player.isRefId = false;

   if(!TSCM.video.Guide.autoplay)return;
   try {
   if(TSCM.video.Guide.fromplaylist){
   	//log("plyed from playlist");
   	  	 var currentvid = TSCM.video.Guide.currentvid.id;
   		 for(var i=0;i<TSCM.video.Player.playlist.length;i++){
	  		if(Number(TSCM.video.Player.playlist[i].id) == Number(currentvid)){
				var vid = TSCM.video.Player.playlist[i];
				playVideo(TSCM.video.Player.playlist[i+1].id);
				return;
	  		}
		}
   }
   }catch(e){
   	//
   }

   try {
      var lineup = TSCM.video.Guide.current_lineup;
      var currentvid = TSCM.video.Guide.currentvid.id;

      // this handles the autoplay
     // log(lineup);
     // log(currentvid);
      for(var i=0;i<lineup.videoIds.length;i++){
         if(Number(lineup.videoIds[i]) == Number(currentvid)){
            //log('next video is: ');
            //log(lineup.videoIds[i+1]);
            playVideo(lineup.videoIds[i+1]);
               var c = TSCM.video.Carousel.getInstance();
               c.moveTo(i+3);
            return;
         }
      }
   }catch(e){
      log('err');
      log(e);

   }

}


function onAdStart(){
  // log("ON AD START");
   try {
   var ad = TSCM.video.Guide.ad;
   var url = _$adStartURL;
   TSCM.video.Reporter.fireTracker(url,'firetracker');
   }catch(e){
      log(e);
   }
}


function onAdComplete(evt){
    log("ON AD COMPLETE");
    modAds.resumeAfterExternalAd();
    
   TSCM.video.Guide.adPlaying = false;

   /*setTimeout(function(){
   TSCM.video.Carousel.reinit();
   },1500);*/


   try {
   var ad = TSCM.video.Guide.ad;
   var url = _$adStartURL;
   TSCM.video.Reporter.adend();

   // force one ad
   //if(TSCM.video.Reporter.ad.sponsor == "viagra"){
    //  if(TSCM.video.Player.firstRun = true){
     //    TSCM.video.Guide.adfreq = 2;
    //     TSCM.video.Player.firstRun = false;
     // }
  // }

   /*var ch = bctoString(TSCM.video.Guide.current_lineup.refid);
   //TSCM.video.Guide.adchannel = ch;
   if(ch == "cramermarketupdates"){
      if(TSCM.video.Guide.adcount > TSCM.video.Guide.adfreq ){
         TSCM.video.Guide.adcount = 3;
         TSCM.video.Guide.override = false;
      }else{
         TSCM.video.Guide.override = true;
      }
      TSCM.video.Guide.adcount++;
   }
*/


   TSCM.video.Reporter.fireTracker(url,'firetracker');
   }catch(e){
      log(e);
   }
}



function fetchLineupById_Result(o){

//   evtlog("fetch lineup by id result returned:");
//   log(o);
}

function onAdProgress(o){

   try {
      var pos = o.position;
      //log("position: " + pos);
      var dur = Number(TSCM.video.Reporter.ad.duration/2);
      //log("duration: " + dur);

      if(o.position > Number(TSCM.video.Reporter.ad.duration/2)){
         if(TSCM.video.Reporter.ad.mid == false){
            TSCM.video.Reporter.ad.mid=true;
            //log('firing middle interval');
            TSCM.video.Reporter.admiddle();
            setTimeout(function(){
            TSCM.video.Reporter.fireTracker(TSCM.video.Reporter.ad.midurl,'firetracker')
            },500);
         }
      }
			//log(TSCM.video.Guide.over30);

	   if (o.position>30 && TSCM.video.Guide.skipSet==false  ){
		//callFlash("setControlsMode", "video");

		//YAHOO.util.Dom.get('skipset').innerHTML ="<div style='float:right;margin-right:8px'><div style='width:100px;border:1px solid #cccccc;background:#eeeeee;text-align:center'><a style='cursor:pointer;color:999999' onclick='callFlash(\"endExternalAd\",true);'>Skip Ad</a></div></div>" + "<br/>";
		//TSCM.video.Guide.skipSet=true;



        }

   }catch(e){
      log(e);
      throw e.message;
   }

}

TSCM.video.EventHandler = new function(){

   TSCM.video.Guide.latestDoneEvent.subscribe(function(){log('latest done');},this,true);

}
var P = TSCM.video.Player;
function onCuePoint(o){
  // log("hit cue point");
  // log(o);
}

function onLoadError(o){
   log("load error");
   log(o);


}

// helps createVidPlayer find the right vid container for each HP tab
var tscTabsVidConfig = {
    count: 0
}
