﻿var bcWrapper;

// Modules
var bcExperience;
var bcMenu;
var bcAds;
var bcSocial;
var bcPlayer;

var playerID;
var playerLoaded = false;
var playerReady = false;


function onPlayerLoaded(id) {

    playerLoaded = true;
    playerID = id;

    bcWrapper = brightcove.getExperience(id);

    bcExperience = bcWrapper.getModule(APIModules.EXPERIENCE);
    bcMenu       = bcWrapper.getModule(APIModules.MENU);
    bcAds        = bcWrapper.getModule(APIModules.ADVERTISING);
    bcSocial     = bcWrapper.getModule(APIModules.SOCIAL);
    bcPlayer     = bcWrapper.getModule(APIModules.VIDEO_PLAYER);

}

function onPlayerReady(event) {

    playerReady = true;

    bcPlayer = bcWrapper.getModule(APIModules.VIDEO_PLAYER);
    bcPlayer.addEventListener("mediaProgress", onMediaProgress);
    bcPlayer.addEventListener("mediaChange", onMediaChange);
    bcPlayer.addEventListener("mediaBegin", onMediaBegin);
}

function onPlayerError(event) {
    // alert("info: " + event.info);
}

function onMediaChange(event) {
    // http://docs.brightcove.com/en/player/com/brightcove/api/dtos/MediaCollectionDTO.html


    playerObj = getAncestorByClass(playlistGetObj(playerID), 'VideoPlayer');
    if (!playerObj) {
        return;
    }

    titleObj = playlistGetObj(playerObj.attributes['videoTitleElementID'].value);
    descObj = playlistGetObj(playerObj.attributes['videoDescriptionElementID'].value);

    var currentVid = bcPlayer.getCurrentVideo();

    if (titleObj) {
        titleObj.innerText = '';
        titleObj.innerText = currentVid.displayName;
    }

    if (descObj) {
        var desc = currentVid.shortDescription;
        if (currentVid.linkText) {
            desc += '<br><a href="' + currentVid.linkURL + '">' + currentVid.linkText + "</a>";
        }
        descObj.innerHTML = ''; 
        descObj.innerHTML = desc;
    }

    scrollToView(playerObj.id);

}

function onMediaBegin(event) {

    playerObj = getAncestorByClass(playlistGetObj(playerID), 'VideoPlayer');
    if (!playerObj) {
        return;
    }

    //var videoItemID = playerObj.attributes['videoItemId'].value
    var playerPageID = playerObj.attributes['playerPageID'].value

    var currentVid = bcPlayer.getCurrentVideo();
    var videoBcID = currentVid.id

    CallClientEventPipeline('BrightcovePlayVideo', playerPageID, videoBcID);
}

function onMediaProgress(event) {
//	// if postion is more less than 2 sec or 2 sec from end, set overlay visible; else set it invisible
//	if (event.position < 3) {
//		BCL.overlayImage.setVisible(true);
//	}
//	else if ((event.duration - event.position) < 3) {
//		// set the new source and click-through URL
//		BCL.overlayImage.setSource(BCL.imageData.imageEnd);
//		BCL.overlayImage.setURL(BCL.imageData.urlEnd);
//		// make it visible
//		BCL.overlayImage.setVisible(true);
//	}
//	else {
//		// make image invisible
//		BCL.overlayImage.setVisible(false);
//	}
}

function loadVideo(id, url) {
    bcPlayer.loadVideo(id);
    bcSocial.setLink(url);
}


// -----------------------------------------------------------------------------------------
// Playlist functions

var bciPlayListPlayer;

function playlistThumbSwap(img, src) {

    playlistGetObj(img).src = src;
}

function thumbnailLinkOver(id) {
    var tn = new ThumbnailLink(id);
    tn.img.src = tn.overImage;
    if (tn.title) {
        tn.title.style.color = '#0000FF';
        tn.title.style.textDecoration = 'underline';
    }
}

function thumbnailLinkOut(id) {
    var tn = new ThumbnailLink(id);
    tn.img.src = tn.normalImage;
    if (tn.title) {
        tn.title.style.color = 'Black';
        tn.title.style.textDecoration = 'none';
    }
}

function thumbnailLinkClick(id) {
    var tn = new ThumbnailLink(id);
    if (playlistGetObj('VideoOverlay')) {
        ShowVideoOverlay();
    }
    waitPlayVideo(id);
}

function waitPlayVideo(id) {
    if (playerReady) {
        var tn = new ThumbnailLink(id);
        loadVideo(tn.videoID, tn.viralUrl);
    }
    else {
        window.setTimeout("waitPlayVideo('" + id + "');", 100);
    }
}

function closeOverlay() {
    bcPlayer.pause(true);
    HideVideoOverlay();

}

function ThumbnailLink(id) {
    this.button = playlistGetObj(id);
    this.img = playlistGetObj(this.button.getAttribute('imageElementID'));
    this.title = playlistGetObj(this.button.getAttribute('titleElementID'));
    this.normalImage = this.button.getAttribute('normalImage');
    this.overImage = this.button.getAttribute('overImage');
    this.videoID = this.button.getAttribute('videoID');
    this.viralUrl = this.button.getAttribute('viralUrl');
    this.learnMoreLink = this.button.getAttribute('learnMoreLink');
    this.learnMoreText = this.button.getAttribute('learnMoreText');
    this.videoName = this.title ? this.title.innerText : ''
    // remember ... "title" is actually the tooltop text, not the video name
    this.videoShortDescription = this.button.getAttribute('title');

}

function ShowVideoOverlay() {
    overlay = document.getElementById("VideoOverlay");
    overlay.style.visibility = "visible";
    overlay.style.top = f_scrollTop();
    overlayContainer = document.getElementById("VideoOverlayContainer");
    overlayContainer.style.visibility = "visible";
    overlayContainer.style.top = f_scrollTop() + 100;
}
function HideVideoOverlay() {
    overlay = document.getElementById("VideoOverlay");
    overlay.style.visibility = "hidden";
    overlayContainer = document.getElementById("VideoOverlayContainer");
    overlayContainer.style.visibility = "hidden";
}


function playlistGetObj(id) {
    var obj;

    if (document.getElementById) {
        obj = document.getElementById(id);
    }
    else if (document.all) {
        obj = document.all[id];
    }
    else if (document.layers) {
        obj = document.layers[id];
    }

    return obj;
}

function getAncestorByClass(obj, classname) {
    var c = obj;
    while (p = c.parentNode) {
        if (p.attributes['class'].value == classname) {
            return p;
        }
        c = p;
    }
    return null;
}

// -----------------------------------------------------------------------------------------
// Screen positioning functions

function scrollToView(elem) {
    if (findPos(elem) < f_scrollTop()) {
        document.getElementById(elem).scrollIntoView();
        window.scrollBy(0, -40); 
    }
}

function f_clientWidth() {
    return f_filterResults(
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
    return f_filterResults(
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
    return f_filterResults(
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
    return f_filterResults(
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_filterResults(n_win, n_docel, n_body) {
    var n_result = n_win ? n_win : 0;
    if (n_docel && (!n_result || (n_result > n_docel)))
        n_result = n_docel;
    return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

function findPos(id) {
	var node = document.getElementById(id);
	var curtop = 0;
	var curtopscroll = 0;
	if (node.offsetParent) {
		do {
			curtop += node.offsetTop;
			curtopscroll += node.offsetParent ? node.offsetParent.scrollTop : 0;
		} while (node = node.offsetParent);
		return (curtop - curtopscroll);
	}
}


