/**
 * @author kfrank
 * @version 1.0
 * @type {Object} Singleton - used to switch videos on Consumer TV pages
 * @copyright 4/9/08
 * @requires from YUI - http://yui.yahooapis.com/2.3.0/build/yahoo-dom-event/yahoo-dom-event.js
 * @requires from EXPOTV - http://www.expotv.com/js/sites/expo/common.js
 * @requires from EXPOTV - http://www.expotv.com/js/utils/SWFObject.js
 * @requires from EXPOTV - http://www.expotv.com/js/videoPlayer/VideoPlayerManager.js
 */
    EXPOTV.ConsumerTV = new function()
{
    var self = this;
    this.videoObjectManager = [];
    this.playerIdStr = "consumerTvVideoPlayer";
    this.playerEventsTriggerFunctionStr = "EXPOTV.VideoPlayerManager.broadcastEventsHandler";
    this.videoPlayer = null;
    this.selectedVideoObj = null;
    this.isPageLoad = true;
    this.featuredVideoBlockEl = null;
    this.descriptionBlockEl = null;

    this.broadcastEventsHandler = function(oBroadcastEvents)
    {
        var broadcastEventsObj = oBroadcastEvents;
        var eventTypeStr = broadcastEventsObj.eventType;
        //is this our player or another one
        if (EXPOTV.VideoPlayerManager.players[broadcastEventsObj.playerId] === self.videoPlayer)
        {
            if(eventTypeStr === "onready" || eventTypeStr === "onpause")
            {
                self.videoPlayer.isReady = true;
                if(self.isPageLoad)
                {
                    self.isPageLoad = false;
                    YAHOO.util.Dom.setStyle(self.featuredVideoBlockEl, "display", "block");
                    YAHOO.util.Dom.setStyle(self.descriptionBlockEl, "display", "block");
                }
                //remove wait class
                for (var i = 0; i < self.videoObjectManager.length; i++)
                {
                    var tempVideoObj = self.videoObjectManager[i];
                    YAHOO.util.Dom.removeClass(tempVideoObj.htmlEl, "wait");
                }
            }
        }
    };

    this.init = function(oEvent, aArgs, oPlayerData)
    {
	self.featuredVideoBlockEl = YAHOO.util.Dom.get("featuredvideoblock");
        self.descriptionBlockEl = YAHOO.util.Dom.get("descriptionblock");
        var anchorArray = self.featuredVideoBlockEl.getElementsByTagName("a");
	for (var i=0; i < EXPOTV.ConsumerTV.videos.length; i++)
	{
	    var videoObj = EXPOTV.ConsumerTV.videos[i];
            var anchorEl = anchorArray[i];
            YAHOO.util.Dom.addClass(anchorEl, "wait");
	    YAHOO.util.Event.on(anchorEl, "click", self.selectVideo, true);
            videoObj.htmlEl = anchorEl;
            videoObj.htmlEl.videoObj =  videoObj;
            if(videoObj.load)
            {
                self.setSelection(videoObj);
            }
            self.videoObjectManager.push(videoObj);
	}

        var playerDataObj = oPlayerData;
        var videoInfoObj = self.selectedVideoObj;
        self.videoPlayer = EXPOTV.VideoPlayerManager.instantiateVideoPlayer("http://images.expotv.com/expotvplayer/videoPlayer.swf", self.playerIdStr, "328", "320", "9", "#000000");

        var configParamDefaultsObj = {
            "allowFullScreen": "true",
            "scale": "noscale",
            "salign": "TL",
            "wmode": "false",
            "allowScriptAccess": "always",
            "taboola_enabled"               : "TRUE",
            "taboola_link_target"           : "normal",
            "taboola_rotate"                : "normal"
        };

        var flashVarDefaultsObj = {
            "triggerFunctionName"           : self.playerEventsTriggerFunctionStr,
            "playerId"                      : self.playerIdStr,
            "video_url"                     : videoInfoObj.url,
            "video_id"                      : videoInfoObj.id,
            "still_image_url"               : videoInfoObj.still,
            "video_title"                   : videoInfoObj.title,
            "beacon_post_url"               : "http://stats.expotv.com/ping/log.php",
            "beacon_threshold_type"         : "time",
            "beacon_threshold_frequency"    : "10",
            "host"                          : "www.expotv.com",
            "partner_id"                    : "5",
            "show_controls"                 : "true",
            "autoplay"                      : "true",
            "taboola_enabled"               : "TRUE",
            "taboola_link_target"           : "normal",
            "taboola_rotate"                : "normal"
        };
        var target = (playerDataObj.target) ? playerDataObj.target : "playerBlock";

        function joinObjects(oDefaults, oOverrides)
        {
            var defaultsObj = oDefaults;
            var overridesObj = oOverrides;
            for(prop in overridesObj)
            {
                defaultsObj[prop] =  overridesObj[prop];
            }
            return defaultsObj;
        };

        self.videoPlayer.configParams(joinObjects(configParamDefaultsObj, playerDataObj.configParamObj));
        self.videoPlayer.setFlashVars(joinObjects(flashVarDefaultsObj, playerDataObj.flashVarObj));
        self.videoPlayer.replaceContent(target);
        self.videoPlayer.isReady = false;
    }

    this.frontPageInit = function(oEvent, aArgs, oPlayerData)
    {

        var videoObj = EXPOTV.ConsumerTV.frontPageVideo;
        if(videoObj.load)
        {
            self.selectedVideoObj = videoObj;
            //self.selectVideo(null, self.selectedVideoObj);
            self.swapVideo(self.selectedVideoObj);
        }
        self.videoObjectManager.push(videoObj);

        var playerDataObj = oPlayerData;
        var videoInfoObj = self.selectedVideoObj;
        self.videoPlayer = EXPOTV.VideoPlayerManager.instantiateVideoPlayer("http://images.expotv.com/expotvplayer/videoPlayer.swf", self.playerIdStr, "328", "320", "9", "#000000");

        var configParamDefaultsObj = {
            "allowFullScreen": "true",
            "scale": "noscale",
            "salign": "TL",
            "wmode": "false",
            "allowScriptAccess": "always"
        };

        var flashVarDefaultsObj = {
            "triggerFunctionName"           : self.playerEventsTriggerFunctionStr,
            "playerId"                      : self.playerIdStr,
            "video_url"                     : videoInfoObj.url,
            "video_id"                      : videoInfoObj.id,
            "still_image_url"               : videoInfoObj.still,
            "video_title"                   : videoInfoObj.title,
            "beacon_post_url"               : "http://stats.expotv.com/ping/log.php",
            "beacon_threshold_type"         : "time",
            "beacon_threshold_frequency"    : "10",
            "host"                          : "www.expotv.com",
            "partner_id"                    : "5",
            "show_controls"                 : "true",
            "autoplay"                      : "true",
            "taboola_enabled"               : "TRUE",
            "taboola_link_target"           : "normal",
            "taboola_rotate"                : "normal"
        };
        var target = (playerDataObj.target) ? playerDataObj.target : "playerBlock";

        function joinObjects(oDefaults, oOverrides)
        {
            var defaultsObj = oDefaults;
            var overridesObj = oOverrides;
            for(prop in overridesObj)
            {
                defaultsObj[prop] =  overridesObj[prop];
            }
            return defaultsObj;
        };

        self.videoPlayer.configParams(joinObjects(configParamDefaultsObj, playerDataObj.configParamObj));
        self.videoPlayer.setFlashVars(joinObjects(flashVarDefaultsObj, playerDataObj.flashVarObj));
        self.videoPlayer.replaceContent(target);
        self.videoPlayer.isReady = false;
    }

    this.selectVideo = function(oEvent, oSelectedVideo)
    {
	var selectedVideoObj;
        if(oEvent)
        {
            YAHOO.util.Event.preventDefault(oEvent);
            selectedVideoObj = this.videoObj;
        }
        else
        {
            selectedVideoObj = oSelectedVideo;
        }

        for(var i=0; i < EXPOTV.ConsumerTV.videos.length; i++)
	{
	    var videoObj = EXPOTV.ConsumerTV.videos[i];
            if(videoObj.htmlEl === selectedVideoObj.htmlEl)
	    {
		self.swapVideo(videoObj);
            }
        }
    };

    this.swapVideo = function(oVideo)
    {
	var videoObj = oVideo;
	if((self.videoPlayer === null || self.videoPlayer.isReady && !YAHOO.util.Dom.hasClass(videoObj.htmlEl, "selected")))
        {
	    if(self.videoPlayer !== null)
            {
                for (var i = 0; i < EXPOTV.ConsumerTV.videos.length; i++)
                {
                    YAHOO.util.Dom.addClass(EXPOTV.ConsumerTV.videos[i].htmlEl, "wait");
                }
                self.videoPlayer.isReady = false;
                self.setSelection(videoObj);
		self.setText(videoObj);
                self.videoPlayer.loadVideo(
                    {
                        "video_url": videoObj.url,
                        "video_id": videoObj.id,
                        "still_image_url": videoObj.still,
                        "video_title": videoObj.title,
                        "autoplay": "true"
                    }
                );
            }
            return true;
	}
	else
        {
            return false;
        }
    };

    this.setSelection = function(oSelectedVideo)
    {
	self.selectedVideoObj = oSelectedVideo;
	for(var i=0; i < EXPOTV.ConsumerTV.videos.length; i++)
	{
	    var videoObj = EXPOTV.ConsumerTV.videos[i];
	    if(videoObj !== self.selectedVideoObj) YAHOO.util.Dom.removeClass(videoObj.htmlEl, "selected");
	    else YAHOO.util.Dom.addClass(videoObj.htmlEl, "selected");
	}
	self.selectVideo(null, self.selectedVideoObj);
    };

    this.setText = function(oVideo)
    {
	var videoObj = oVideo;
	var titleTarget = YAHOO.util.Dom.get("title");
	var descriptionTarget = YAHOO.util.Dom.get("videodescription");
        var embedTarget = YAHOO.util.Dom.get("embedtextbox");

	titleTarget.innerHTML = videoObj.title;
	descriptionTarget.innerHTML = videoObj.description;
        embedTarget.value = videoObj.embed;
    };

    if(EXPOTV.VideoPlayerManager)
    {
        EXPOTV.VideoPlayerManager.onBroadcastEvents.subscribe(this.broadcastEventsHandler);
    }
};