/* media media is a wrapper around the swfobject script It includes our default colors, and logic to embed the correct skin file, use the correct streaming server, and other vars. It should simplify embedding videos on other pages. */ function media(conf) { var w=400; var h=300; if ( conf.width != undefined ) w = conf.width; if ( conf.height != undefined ) h = conf.height; // colors var backcolor = '003366'; var frontcolor = 'AABBCC'; var lightcolor = 'FECC66'; var screencolor = '333333'; var autostart = '&autostart=false'; var controlbar = 'over'; var track = selectTrack(); var usefullscreen = true; var posterframe = ''; var skin = '/js/jwplayer/snel-small.swf'; var streamingServer = 'rtmpe://seed.law.upenn.edu/securestd/_definst_'; var type = '&provider=rtmp'; // All file types are now streamed // By default, stream media, but allow for HTTP connections (streaming=false) if ( conf.streaming != undefined ) { if ( !conf.streaming ) { streamingServer = ''; } else { streamingServer = conf.streaming; } } if (conf.type == "audio") { h=23; controlbar = 'bottom'; skin = '/js/jwplayer/snel-small-no-fullscreen.swf'; usefullscreen = false; } if (!( track === '' )) { track = '&item=' + track; autostart = '&autostart=true'; } if (conf.type == "filmstrip") { //streamingServer=''; } if ( conf.type == "rtmp" || conf.type == "live" ) { streamingServer = 'rtmp://seed1.law.upenn.edu/live/_definst_'; } if ( conf.autostart != undefined ) autostart = '&autostart=true'; if ( conf.image != undefined ) posterframe = conf.image; // JW Player determines the media type for tracks in playlists of any sort if ( conf.playlist.match(/.xml/) ) type = ''; var so = new SWFObject('/js/jwplayer/player.swf',conf.ID,w,h,'9'); so.addParam('allowscriptaccess','always'); so.addParam('allowfullscreen','true'); so.addVariable('usefullscreen',usefullscreen); so.addVariable('repeat','list'); so.addVariable('file',conf.playlist); so.addVariable('skin',skin); so.addVariable('backcolor','003366'); so.addVariable('frontcolor','AABBCC'); so.addVariable('lightcolor','FECC66'); so.addVariable('screencolor','333333'); so.addVariable('controlbar',controlbar); so.addVariable('image',posterframe); so.addVariable('streamer',streamingServer); so.addVariable('provider','rtmp'); so.addParam('flashvars','&file='+conf.playlist+track+autostart+'&image='+posterframe+'&controlbar='+controlbar+'&displaytitle=true&playlist=none&skin=' + skin + type + '&repeat=list&stretching=uniform&backcolor=' + backcolor + '&frontcolor=' + frontcolor + '&lightcolor=' + lightcolor + '&screencolor=' + screencolor + '&streamer='+streamingServer); return so; } /* parseQS This is a generic function to help parse URL querystrings */ function parseQS(qs) { var qsArray = qs.slice(1).split("&"); var json = {}; for ( var i = 0; i < qsArray.length; i++ ) { var kv = qsArray[i].split("="); var key = kv[0]; var val; if ( kv.length == 1 ) val = key; else val = kv[1]; json[key] = val; } return json; } /* selectTrack This function checks the querystring to see if we should play a specific playlist track The querystring parameter we're looking for is 'track' -- all others are ignored */ function selectTrack() { var selectedTrack = ''; // default var qs = parseQS(location.search); if ( qs.track && !isNaN(qs.track) ) selectedTrack = Math.floor(qs.track); return selectedTrack; } /* play play provides access to the JW Player's play function. Specify the player ID to play from the first clip, or specify the player ID and a clip number to play a specific clip. */ function play(mp,clip) { if ( clip == undefined ) clip = 0; if ( document.getElementById(mp) ) { var player = document.getElementById(mp); player.sendEvent('ITEM',clip); } else { alert("The media player, [" + mp + "], has not yet loaded."); } } /* playerReady playerReady is called by JW Player when the player has fully loaded. We add a listener to the player to call nowPlaying when a new playing item is selected. */ function playerReady(obj) { document.getElementById(obj.id).addModelListener("STATE", "nowPlaying"); } /* nowPlaying nowPlaying is called when a new item is played in JW Player. If the playlist contains multiple items: - Create a caption item, if none exists - Insert current clip title into the caption */ function nowPlaying(obj) { // Update caption element if the playlist contains more than 1 item if ( ( obj.newstate == "BUFFERING" || obj.newstate == "PLAYING" ) && document.getElementById(obj.id).getPlaylist().length > 1 ) { // If there is no existing caption element for this player, create a caption element if ( !document.getElementById(obj.id+'_caption') ) { var newNode = document.createElement("div"); newNode.id = obj.id + "_caption"; newNode.className = "avcaption"; document.getElementById(obj.id).parentNode.parentNode.insertBefore(newNode, document.getElementById(obj.id).parentNode.nextSibling); } var caption = document.getElementById(obj.id+'_caption'); // Calculate caption width (padding set in stylesheet; left padding + right padding = 20) caption.style.width = document.getElementById(obj.id).width-20+'px'; caption.innerHTML = 'Now Playing: ' + document.getElementById(obj.id).getPlaylist()[document.getElementById(obj.id).getConfig().item].title; } }