
// communication between flash apps
// ================================
var selectedVideo_video;
var selectedVideo_image;
var selectedVideo_header;
var selectedVideo_body;
var selectedVideo_subtitles;
var selectedVideo_id;
var selectedVideo_targetPlayerId;
function isReady() 
{
  return jsReady;
}
$jq(document).ready(
	function() {
	    jsReady = true;
	}
);
function receivedFromFlash (vidLoc, imgLoc, bodyText, headerText, targetSWF, id) 
{
	selectedVideo_targetPlayerId = targetSWF;
	selectedVideo_video = vidLoc;
	selectedVideo_image = imgLoc;
	selectedVideo_header = headerText;
	selectedVideo_id = id;
	// the body text contains both body and subtitles link
	var bodyParts = new Array();
	bodyParts = bodyText.split("|");
	selectedVideo_body = bodyParts[0];
	selectedVideo_subtitles = bodyParts[1];
	try {
	    sendToFlash(imgLoc, targetSWF, id);
	    sendToScroller(targetSWF, id);
	}
	catch (ex) {
	}
	if (videoPlayerWatchers)
	{
		for (var i = 0; i < videoPlayerWatchers.length; i++)
		{
			videoPlayerWatchers[i].call();
		}
	}
	return;
}
function sendToFlash(imageLoc, targetSWF, id) {
	Sys.Net.WebServiceProxy.invoke('/webservices/videodetails.asmx', "GetVideoSummaryItem", false, {"id":id, "imageLoc":imageLoc, "targetSwf":targetSWF },  _onMethodComplete, _onFailedComplete,"");
}
_onMethodComplete = function(result, context) {
    var videoDetails = result;

    if (videoDetails) {

        var videoFeedNode;
        for (var i = 0; i < _videoFeedJson.length; i++) {
            if (_videoFeedJson[i].targetSwfId == videoDetails.TargetSwf) {
                videoFeedNode = _videoFeedJson[i];
            }
        }

        if (!videoFeedNode) {
            //cant find the node we require.
            alert('cant find the videoFeedNode we require.');
            return;
        }

        $jq("#" + videoFeedNode.youTubeWrapperClientId + "_embed_overlay").remove();

        var ytPlayer = document.getElementById(videoFeedNode.youTubeClientId);

        var s3Player = thisMovie(videoDetails.TargetSwf);

        if (videoDetails.ShowS3) {
            var delay = 0;
            if (ytPlayer && isVisible(videoFeedNode.youTubeWrapperClientId)) {
                delay = 1000;
                if (ytPlayer.stopVideo) {
                    ytPlayer.stopVideo();
                }
                //set youtube wrapper to invisible
                hideContainer(videoFeedNode.youTubeWrapperClientId);
                //set s3 wrapper to visible
                showContainer(videoFeedNode.s3WrapperClientId);
                var overlay = showLoading(videoFeedNode.s3WrapperClientId);
            }
            if (delay > 0) {
                setTimeout(function timeout() {
                    setS3Movie(videoDetails.TargetSwf, videoDetails.ImageLocation, videoDetails.S3Url, videoDetails.Id, overlay);
                }, delay);
            }
            else {
                setS3Movie(videoDetails.TargetSwf, videoDetails.ImageLocation, videoDetails.S3Url, videoDetails.Id, overlay);
            }
        }
        else if (videoDetails.ShowYouTube) {
            var delay = 0;
            //stop s3 video loading the same movie in will stop it playing
            if (s3Player && isVisible(videoFeedNode.s3WrapperClientId)) {
                delay = 1000;
                s3Player.sendData(videoDetails.ImageLocation, videoDetails.S3Url, videoDetails.Id);
                //set s3 wrapper to invisible
                hideContainer(videoFeedNode.s3WrapperClientId);
                //set youtube wrapper to visible
                showContainer(videoFeedNode.youTubeWrapperClientId);
                var overlay = showLoading(videoFeedNode.youTubeWrapperClientId);
            }
            if (ytPlayer)// && isVisible(videoFeedNode.youTubeWrapperClientId))
            {
                if (delay > 0) {
                    setTimeout(function timeout() { ytPlayerCueVideoById(ytPlayer, videoDetails.YouTubeCode, 0, overlay); }, delay);
                }
                else {
                    ytPlayerCueVideoById(ytPlayer, videoDetails.YouTubeCode, 0, overlay);
                }
            }
        }

        setupVideoEmbedCode(videoFeedNode.youTubeClientId);
    }
}
function ytPlayerCueVideoById(ytPlayer, code, i, overlay, count) {

    if (!count) {
        count = 0;
    }
    else if (count > 20) {
    if (overlay) { overlay.remove() };
        return;
    }
    

    if (typeof (ytPlayer.cueVideoById) == "function") {
        try {
            ytPlayer.cueVideoById(code, i);
            if (overlay) { overlay.remove() };
        }
        catch (ex) {
            count++;
            setTimeout(function timeout() { ytPlayerCueVideoById(ytPlayer, code, i, overlay, count); }, 100);
        }
    }
    else {
        count++;
        setTimeout(function timeout() { ytPlayerCueVideoById(ytPlayer, code, i, overlay, count); }, 100);
    }
}
function setS3Movie(s3ClientId, imageLocation, s3Url, videoId, overlay) {

    var s3Player = thisMovie(s3ClientId);
    if (s3Player) {

        if (typeof (s3Player.sendData) == "function") {
            try
            {
                s3Player.sendData(imageLocation, s3Url, videoId);
                if (overlay) { overlay.remove() };
                var array;
                eval("if(typeof(" + s3ClientId + "_loadedVideoInfo) != 'undefined'){array = " + s3ClientId + "_loadedVideoInfo;}")
                if (array) {
                    array[0] = imageLocation;
                    array[1] = s3Url;
                    array[2] = videoId;
                }
            }
            catch(ex)
            {
                setTimeout(function timeout() { setS3Movie(s3ClientId, imageLocation, s3Url, videoId, overlay); }, 100);
            }
        }
        else {
            setTimeout(function timeout() { setS3Movie(s3ClientId, imageLocation, s3Url, videoId, overlay); }, 100);
        }   
    }
}
_onFailedComplete = function(result, context) {
	alert('failed'+result);
}
function setupContainer(id, playerId) {
    var control = document.getElementById(id);
    if(control)
    {
        if (control.style.display == 'none') {
            control.style.display = 'block';
            hideContainer(id);
        }
    }

    setupVideoEmbedCode(playerId);    
}
function hideContainer(id) {
	var control = $jq("#" + id); 
    if (control){control.css({ "position": "absolute", "top": "-1000px", "left": "-1000px" });}
}
function showContainer(id) 
{
    var control = $jq("#" + id); 
    if (control) {control.css({"position": "","top": "","left": ""});}
}
function showLoading(continerId) {
	var container = $jq("#" + continerId);
	var overlay = $jq("<div>");    
    overlay.css({
        "width": container.width() + "px",
        "height": container.height() + "px",
        "position": "absolute","top": "0","left": "0",
        "background": "white url(/images/loading.gif) no-repeat center center"
    });
    container.css({ "position": "relative" }).append(overlay);
    return overlay;
}
function isVisible(id) {
    return document.getElementById(id).style.position != 'absolute';
}
function sendToScroller(targetSWF, id)
{
	var videoFeed = getVideoFeed(targetSWF,id);	
	if (videoFeed)
	{
		thisMovie(videoFeed.scrollerClientId).sendDataToScroller(videoFeed.feedUrl.replace(videoFeed.videoId, id));	
	}
}
function getVideoFeed(targetSwf, id) 
{
	for (var i=0;i<_videoFeedJson.length;i++)
	{
		var videoFeed = _videoFeedJson[i];		
		if (videoFeed.targetSwfId == targetSwf && videoFeed.isTargetScroller == 'True')
		{			
			return videoFeed;
		}		
	}	
	return null;
}
function thisMovie(movieName) 
{
    if (navigator.appName.indexOf("Microsoft") != -1) 
    {
        return window[movieName]
    }
    else 
    {
        return document[movieName]
    }
}
// video play count logging
// ========================
var _videoLoggerWebServiceUrl;
function videoViewed(videoId)
{
	if (videoId != null && _videoLoggerWebServiceUrl != null)
	{
		if(videoId.toString().indexOf('!', 0) == -1)
		{
			Sys.Net.WebServiceProxy.invoke(_videoLoggerWebServiceUrl, "LogVideoPlay", false, {"videoGuid":videoId});
		}
	}
}

var registeredYtPlayers = new Array();
var registeredYtPlayersLinks = new Array();

function registerEmbedCodeLink(link, player) {
    registeredYtPlayers[registeredYtPlayers.length] = player;
    registeredYtPlayersLinks[registeredYtPlayersLinks.length] = link;
}

function setupVideoEmbedCode(playerId) {

    var linkId;
    var found = false;

    for (i = 0; i < registeredYtPlayers.length; i++) {
        if (registeredYtPlayers[i] == playerId) {
            linkId = registeredYtPlayersLinks[i]; 
            found = true;           
            break;
        }
    }

    if (found) {
        refreshEmbedCodeLink(linkId, playerId);
    }
}

function refreshEmbedCodeLink(linkId, playerId) {

	var linkControl = $jq("#" + linkId);
	var playerControl = $jq("#" + playerId);

    if (playerControl.length > 0) {
        var wrapperId = playerControl.parent().attr("id");

        if (wrapperId && isVisible(wrapperId)) {
            linkControl.parent().css({ "display": "inline" });
            linkControl.attr("href", "javascript:showOverlay('" + wrapperId + "',$jq('#" + playerId + "')[0].getVideoEmbedCode())");
        }
        else {
            linkControl.parent().css({ "display": "none" });
        }
    }
    else {

        setTimeout(function timeout() { refreshEmbedCodeLink(linkId, playerId) }, 500);
    
    }
}

function showOverlay(wrapperId, text) {
	var container = $jq("#" + wrapperId);
	var overlay = $jq("<div>");
    overlay.attr("id", wrapperId + "_embed_overlay");
    overlay.css({
        "width": container.width() + "px",
        "height": container.height() + "px",
        "position": "absolute", "top": "0", "left": "0"//,
        //"margin": "10px 20px 40px 20px"
    });
    var inner = $jq("<div>");
    inner.css({
        "padding": "5px",
        "background": "white",
        "border": "#B1B1B1 solid 1px"
    });
    overlay.append(inner);
    var textArea = $jq("<textarea>");
    textArea.css({
        "width": container.width() - 20 + "px",
        "height": container.height() - 71 + "px"
    });
    textArea.val(text);
    textArea.click(function() { });
    var closeButton = $jq("<button>");
    var copyButton = $jq("<button>");
    closeButton.css({
        "font-size": "12px",
        "float": "right",
        "margin-top": "5px"
    });
    copyButton.css({
        "font-size": "12px",
        "float": "right",
        "margin-top": "5px",
        "margin-left": "5px"
    });
    closeButton.html("close");
    copyButton.html("copy code");
    inner.append(textArea);
    if (window.clipboardData && clipboardData.setData) {
        inner.append(copyButton);
        copyButton.click(function copy() {

            var s = textArea.val();

            try {
                if (window.clipboardData && clipboardData.setData) {
                    clipboardData.setData("Text", s);
                }
                overlay.remove();
            }
            catch (ex)
        { alert(ex); }
            return false;

        });
    }    
    inner.append(closeButton);
    var clear = $jq("<div>");
    clear.css({
        "clear": "both",
        "height": "1px",
        "font-size" : "1px"
    });
    inner.append(clear);
    closeButton.click(function click() { overlay.remove(); return false; });   
    container.css({ "position": "relative" }).append(overlay);
}
function stopPlayer(youtubePlayerId, flashPlayerId) {
    try
    {
    	var ytPlayer = $jq("#" + youtubePlayerId);
        if (ytPlayer.length > 0 && ytPlayer[0].stopVideo) {
            ytPlayer[0].stopVideo();
        }
    }catch(ex){}
    try
    {
        var array;
        eval("if(typeof("+flashPlayerId+"_loadedVideoInfo) != 'undefined'){array = " + flashPlayerId + "_loadedVideoInfo;}")    
        var fPlayer = $jq("#" + flashPlayerId);
        if (fPlayer.length > 0 && fPlayer[0].sendData && array && array.length == 3) {
            fPlayer[0].sendData(array[0], array[1], array[2]);
        }
    }catch(ex){}
}

