/* ---[ BEGIN HANDLE PLAYER ]--- */
/* Player Interface */
var player, video, exp, con, ads;

/* called when template loads, we use this to store a reference to the player and modules */
function onTemplateLoaded(pid) {
    /* --- INIT PLAYER --- */
    player = brightcove.getExperience(pid);

    /* --- ENABLE MODULES --- */
    video = player.getModule(APIModules.VIDEO_PLAYER);
    exp = player.getModule(APIModules.EXPERIENCE);
    con = player.getModule(APIModules.CONTENT);
    ads = player.getModule(APIModules.ADVERTISING);

    /* --- EXPERIENCE --- */
    exp.addEventListener(BCExperienceEvent.TEMPLATE_READY, onTemplateReady);
    exp.addEventListener(BCExperienceEvent.CONTENT_LOAD, onContentLoad);

    /* --- CONTENT --- */
    con.addEventListener(BCContentEvent.VIDEO_LOAD, onVideoLoad);

    /* --- VIDEO_PLAYER --- */
    video.addEventListener(BCVideoEvent.STREAM_START, function( evt ){
        var op = "bettertv:";
        op += mdp.bettertvVars._playerID ? mdp.bettertvVars._playerID + ":" : "";
        op += mdp.bettertvVars._playlistID ? mdp.bettertvVars._playlistID + ":" : "";
        op += mdp.bettertvVars._titleID ? mdp.bettertvVars._titleID + ":" : "";

        sendOmnitureEvent ( op + "onStreamStart" );

        onStreamStart(evt);

    } );
    video.addEventListener(BCVideoEvent.VIDEO_COMPLETE, onVideoComplete);

    /* --- ADVERTISING --- */
    /* enableExternalAds - to support the 728x90, Video and overlay */
    ads.enableExternalAds(true);
    /* enableAdFormats (0 - VideoAd, 14 - synchedBanner728x90) */
    ads.enableAdFormats(0,14);
    /* callback for the EXTERNAL_AD event */
    ads.addEventListener(BCAdvertisingEvent.EXTERNAL_AD, onExternalAd);
    /* callback for the AD_COMPLETE event */
    ads.addEventListener(BCAdvertisingEvent.AD_COMPLETE, onAdComplete );
}

function onTemplateReady( evt ) { /* place holder */ }

function onContentLoad( evt ) {/* place holder */}

function onVideoLoad( evt ) { /* place holder */ }

function onStreamStart( evt ) {
    /* --- EVENT: STREAM_START --- */
    /*
     * IF time IS PASSED IN THE QUERY STRING, WE PASS THAT ON LOAD
     */
    if(parseQS("time")) video.seek((parseQS("time")));
}

function onVideoComplete( ) {
    /* --- EVENT: VIDEO_COMPLETE --- */
    var op = "bettertv:";
    op += mdp.bettertvVars._playerID ? mdp.bettertvVars._playerID + ":" : "";
    op += mdp.bettertvVars._playlistID ? mdp.bettertvVars._playlistID + ":" : "";
    op += mdp.bettertvVars._titleID ? mdp.bettertvVars._titleID + ":" : "";

    sendOmnitureEvent ( op + "mediaComplete" );
}

function onExternalAd(evt) {
    /* --- EVENT: EXTERNAL_AD --- */
    if( evt["ad"].indexOf("grey.gif") > -1 ) {
	ads.resumeAfterExternalAd();
	return;

    }

    var adXML = load_xml_content_string(evt["ad"]);
    var videoAd = getVideoAd(adXML);
    var collapsedBannerData = getCollapsedBanner(adXML);
    var expandBannerData = getExpandedBanner(adXML);
    // Render a video Ad using the Adverstising module
    ads.showAd(videoAd);
    renderAd(collapsedBannerData.bannerURL, collapsedBannerData.clickURL,"banner");
    renderAd(expandBannerData.bannerURL, expandBannerData.clickURL,"banner300x250");
}

function renderAd(img, link, div){
    var dv = document.getElementById(div);
    if(dv){
        dv.innerHTML = '<a href="'+ link + '" target="_blank"><img src="'+ img + '" border="0" />';
    }
}

function onAdComplete(evt) {
    /* --- EVENT: AD_COMPLETE --- */
    if(parseQS("time")) video.seek((parseQS("time")));
}

/* ---[ END HANDLE PLAYER ]--- */



/* ---[ BEGIN PARSE QUERY STRING ]--- */

function load_xml_content_string(xmlData) {
    if (window.ActiveXObject) {
        //for IE
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async="false";
        xmlDoc.loadXML(xmlData);
        return xmlDoc;
    } else if (document.implementation && document.implementation.createDocument) {
        //for Mozila
        parser=new DOMParser();
        xmlDoc=parser.parseFromString(xmlData,"text/xml");
        return xmlDoc;
    }
}

// Parses a synchedBanner ad XML and creates a video Ad
// Change accordingly to the XML that you are trafficking as external ad.
function getVideoAd(adXML){

    var videoAd = new Object();

    videoAd.type = "videoAd";

    var nodeItems = adXML.firstChild.childNodes.length;

    var currentNode = adXML.firstChild.firstChild;

    //get the root node attributes
    videoAd.duration = (adXML.firstChild.getAttribute("duration")) ? adXML.firstChild.getAttribute("duration") : 15;

    if(adXML.firstChild.getAttribute("trackStartURLs")) videoAd.trackStartURLs = adXML.firstChild.getAttribute("trackStartURLs").split(",");
    if(adXML.firstChild.getAttribute("trackMidURLs") ) videoAd.trackMidURLs = adXML.firstChild.getAttribute("trackMidURLs").split(",");
    if(adXML.firstChild.getAttribute("trackEndURLs") ) videoAd.trackEndURLs = adXML.firstChild.getAttribute("trackEndURLs").split(",");
    if(adXML.firstChild.getAttribute("trackPointURLs") ) videoAd.trackPointURLs = adXML.firstChild.getAttribute("trackPointURLs").split(",");

    videoAd.trackPointTime = (adXML.firstChild.getAttribute("trackPointTime") ) ? adXML.firstChild.getAttribute("trackPointTime") : 0;

    for(var i = 0; i < nodeItems; i++) {
        //checks to see if the current nodes are in our Rich Media Templates and assigns them if they exist
        if(currentNode.nodeName == "videoURL" && currentNode.firstChild) videoAd.videoURL = currentNode.firstChild.nodeValue;
        if(currentNode.nodeName == "videoClickURL" && currentNode.firstChild) videoAd.videoClickURL = currentNode.firstChild.nodeValue;
        currentNode = currentNode.nextSibling;
    }

    return videoAd;
}

function getCollapsedBanner(adXML){
    var collapsedAd = new Object();

    var nodeItems = adXML.firstChild.childNodes.length;
    var currentNode = adXML.firstChild.firstChild;

    for(var i = 0; i < nodeItems; i++) {
        // Get only the collapseBanner attributes
        if(currentNode.nodeName == "collapsedBannerURL468x60" && currentNode.firstChild) collapsedAd.bannerURL = currentNode.firstChild.nodeValue;
        if(currentNode.nodeName == "collapsedBannerClickURL468x60" && currentNode.firstChild) collapsedAd.clickURL = currentNode.firstChild.nodeValue;

        currentNode = currentNode.nextSibling;
    }

    return collapsedAd;
}

function getExpandedBanner(adXML){
    var expandedAd = new Object();

    var nodeItems = adXML.firstChild.childNodes.length;
    var currentNode = adXML.firstChild.firstChild;

    for(var i = 0; i < nodeItems; i++) {
        // Get only the collapseBanner attributes
        if(currentNode.nodeName == "expandedBannerURL" && currentNode.firstChild) expandedAd.bannerURL = currentNode.firstChild.nodeValue;
        if(currentNode.nodeName == "expandedBannerClickURL" && currentNode.firstChild) expandedAd.clickURL = currentNode.firstChild.nodeValue;

        currentNode = currentNode.nextSibling;
    }

    return expandedAd;
}

/* parse querystring */
function parseQS(str) {
    var qs = window.location.search.substring(1);
    var vs = qs.split("&");
    for (var i=0;i<vs.length;i++) {
        var st = vs[i].split("=");
        if (st[0] == str) {
            return st[1];
        }
    }
    return false;
}

function sendOmnitureEvent ( s ){
    if(typeof(window.refreshAdFrame) != "function") window.refreshAdFrame = function(){/*filler*/};
    if(typeof( sendLinkEvent ) == "function") sendLinkEvent( "", s );
}
/* ---[ END PARSE QUERY STRING ]--- */

