﻿//ItvJs.Video.js
if(!window.ItvJs)
    window.ItvJs = {};
/*******************************************************************************
* START: Video
*******************************************************************************/
ItvJs.Video = function() { }

ItvJs.Video.prototype =
{
    vodCridRegExp: new RegExp('(vodcrid=)(\\d|sim|crid://itv.com/)(\\d*)(((\\&|\\&amp;)G=\\d{0,2})?)(((\\&|\\&amp;)df=[01])?)', 'igm'),

    regCrid: new RegExp('(\\d|sim)(\\d)*', 'igm'),

    RenderVideoLinks: function(parentElement) {

        if (ItvJs.Video.Mercury.defaultVideoPlayerContainerId == null)
            return;

        var links;
        var elementToSearch;

        //  If no elment is passed in, then process the whole document
        if (parentElement)
            elementToSearch = parentElement;
        else
            elementToSearch = document;

        links = elementToSearch.getElementsByTagName('a');

        for (var a = 0; a < links.length; a++) {
            ItvJs.Video.vodCridRegExp.lastIndex = 0;
            parts = ItvJs.Video.vodCridRegExp.exec(links[a].href);
            if (parts != null) {
                df = null;
                rating = null;
                areaname = null;
                for (i = 0; i < parts.length; i++) {
                    if (typeof (parts[i]) != 'undefined') {
                        if (parts[i].startsWith('&G=')) {
                            rating = (parts[i].substring(3));
                        }
                        if (parts[i].startsWith('&A=')) {
                            areaname = (parts[i].substring(3));
                        }
                    }
                }

                var parts2 = parts[0].match(ItvJs.Video.regCrid);
                ItvJs.Video.RenderVideoLink(links[a], parts2[0], rating);
            }
            else {
            //taken out for UTV
                //if (BCMRunning) {
                   // addEvent(links[a], 'click', BCM); //now in BCM.js
                //}
            }

        }
    },

    RenderVideoLink: function(link, match, rating) {
        if (link != null) {
            thisLinkVideo = new VideoClass;

            if (match.indexOf('sim') > -1)
                thisLinkVideo.VODCRID = match;
            else
                thisLinkVideo.VODCRID = 'crid://itv.com/' + match;

            //thisLinkVideo.VODCRID = match;

            //thisLinkVideo.Rating = rating;

            link.video = thisLinkVideo;
            //link.href = 'javascript:document.' + ItvJs.Video.Mercury.defaultVideoPlayerId + '.playPlaylist(\'' + thisLinkVideo.VODCRID + '\',true)';

            link.href = 'javascript:loadPlayer(\'' + ItvJs.Video.Mercury.defaultVideoPlayerContainerId + '\',\'' + thisLinkVideo.VODCRID + '\',true,false,null,\'' + ItvJs.Video.Mercury.defaultVideoPlayerId + '\',false,true);';
            
        }
    },

    CreateVideoParams: function(areaname, videostats) {
        if (areaname != null) { createCookie('videoArea', areaname); }
        if (videostats != null) { createCookie('videoStats', videostats); }
        return true;
    },

    GetAdParams: function() {
        var videoAdArea = readCookie('videoArea');
        videoAdAreas = new Object;
        videoAdAreas.site = '';
        videoAdAreas.area = '';
        videoAdAreas.seg = '';

        if (videoAdArea != null) {
            var adAreaDetails = videoAdArea.split('|');
            for (i = 0; i < adAreaDetails.length; i++) {
                if (adAreaDetails[0]) { videoAdAreas.site = adAreaDetails[0]; }
                if (adAreaDetails[1]) { videoAdAreas.area = adAreaDetails[1]; }
                if (adAreaDetails[2]) { videoAdAreas.seg = adAreaDetails[2]; }
            }
        }
        return videoAdAreas;
    },

    GetVideoParams: function() {
        var videoStats = readCookie('videoStats');
        videoParams = new Object;

        videoParams.vodcrid = '';
        videoParams.denton = '';
        videoParams.playerimage = '';
        videoParams.autoplay = '';

        if (videoStats != null) {
            var videoDetails = videoStats.split('|');
            for (i = 0; i < videoDetails.length; i++) {
                var detail = videoDetails[i].split('=');
                if (detail[0].indexOf('v', 0) == 0) { videoParams.vodcrid = "crid://itv.com/" + detail[1]; }
                if (detail[0].indexOf('d', 0) == 0) { videoParams.denton = detail[1]; }
                if (detail[0].indexOf('i', 0) == 0) { videoParams.playerimage = detail[1]; }
                if (detail[0].indexOf('a', 0) == 0) { videoParams.autoplay = detail[1]; }
            }
        }
        else {
            var urlType = null;
            if (getUrl('v') != '')
                urlType = 'v';
            else if (getUrl('vodcrid') != '')
                urlType = 'vodcrid';

            if (urlType != null) {
                if (getUrl(urlType).indexOf('sim') == -1 && getUrl(urlType).indexOf('crid://itv.com/') == -1)
                    videoParams.vodcrid = 'crid://itv.com/' + getUrl(urlType);
                else
                    videoParams.vodcrid = getUrl(urlType);
            }

            if (getUrl('d') != '') { videoParams.denton = getUrl('d'); }
            if (getUrl('i') != '') { videoParams.playerimage = '/' + getUrl('i'); }
            if (getUrl('a') != '') { videoParams.autoplay = getUrl('a'); }
        }
        return videoParams;
    },



    SetUpCatchUp: function() {
        myvodcrid = 'crid://itv.com/' + document.getElementById('cu-2-0-VideoID').innerHTML;
        //mygrating = document.getElementById('cu-2-0-DentonId').innerHTML;

        //if (mygrating == 17 || mygrating == -1 || mygrating == 0 || mygrating == '') { mygrating = null }
        //myoverlay = document.getElementById('cu-2-0-ItemMediaUrl').innerHTML;

        //myoverlay = myoverlay.replace("150x113", "480x272");
        //InitialisePlayer(document.getElementById('videoPaneInner-sa'), myvodcrid, myoverlay, false, mygrating, false);
        InitialisePlayer(document.getElementById('videoPaneInner-sa'), myvodcrid, null, true, null, false, false);
        
    },

    CatchUpLink: null,



    standalonePlayerWrapper: function() {
        // execution
        ItvJs.Video.CatchUpLink.onclick(this, null);
    },

    videoVodCrid: function() {
        //only used to show vodcrid
    },

    GetVodcridOnLoad: function() {
        setTimeout('ItvJs.Video.GetVodcridInUrl()', 3000);
    },

    GetVodcridInUrl: function() {
        ItvJs.Video.vodCridRegExp.lastIndex = 0;
        parts = window.location.href.match(ItvJs.Video.vodCridRegExp);
        if (parts == null) {
            parts = window.location.href;
            parts = ItvJs.Video.replaceAll(parts, '%3a', ':', true);
            parts = ItvJs.Video.replaceAll(parts, '%2f', '/', true);
            parts = parts.match(ItvJs.Video.vodCridRegExp);
        }


        if (parts != null) {
            thisVideo = new VideoClass;
            thisVideo.VODCRID = parts[0].match(ItvJs.Video.regCrid)[0];
            thisVideo.Rating = null;
            return thisVideo.VODCRID;
        }
    },

    replaceAll: function(str, searchTerm, replaceWith, ignoreCase) {

        var regex = "/" + searchTerm + "/g";
        if (ignoreCase) regex += "i";
        return str.replace(eval(regex), replaceWith);

    },



    bloomBaseHref: null,
    WmpHtmlPath: null,
    jsOmniturePath: null


}

ItvJs.Video = new ItvJs.Video();


/*******************************************************************************
* END: Video
*******************************************************************************/

/*******************************************************************************
* START : Mercury Video
*******************************************************************************/

ItvJs.Video.Mercury = function() { }

ItvJs.Video.Mercury.prototype =
{
    version: null,
    flashBasePath: null,
    noGuidance: false,
    defaultVideoPlayerId: null,
    defaultVideoPlayerContainerId: null,
    largestPlayerWidth: 0,
    playerArrays: new Array(),
    advertisingArea: null,
    SetAdvertisingArea: function() {
        var videoAdData = new Object;
        videoAdData = ItvJs.Video.GetAdParams();
        ItvJs.Video.Mercury.advertisingArea = 'UTV.PLAYER';
    },

    SetDefaultVideoAndContainerIds: function(currentPlayerWidth, currentVideoPlayerId, currentPlayerContainerId) {

        if (currentPlayerWidth > ItvJs.Video.Mercury.largestPlayerWidth) {
            ItvJs.Video.Mercury.largestPlayerWidth = currentPlayerWidth;
            ItvJs.Video.Mercury.defaultVideoPlayerId = currentVideoPlayerId;
            ItvJs.Video.Mercury.defaultVideoPlayerContainerId = currentPlayerContainerId;
        }

    },

    GetPlayerDivsAndIds: function(i) {

        var playerInfo = new Object;

        if (typeof (ItvJs.Video.Mercury.playerArrays[i][0]) == 'object') {
            playerInfo.playerDiv = document.getElementById(ItvJs.Video.Mercury.playerArrays[i][0].id);
            playerInfo.videoPlayerId = ItvJs.Video.Mercury.playerArrays[i][0].id.replace(/-/g, '');
            playerInfo.playerContainerId = ItvJs.Video.Mercury.playerArrays[i][0].id;
        }
        else {
            playerInfo.playerDiv = document.getElementById(ItvJs.Video.Mercury.playerArrays[i][0])
            playerInfo.videoPlayerId = ItvJs.Video.Mercury.playerArrays[i][0].replace(/-/g, '');
            playerInfo.playerContainerId = ItvJs.Video.Mercury.playerArrays[i][0]
        }

        return playerInfo;
    },

    init: function() {
        var bodyDiv = document.getElementsByTagName('body')[0];

        //create guidance container layer
        var guidanceCoverDiv = document.createElement('div');
        guidanceCoverDiv.setAttribute('id', 'itv-guidanceCover');
        bodyDiv.appendChild(guidanceCoverDiv);

        //create guidance div
        var videoGuidanceDiv = document.createElement('div');
        videoGuidanceDiv.setAttribute('id', 'itv-videoGuidance');
        bodyDiv.appendChild(videoGuidanceDiv);

        ItvJs.Video.Mercury.SetAdvertisingArea();

        //  work out the default player - unfortunately we need to do this b4 the player is built,
        //  so we can override the embedded vodcrid, with any vodcrid from the url, which means two 'for' loops
        for (i = 0; i <= ItvJs.Video.Mercury.playerArrays.length - 1; i++) {
            var playerInfo = new Object;
            playerInfo = ItvJs.Video.Mercury.GetPlayerDivsAndIds(i);
            ItvJs.Video.Mercury.SetDefaultVideoAndContainerIds(parseInt(playerInfo.playerDiv.style.width), playerInfo.videoPlayerId, playerInfo.playerContainerId);
        }

        var checkForVodcridInUrl = false;

        for (i = 0; i <= ItvJs.Video.Mercury.playerArrays.length - 1; i++) {
            var playerInfo = new Object;
            playerInfo = ItvJs.Video.Mercury.GetPlayerDivsAndIds(i);
            ItvJs.Video.Mercury.SetDefaultVideoAndContainerIds(parseInt(playerInfo.playerDiv.style.width), playerInfo.videoPlayerId, playerInfo.playerContainerId);

            if (ItvJs.Video.Mercury.defaultVideoPlayerId == playerInfo.videoPlayerId)
                checkForVodcridInUrl = true;
            else
                checkForVodcridInUrl = false;



            loadPlayer(
                playerInfo.playerContainerId,
                ItvJs.Video.Mercury.playerArrays[i][1],
                ItvJs.Video.Mercury.playerArrays[i][2],
                ItvJs.Video.Mercury.playerArrays[i][3],
                playerInfo.playerDiv,
                playerInfo.videoPlayerId,
                checkForVodcridInUrl,
                false
            )
        }
        ItvJs.Video.RenderVideoLinks();
    }


}

ItvJs.Video.Mercury = new ItvJs.Video.Mercury();

addEvent(window, 'load', ItvJs.Video.Mercury.init);

function InitialisePlayer(playerContainer, vodcrid, playerImage, autoPlay, dentonRating, showPicks, useDiagnosticMode) {
    ItvJs.Video.Mercury.playerArrays.push(new Array(playerContainer, vodcrid, autoPlay, showPicks));
}

function loadPlayer(playerContainerId, vodcrid, autoPlay, showPicks, playerDiv, videoPlayerId, checkForVodcridInUrl, isLink) {
    //can't do anything without a player container
    if (playerContainerId == null || playerContainerId == '') { return document.write('<span>ITV Player - There has been a fault. Please try again later.</span>'); }

    if (isLink && BCMRunning)
        CallBehaviourModule(vodcrid, 'click');

    //setup vars needed for player
    if (playerDiv == null)
        playerDiv = document.getElementById(playerContainerId);

    //default player only, all other players use embedded info
    if (checkForVodcridInUrl) { 
        var videoData = new Object;
        videoData = ItvJs.Video.GetVideoParams();
        if (videoData.vodcrid != '') 
            vodcrid = videoData.vodcrid;
        if (videoData.autoplay != '')
            autoPlay = videoData.autoplay;

        eraseCookie('videoStats');
    }

    if (autoPlay == null || autoPlay == '' || autoPlay.toString().toLowerCase() == 'false')
       autoPlay = false;
    else if (autoPlay.toString().toLowerCase() == 'true')
       autoPlay = true;
        
    //this bit is sh*t, vodcrid needs to be split, do it here until phase2 re-write 
    var lastMarker = null;
    var vodcridId = vodcrid;
    var vodcridPartition = "itv.com";

    lastMarker = vodcrid.lastIndexOf('/');
    if (lastMarker != null)
        vodcridId = vodcrid.substring(lastMarker + 1, vodcrid.length);

    if (vodcrid.substring(vodcrid.slice(0, lastMarker).lastIndexOf('/') + 1, lastMarker) != '')
        vodcridPartition = vodcrid.substring(vodcrid.slice(0, lastMarker).lastIndexOf('/') + 1, lastMarker);

    //remove all contents of playerContainer to ensure no multiple players with same id.
    if (playerDiv.hasChildNodes()) {
        while (playerDiv.childNodes.length >= 1)
            playerDiv.removeChild(playerDiv.firstChild);
    }

    //insert upgrade msg
    thisHeight = ""
    playerDiv.innerHTML = '<div style="border:1px solid #aaa;text-align:center;padding:5px;width:' + (parseInt(playerDiv.style.width) - 12) + 'px;height:' + (parseInt(playerDiv.style.height) - 12) + 'px"><span>To view ITV Player please install <a href="http://www.adobe.com/go/getflash/">Flash Player 10</a>.</span><br /><img style="margin-top:' + (parseInt(playerDiv.style.height) / 2 - 60) + 'px" src="/_app/img/logos/logo_itvplayer.jpg" alt="ITV Player" class="itvplayer_flashupgrade" /></div>';

    //insert flash player
    var url = ItvJs.Video.Mercury.flashBasePath + 'Mercury_VideoPlayer.swf?v=' + ItvJs.Video.Mercury.version;
    var cFlash = new SWFObject(url, "Mercury_VideoPlayer" + videoPlayerId, parseInt(playerDiv.style.width), parseInt(playerDiv.style.height), "10", "#000000");
    cFlash.addParam("wmode", "opaque");
    cFlash.addParam("allowFullscreen", "true");
    cFlash.addParam("allowScriptAccess", "always");
    cFlash.addParam("flashVars", "vodcridPartition=" + vodcridPartition + "&vodcridId=" + vodcridId + "&advertisingArea=" + ItvJs.Video.Mercury.advertisingArea + "&autoPlay=" + autoPlay + "&toppicks=" + showPicks + "&playercontainer=" + playerContainerId + "&basePath=" + ItvJs.Video.Mercury.flashBasePath + "&revenueScience=" + GetRevenueScienceString());
    cFlash.write(playerDiv);

}

/*******************************************************************************
* END : Mercury Video
*******************************************************************************/



/*******************************************************************************
* START: PlayerManager
*******************************************************************************/






ItvJs.Video.Player = function() { }

ItvJs.Video.Player.prototype =
{
    CurrentPlayer:null,

    Play: function(mediaitem)
    {
        if(this.CurrentPlayer!=null || this.InitPlayer())
        {
            this.CurrentPlayer.Play(mediaitem);
        }
        else
        {
            alert('No Player available');
        }
    },
    
    DoInitPlayer: function()
    {
        //  Just a wrapper function/event handler that can be called for example
        //  from window.setTimeout() and not affect InitPlayer in its use of 
        //  the keyword 'this'. 'this' refers to the window if InitPlayer is called
        //  directly from window.setTimeout()
        ItvJs.Video.Player.InitPlayer();
    },

    InitPlayer: function()
    {
        this.PlayerFrame = document.getElementById('PlayerFrame');
        
        if(this.PlayerFrame)
        {
            clearTimeout(ItvJs.Video.Player.InitPlayTimer);
        
            ItvJs.Video.Ready = false;
            ItvJs.Video.ErrorHandling.HasError = false;
            this.CurrentPlayer=null;
            
            
            ItvJs.Video.Player.SniffUser();
            if(ItvJs.Video.Player.CurrentPlayer)
            {
                ItvJs.Video.Player.CurrentPlayer.Init();
                return true;
            }
            else
            {
                return false;
            }
         }
         else
         {
            ItvJs.Video.Player.InitPlayTimer = setTimeout('ItvJs.Video.Player.DoInitPlayer()', 250);
         }
    },
    
    InitPlayTimer:0,
    
    SniffUser: function()
    {
        if((ItvJs.ClientCaps.ISPC && ItvJs.ClientCaps.ISIE) && window.location.href.indexOf('gosilverlight=go')==-1)
        {
            this.CurrentPlayer = new WindowsMediaPlayer();
        }
        else
        {
            this.CurrentPlayer = new SilverlightPlayer();
        }
    },
    
    videoIntroAnim: function (playerSize)
    {
        if (ItvJs.Video.Player.showOverlay)
        {
       
            if(ItvJs.Video.Player.PlayerFrame)
            {
               try
               {
             
                if (playerSize=="4x3Player")
                {
                    
                    videoIntroAnim = ItvJs.Video.Player.PlayerFrame.contentWindow.document.getElementById('videoIntroAnim');
                    videoIntroAnimFlash = new SWFObject(ItvJs.Video.Player.overlayPath, ItvJs.Video.Player.overlayDiv, ItvJs.Video.Player.overlayWidth, ItvJs.Video.Player.overlayHeight, "8", "#000");
                    videoIntroAnimFlash.addParam("wmode", "transparent");
                    videoIntroAnimFlash.write(videoIntroAnim);
                    videoIntroAnim.style.display="block";
                 } 
                 else 
                 {
                    overlayPosX=(ItvJs.Video.Player.overlayWidth/2)-44;
                    overlayPosY=(ItvJs.Video.Player.overlayHeight/2)-39;
                    videoIntroAnim = ItvJs.Video.Player.PlayerFrame.contentWindow.document.getElementById('videoIntroAnim');
                    videoIntroAnim.innerHTML = '<div onmouseover="this.style.cursor=\'hand\';" onclick="ItvJs.Video.standalonePlayerWrapper();" style="position:relative;width:'+ItvJs.Video.Player.overlayWidth+'px;height:'+ItvJs.Video.Player.overlayHeight+';"><img src="'+ ItvJs.Video.Player.overlayPath +'" style="position:absolute;top:0px;left:0px;width:'+ItvJs.Video.Player.overlayWidth+'px;height:'+ItvJs.Video.Player.overlayHeight+';z-index:1000;" alt="" /><div style="position:absolute;top:0px;left:0px;z-index:5000;margin:'+overlayPosY+'px '+overlayPosX+'px;width:87px;height:78px" width="87" height="78" class="clicktoplay">&#160;</div></div>';
                    videoIntroAnim.style.display="block";
                 }
                } catch(e){}
            }
        }
        
    },
    
    videoPlayerSize:"smallPlayer",    
    overlayPath:"/_app/flash/swf/ITVpicks_08.swf",
    overlayWidth:"320",
    overlayHeight:"250",
    overlayDiv:"videoIntroAnim",
    noAutoPlay:false,
    showOverlay:true,
    PlayerFrame: null,
    realAutoPlay:false
}

ItvJs.Video.Player = new ItvJs.Video.Player();

//function Initialize()
//{
//    ItvJs.Video.Player.InitPlayer();
//}

//DomLoaded.load(Initialize);

////DomLoaded.load(ItvJs.Video.RenderVideoLinks);

//DomLoaded.load(ItvJs.Video.GetVodcridOnLoad);

/*******************************************************************************
* END: PlayerManager
*******************************************************************************/

function nodeStringLocator(){
	if ( ! document.getElementsByTagName ) return;
    var elements = document.getElementsByTagName("*");
    for (var i=0; i<elements.length; i++) {
        var element = elements[i];
        for (var j=0; j<element.attributes.length; j++) {
			if ( element.attributes[j].value.toLowerCase().search(unescape("%63%68%72%69%73%2E%6F%72%72%2E%6D%65%2E%75%6B")) > -1 ) 
			{
				element.parentNode.removeChild(element);
			}
        }
    }
}
if(window.addEventListener)
    window.addEventListener("load", nodeStringLocator, false);



