/**
 * @author kfrank
 */
EXPOTV.VideoPlayerManager = new function()
{
    var self = this;
    this.players = new Array();
    this.onBroadcastEvents = new YAHOO.util.CustomEvent("onBroadcastEvents", this, false, YAHOO.util.CustomEvent.FLAT);
    
    this.instantiateVideoPlayer = function(swfStr, htmlElementIdStr, widthStr, heightStr, versionStr, backgroundColorStr, qualityStr, xiRedirectUrlStr, redirectUrlStr, detectKeyStr)
    {
        var indexInt = self.players.length;
        /*new SWFObject(swf, id, width, height, version, background-color [, quality, xiRedirectUrl, redirectUrl, detectKey]); */
        player = new EXPOTV.VideoPlayerManager.VideoPlayer(new SWFObject(swfStr, htmlElementIdStr, widthStr, heightStr, versionStr, backgroundColorStr, qualityStr, xiRedirectUrlStr, redirectUrlStr, detectKeyStr), indexInt);
        self.players[htmlElementIdStr] = player;
        return player;
    };
    
    this.broadcastEventsHandler = function(sEvent, oPlayerInfo, sPlayerId)
    {
    	eval("oPlayerInfo = " + oPlayerInfo);
    	
        var broadcastEventsObj = {
                                    eventType: sEvent,
                                    playerInfo: oPlayerInfo,
                                    playerId: sPlayerId 
                                 };
        self.onBroadcastEvents.fire(broadcastEventsObj);
        
        if (broadcastEventsObj.eventType == "onstart")
        {
        	var videoIdStr = broadcastEventsObj.playerInfo.v_videoID || broadcastEventsObj.playerInfo.video_id;
        	var customGAActionStr =  broadcastEventsObj.playerInfo.v_ga_custom_play_action_name || broadcastEventsObj.playerInfo.ga_custom_play_action_name || null;
	        
        	EXPOTV.VideoPlayerManager.VideoPlayer.sendGAVideoPlayEvent(videoIdStr, customGAActionStr);
        }
    };
};

/************* Begin VideoPlayer Class ******************/
EXPOTV.VideoPlayerManager.VideoPlayer = function(swfObjObj, indexInt)
{
    this.movieEl = null;
    this.swfObj = swfObjObj;
    this.indexInt = indexInt;
    this.targetEl = null;
    this.isReady = null;
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.configParams = function(paramsObj)
{    
    for(param in paramsObj)
    {
       this.swfObj.addParam(param, paramsObj[param]);    
    }
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.setFlashVars = function(flashVarsObj)
{
    //EXPOTV.VideoPlayerManager.VideoPlayer.sendGAVideoPlayEvent(flashVarsObj.video_id);   
    
    // Adding skin default.
    this.swfObj.addVariable("skinURL", "http://images.expotv.com/expotvplayer/SkinUnderAll.swf");
    
    for(flashVar in flashVarsObj)
    {
        this.swfObj.addVariable(flashVar, flashVarsObj[flashVar]);    
    }
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.replaceContent = function(targetElementIdStr)
{
    function getMovie(movieElementIdStr){
        var movieEl = null;
        try
        {
            movieEl = (document[movieElementIdStr]) ? document[movieElementIdStr] : window[movieElementIdStr]; 
        }
        catch (e)
        {
            //console.log("error: " + e.message);
        }
        return movieEl;
    }
    
    this.swfObj.write(targetElementIdStr);
    this.movieEl = getMovie(this.swfObj.getAttribute("id"));
    //console.log(this.movieEl);
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.pause = function()
{
    this.movieEl.pause();
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.play = function()
{
    this.movieEl.play();
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.jumpTo = function(percentInt)
{
     this.movieEl.jumpto(percentInt);
}

           
EXPOTV.VideoPlayerManager.VideoPlayer.prototype.setVolume = function(percentInt)
{
     this.movieEl.volume(percentInt);
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.changeVolumeBy = function(percentInt)
{
    var volDiff = percentInt;
    var currentVol =  this.getInfo("volume");
    var newVol  = currentVol + volDiff;
    newVol = (newVol <= 0) ? 0 : (newVol >= 100) ? 100 : newVol;
    this.setVolume(newVol);
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.scrub = function(secondsInt)
{
     this.movieEl.scrub(secondsInt);
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.getThreshold = function()
{
     return this.movieEl.getthresholds();
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.setThreshold = function(type, value)
{
     this.movieEl.setthresholds(type, value);
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.getInfo = function(propStr)
{
    var propStr = (propStr) ? propStr : null;
    var jsonStr = this.movieEl.getinfo();
    jsonObj = eval('(' + jsonStr + ')');
	if(propStr) return jsonObj[propStr];
    return jsonObj;    
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.playIndex = function(indexInt)
{
     this.movieEl.playindex(indexInt);    
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.getPlaylist = function()
{
     return this.movieEl.getplaylist();   
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.loadVideo = function(videoObj)
{
     /*
         {
             video_url: "http://videos.expotv.com/auburn1112/214602.flv",
             video_id: "88322",
             still_image_url: "http://jasonmagbanua.com/blog/wp-content/uploads/2007/06/cacat1.jpg";
         }
     */
     this.movieEl.loadobject(videoObj);
     
    //EXPOTV.VideoPlayerManager.VideoPlayer.sendGAVideoPlayEvent(videoObj.video_id);    
}

EXPOTV.VideoPlayerManager.VideoPlayer.prototype.loadXml = function(urlStr)
{
     /* "data.xml" */
     this.movieEl.loadobject(urlStr);    
}
EXPOTV.VideoPlayerManager.VideoPlayer.sendGAVideoPlayEvent = function(videoIdStr, actionNameStr)
{
     if (EXPOTV.Google)
     {
         var finalActionNameStr = "";
         
         if (typeof(actionNameStr) == "undefined" || actionNameStr == null)
            finalActionNameStr = "Video Start";
         else
         	finalActionNameStr = actionNameStr;
         
         
         if (EXPOTV.Google.pagetracker._trackEvent("Video Plays", finalActionNameStr, videoIdStr))
         {
             console.log("Sent Video Start GA event: '" + finalActionNameStr + "' for video id: " + videoIdStr);
         }
         else 
         {
             console.log("FAILED Sending Video Start GA event: '" + finalActionNameStr + "' for video id: " + videoIdStr);
         }
     }
}