/*
 * 
 */ 

// Id of div containing player
var l_wmpPlayerEmbed = "WMPEmbedDiv";
var l_flashPlayerEmbed = "FlashEmbedDiv";

var l_playerType;
var l_movieInstanceId = 0;
var l_aUrl;	// Url Key (Fallback Url)
var l_ismac = navigator.userAgent.match("Mac");
var l_swfLocation = "/swf/";	// trailing "/" required;

function user_SetupGridcast(){
	l_pageLoaded = true;

	gridWL_SetupNewGridcast(
		201,                             // library
		"web-gcr.grid1.gridnetworks.com",// gcr 
		user_ConnectorNotFoundOnSetup,   // Connector Not Found on Setup 
		user_ConnectorNotFoundOnPlay,	 // Connector Not Found on Play/Pub
		user_ConnectorFound              // Connector Found
	);

	gridWL_RegisterPlayCallbacks(user_PlayMovieCallback);
	gridWL_RegisterPublishCallbacks(user_PublishMovieCallback);
	gridWL_RegisterInstallCallbacks(user_alertInstallSuccess, user_alertInstallAbort, '');
	
	// minimum version must be of the form "X.Y.ZZZ" to force upgrade 
	// or null if you don't want to upgrade
	// if you do want to upgrade, second parameter is whether you
	// you upgrade on page load or play
	gridWL_SetupUpgrade(
		"2.1.112",		// min connector version or null
		false			// upgrade on page load?
	)	
}

// This section is only required if you are using the Grid embedded
// Windows Media Player
var l_wmo;	// Windows Media Player Object

// This section is only required if you are using a Flash player
var l_so;         // Flash object
var l_flashType;
var l_flashMinVersion = '9,0,115,0';

// This section is only required if you are using UPnP and the "Watch on TV" button
var l_curDevice;
var l_curButtonName;
var l_curFunctionStr;
var l_curParam;
var l_detectConnector;
var l_pageLoaded = false;

// Intervening function to manipulate urls and set variables if necessary
function user_PlayWMP(aUrl){
	var exti = aUrl.lastIndexOf(".");
	var ext = aUrl.substr(exti+1);

        // Section specific to Grid embededded WMP and JW Flash Player
        switch(ext){
          case "wmv":
				// must destroy player if switching types
                if (l_playerType != "wmp" && l_playerType != undefined)
                        { user_DestroyPlayer(l_flashPlayerEmbed); }
                gridST_PLAYERTYPE = "Windows Media Player";
                l_playerType = "wmp";
                break;
          default:
                alert("Unknown extension");
        }

	l_aUrl = aUrl;
	setTimeout("gridST_PlayMovie('"+aUrl+"')", 500);
}

// Intervening function to manipulate urls and set variables if necessary
function user_PlayFlash(aUrl){
	var exti = aUrl.lastIndexOf(".");
	var ext = aUrl.substr(exti+1);

        // Section specific to Grid embededded WMP and JW Flash Player
        switch(ext){
          case "flv":
          case "mp4":
				// must destroy player if switching types
                if ((l_playerType != "flash" && l_playerType != undefined) ||
                    (l_flashType != ext && l_flashType != undefined) )
                        { user_DestroyPlayer(l_wmpPlayerEmbed); }
                l_playerType = "flash";
                l_flashType = ext;
                switch(ext) {
                  case "flv":
                        gridST_PLAYERTYPE = "Flash/HTTP";
                        break;
                  case "mp4":
                        gridST_PLAYERTYPE = "Flash";
                }
                break;
          default:
                alert("Unknown extension");
        }

	l_aUrl = aUrl;
	if (l_flashType == "flv" || gridWL_h264PlayerOK(true))
        	{
			setTimeout("gridST_PlayMovie('"+aUrl+"')", 500); 
	        }
}

// If you choose not to use the gridcast_tvbutton, then this is where you
// would call gridST_PublishMovie(aDeviceType, aButtonName, aUrl)
function user_PublishMovie(aDeviceType, aButtonName, aUrl){

	// Call to create button which in turn will set it's onclick
	// to call gridST_PublishMovie()
	gridcast_CreateButton(aDeviceType, aButtonName, 'gridST_PublishMovie', aUrl);
}

// If you choose not to use the gridcast_tvbutton, then this is where you
// would call gridST_EnablePublishedLibrary(aDeviceType, aButtonName, aLibrary)
function user_PublishChannel(aDeviceType, aButtonName, aLibrary){

	// Call to create button which in turn will set it's onclick
	// to call gridST_EnablePublishedLibrary()
	gridcast_CreateButton(aDeviceType, aButtonName, 'gridST_EnablePublishedLibrary', aLibrary);
}

// This is the function which directs a Url at a player
// The inside can be replaced by user's own player function
// if not using the Grid embedded Windows Media Player
function user_PlayMovieCallback(aUrl)
{
	// alert(aUrl);

	// fallback URL does not work in h.264 , try again
	if (aUrl == l_aUrl && l_flashType == "mp4"){
		user_DestroyPlayer(l_flashPlayerEmbed);
       		setTimeout("gridST_PlayMovie('"+aUrl+"')", 500);
		return;
	}

	// user_DisplayInstallNotice("playerEmbed", "installNotice");

	// undefined aUrl should only happen when install happens
	// from somewhere other than clicking on media link
	if (aUrl != "undefined" && typeof aUrl != "undefined" ) {

		if (typeof gridST_gcCommObj != 'undefined')
                        { l_movieInstanceId = gridST_gcCommObj.GetInstanceId(aUrl) }
                else
                        { l_movieInstanceId = 0; }

                switch(l_playerType) {
                  case "wmp":

                        // This section is specific to using the Grid
                        // embedded Windows Media Player
			user_EmbedWMP(l_wmpPlayerEmbed);
                        l_wmo.setMovieURL(aUrl);
                        user_testFullscreen();
                        if (l_ismac) {
                              l_wmo.setPosterSrc("/images/gridcast_wl/poster.mov");
                              // same embed call as below
                              l_wmo.embedPlayer(320,240);
                        }
                        else
                        { l_wmo.play(); }
                        break;

                  case "flash":
                        // This section is specific to using the JW Player
                        // Flash Player
			if (user_EmbedFlash(l_flashPlayerEmbed, aUrl))
				{setTimeout("user_loadFlash('"+aUrl+"')", 1000);}
			else
				{setTimeout("user_loadFlash('"+aUrl+"')", 100);}
                        break;
                }
	}
}

// This is the publish notification callback. 
// Gives us success or failure of publish
function user_PublishMovieCallback(aDeviceType, aText, aButtonName){
    if(aDeviceType.toLowerCase() != "xbox"){

        // This shouldn't ever happen...
        gridcast_ButtonFailed(aButtonName, "The device "+aDeviceType+" is not supported with this configuration.");
        return;
    }
        
    if(aText == "OK"){
        gridcast_ButtonReady(aButtonName);
    }
    else {
        // Button failed; send reason (in aText) to be shown in tip
        gridcast_ButtonFailed(aButtonName, aText);
    }
    
}

// Other registered Callbacks
function user_ConnectorFound()
{
	l_detectConnector = true;
}

function user_ConnectorNotFoundOnSetup()
{
	l_detectConnector = false;
}

function user_ConnectorNotFoundOnPlay()
{
	l_detectConnector = false;
	gridWL_PromptForInstall();
}


function user_alertInstallSuccess()
{
	l_detectConnector = true
	if (l_curButtonName)
		{ eval(l_curFunctionStr)(l_curDevice, l_curButtonName, l_curParam);}
	else
		{ gridST_PlayMovie(); }
}

function user_alertInstallAbort()
{
	if (l_curButtonName){
		gridcast_CreateButton(l_curDevice, l_curButtonName, l_curFunctionStr, l_curParam)
		l_curDevice = l_curButtonName = l_curParam = '';
	}
	else
		{ l_playerType = undefined;}
}


// Other functions
function user_EmbedWMP(div){

        if (typeof l_wmo == "undefined" || l_wmo == null) {
                l_wmo = new GRIDCAST.Media.wmv();
                l_wmo.embedPlayer(640,430);
        }
}

function user_EmbedFlash(div, url){

        if (typeof l_so == "undefined" || l_so == null) {

                l_so = new SWFObject(l_swfLocation + 'jwplayer3.swf', div,'640','360','8');

                l_so.addParam('wmode','transparent');
                l_so.addParam('allowscriptaccess','always');
                l_so.addParam('showdownload','true');
                l_so.addParam('bufferlength','1');
		// This width/height required for IE - I know it's redundant
                l_so.addVariable('width', '640');
                l_so.addVariable('height', '360');
                l_so.addVariable('javascriptid', div);
                l_so.addVariable('enablejs','true');
                l_so.addVariable('autostart','true');
		l_so.addVariable('overstretch', 'false');
                l_so.addVariable('type', l_flashType);
		// Fake load as we load separately
		l_so.addVariable('file', 'http://undefined.GlobalMediaServices.net');
                if (l_flashType == "flv")
                //      { l_so.addVariable('streamscript', url); }
                        { l_so.addParam('allowfullscreen', 'false'); }
                else {
                        l_so.addVariable('streamscript','lighttpd');
                        l_so.addParam('allowfullscreen','true');
                }
		// Because of IE, this needs to be a parent div id
                l_so.write('FlashEmbedDivParent');

		var fsid = document.getElementById("fullScreenFlash");	
		fsid.style.display = '';
		return true;
        }
		return false;
}

function user_loadFlash(url)
{
        switch (l_flashType) {
          case "mp4":
                url = url + '&type=.mp4';
                break;
          case "flv":
                url = url + '&type=.flv';
                break;
          default:
                ;
        }

        gridcast_LoadFileJWPlayer(l_flashPlayerEmbed, url);
};

// Send a Flash event to Flash Player
function user_sendFlashEvent(id,typ,prm) {
	gridcast_SendFlashEvent(id,typ,prm);
};

// Receive a Flash event from Flash Player
function user_ReceiveFlashEvent(typ,pr1,pr2,id) {
	gridcast_ReceiveJWFlashEvent(typ,pr1,pr2,id,l_movieInstanceId);
};

function user_StopPlayer(playerType){
        if (playerType == "wmp")
                { l_wmo.stop(); }
        else {   // flash
		gridcast_StopJWPlayer(l_flashPlayerEmbed);
        }
}

function user_DestroyPlayer(id){
	var doc = document.getElementById(id);
	switch(l_playerType){
	  case "wmp":
		var doc2 = document.getElementById("fullScreen");
		user_StopPlayer(l_playerType);
		doc.innerHTML = '';
		doc2.innerHTML = '';
		l_wmo = null;
		break;
	  case "flash":
		var doc2 = document.getElementById("fullScreenFlash");
		user_StopPlayer(l_playerType);
		doc.parentNode.innerHTML = '';
		doc2.style.display = 'none';
		l_so = null;
		break;
	}	
        gridST_InformConnector(l_movieInstanceId, 'stop');
}



// user_testfullscreen() and user_gofullscreen() are only needed if you are 
// using the Grid embedded Windows Media Player and want to
// script (where applicable) or display a notice for fullscreen mode
function user_testFullscreen()
{
	var id = document.getElementById("fullScreen");
	var det = l_wmo.detectWmp();
	var isScriptable = det.scriptable;

	if(id)
	{
		if(isScriptable){
			if (!l_ismac)
				{ id.innerHTML = "<i>Click here to enjoy our full screen experience</i><br/><br/>"; }
			else
				{ id.innerHTML = "<br><i>Click View in the Quicktime Menubar to enjoy the full screen experience</i><br/><br/>"; }
		}
		else{
			if(l_ismac)
				{id.innerHTML = "<br><i>Click View in the Quicktime Menubar to enjoy the full screen experience</i><br/><br/>"; }
			else
			{ id.innerHTML = "<i>Right click player and select Zoom to enjoy our full screen experience</i><br/><br/>" };
		}
	}
}

function user_goFullscreen()
	{ l_wmo.setFullScreen(true); }


// This function will display an installNotice
// (if exists and Connector not installed) or player
// (if Connector installed) at page load
function user_DisplayInstallNotice (player_tag, notice_tag, count) {
	var noticeid = document.getElementById(notice_tag);
	var pid = document.getElementById(player_tag);

	if (noticeid) {
		if (gridST_gcCommObj.IsInstalled()) {
			pid.style.display = '';
			noticeid.style.display = 'none';
		}
		else {
			pid.style.display = 'none';
			noticeid.style.display = '';
		}
	}
	else {
		if (gridST_gcCommObj.IsInstalled()) {
			pid.style.display = '';
		}
		else {
			pid.style.display = 'none';
		}
	}
}


/**************************
* Helper functions
*************************/

//find an elements position
function findPos(obj) 
{
	var curleft = curtop = 0;
	if (obj.offsetParent) 
	{
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) 
		{
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

//helper function get getting query vars
//detects if you are in firefox, which in turn puts a little different instructions on the screen
function detectFireFox() {
	if(navigator.userAgent.indexOf("Firefox")!=-1){
		var versionindex=navigator.userAgent.indexOf("Firefox")+8
		var version = parseInt(navigator.userAgent.charAt(versionindex));

		return version;
	}
}

//chooses whether to display vista instructions of xp instructions
function getOS() {
	var is_vista = navigator.userAgent.match("Windows NT 6.0");
	var is_xp = navigator.userAgent.match("Windows NT 5.1");
	
	if(is_vista != null) {
		document.getElementById('vista').style.display = 'block';
		document.getElementById('xp').style.display = 'none';
	} else {
		document.getElementById('vista').style.display = 'none';
		document.getElementById('xp').style.display = 'block';
	}
}

function getOSType() {
	var is_mac = navigator.userAgent.match("Mac");
	var is_vista = navigator.userAgent.match("Windows NT 6.0");
	var is_xp = navigator.userAgent.match("Windows NT 5.1");
	if(is_mac != null) { return 'Mac OS X'; }
	else if ( is_vista != null ) { return 'Windows Vista'; }
	else if ( is_xp != null ) { return 'Windows XP'; }
	else { return 'Windows XP'; }
}



