/* * GovVid object, developed by the Dutch Ministry of Health, Welfare and Sport and 'Werkgroep Stijlgids' of the New Media Commission (CNM) * inspired on: * - swfobject (http://blog.deconcept.com/swfobject/) * - GTObject (http://blog.deconcept.com/2005/01/26/web-standards-compliant-javascript-quicktime-detect-and-embed/) * * Author: Marc Gerritsen (m.gerritsen@minvws.nl) * Version: 0.6 (13-06-2007) * Works on: Internet Explorer 6/7, Firefox 1.5/2, Safari 2, Opera 9 * Description: Can detect flash version and sees if Quicktime is installed * Generates correct HTML for movie display * Can replace a HTML element with the movie html * * * Usage: * myMovie = new GovVid("id", width, height); * myMovie.addMovie("filename"); // supports mov, mp4, wmv, flv * mymovie.addImage("filename"); // adds start image for flv player * for flv use path from flvplayer file * myMovie.addCaption("flv","filename"); //adds caption file for flv player * myMovie.write("htmlelementid"); // script puts movie html inside html element * * Changes: * (5-11-2007) - added movieObject.addFlashVars("usecaptions","false"); on line 149 * (16-11-2007) - renamed function toggle to function govVidToggle */ // change these filenames if you want to use different files // leave empty if you don't need asp files var contentDispositionFile = "/download"; var statisticsFile = ""; var flvplayerFile = "/flash/flvplayer.swf"; var fullscreenFile = "fullscreen.html"; //GovVid object GovVid = function(id, width, height) { this.id = id; this.width = width; this.height = height; this.movies = new Object(); this.captions = new Object(); this.image = ""; } //add movie function, adds movie to object, myMovie.addMovie("filename"); GovVid.prototype.addMovie = function(filename) { var temp = filename.split("/"); var thefile = temp[temp.length - 1]; var file = thefile.split("."); var type = file[file.length - 1]; if(type == "mp4") type = "mov"; this.movies[type] = filename; } //adds image to object, myMovie.addImage("filename"); GovVid.prototype.addImage = function(filename) { this.image = filename; } //adds caption to object, myMovie.addCaption("flv","filename"); GovVid.prototype.addCaption = function(type, filename) { this.captions[type] = filename; } //writes correct movie to html element GovVid.prototype.write = function(elementid) { //get elemnt with id var element = document.getElementById(elementid); if (element) { //set with to parentnode: TODO: maybe only on togglelist element.parentNode.style.width = parseInt(this.width) + "px"; makeListToggle(elementid); } var version = getFlashPlayerVersion(); // place flashplayer if user has flashplayer 8 or higher installed if(version.major < 8 || this.movies["flv"] == undefined) { // no correct flash player found so check if quicktime is installed if (isQTInstalled() && this.movies["smil"] != undefined) { height = parseInt(this.height) + 115; //TODO: calculate transcription height var movieObject = new GovVidMovie(this.movies["smil"], this.id, this.width, height); movieObject.addParam("autostart", "false"); movieObject.addParam("autoplay", "false"); movieObject.addParam("controller", "true"); movieObject.addParam("target", "myself"); movieObject.showMovie(elementid); } else if(isQTInstalled() && this.movies["mov"] != undefined) { // Quicktime plugin is detected // add 16px to the height to allow for the controls height = parseInt(this.height) + 16; var movieObject = new GovVidMovie(this.movies["mov"], this.id, this.width, height); movieObject.addParam("autostart", "false"); movieObject.addParam("autoplay", "false"); movieObject.showMovie(elementid); } else if (this.movies["wmv"] != undefined) { // if nothing else works show windows media player // add 70px to the height to allow for the controls height = parseInt(this.height) + 46; var movieObject = new GovVidMovie(this.movies["wmv"], this.id, this.width, height); movieObject.addParam("Showcontrols", "true"); movieObject.addParam("autoStart", "false"); //movieObject.addParam("showStatusbar", "true"); movieObject.addParam("src", this.movies["wmv"]) movieObject.showMovie(elementid); } else { // in this else we can do something if no movie can be placed // alert("nothing to place"); } } else { if(flvplayerFile == undefined || flvplayerFile == "") { alert("The flvplayer file is needed for displaying flv files"); return false; } // correct flash version, show flashplayer with flashvideo // add 20px to the height for the controls height = parseInt(this.height) + 20; var movieObject = new GovVidMovie(flvplayerFile, this.id, this.width, height); // if id= fullscreen then it's fullscreen if(this.id == "fullscreen") { movieObject.addFlashVars("fullscreenmode", "true"); movieObject.addFlashVars("autostart", "true"); } else { movieObject.addFlashVars("autostart", "false"); //movieObject.addFlashVars("fsreturnpage", document.location.href); //TODO: test //movieObject.addFlashVars("fsbuttonlink", "fullscreen.html?"); } // set image if there is a image defined if(this.image != "") movieObject.addFlashVars("image", this.image); // set caption if there is caption if (this.captions["flv"] != undefined) { movieObject.addFlashVars("captions", this.captions["flv"]); } // add default values for flvplayer if(fullscreenFile != undefined && fullscreenFile != "") { movieObject.addFlashVars("fullscreenpage", fullscreenFile); } if(statisticsFile != undefined && statisticsFile != "") { movieObject.addFlashVars("callback",statisticsFile); movieObject.addFlashVars("logevents",statisticsFile); } movieObject.addFlashVars("usecaptions","false"); movieObject.addFlashVars("overstretch","false"); movieObject.addFlashVars("showdigits","total"); movieObject.addFlashVars("showbuttons","true"); movieObject.addFlashVars("bufferlength","5"); movieObject.addFlashVars("backcolor","0x000000"); movieObject.addFlashVars("frontcolor","0xFFFFFF"); movieObject.addFlashVars("lightcolor","0xFFFFFF"); movieObject.addFlashVars("file", this.movies["flv"]); //path from flash file location movieObject.showMovie(elementid); // give fullscreen focus for tabbing if(this.id == "fullscreen") { var el = document.getElementById("fullscreen"); el.focus(); } } } // movie object and functions GovVidMovie = function(filename, id, width, height) { this.filename = filename; this.id = id; this.width = width; this.height = height; this.params = new Object(); this.flashvars = new Object(); }; // function add params to Movie object GovVidMovie.prototype.addParam = function(name, value) { this.params[name] = value; } // function that is used by other Movie functions GovVidMovie.prototype.getParams = function() { return this.params; } // function to add flash variables to object GovVidMovie.prototype.addFlashVars = function(name, value) { this.flashvars[name] = value; } // function that is used by other functions GovVidMovie.prototype.getFlashVars = function() { return this.flashvars; } // function that is used by other functions GovVidMovie.prototype.getParamTags = function() { var paramTags = ""; for (var param in this.getParams()) { paramTags += '\n'; } if (paramTags == "") { paramTags = null; } return paramTags; } /* * HTML generator functions * * */ // function that generates quicktime html GovVidMovie.prototype.getQuicktimeHTML = function() { var qtHTML = ""; qtHTML += "\n"; qtHTML += "\n"; if (this.getParamTags() != null) { qtHTML += this.getParamTags(); } qtHTML += "\n"; qtHTML += "\n"; if (this.getParamTags() != null) { qtHTML += this.getParamTags(); } qtHTML += "\n"; qtHTML += "\n"; qtHTML += "\n"; return qtHTML; } // function that generates windows media player html GovVidMovie.prototype.getWinmediaHTML = function() { var wHTML = ''; wHTML = ''; wHTML += ''; if (this.getParamTags() != null) { wHTML += this.getParamTags(); } wHTML += '"; swfHTML += ""; swfHTML += ""; if (this.getParamTags() != null) { swfHTML += this.getParamTags(); } if(flashVars != '') swfHTML += ""; swfHTML+=""; } return swfHTML; } // replace element with movie html, the get+movie+HTML functions GovVidMovie.prototype.showMovie = function(elementID) { // first check what kind of file it is var temp = this.filename.split("/"); var thefile = temp[temp.length - 1]; var file = thefile.split("."); var filetype = file[file.length - 1]; if(filetype == "mp4") filetype = "mov"; var element = document.getElementById(elementID); if(filetype == 'swf') { element.innerHTML = this.getFlashHTML(); } else if (filetype == 'mov' || filetype == 'mp4') { element.innerHTML = this.getQuicktimeHTML(); } else if (filetype == 'smil') { element.innerHTML = this.getQuicktimeHTML(); } else if (filetype == 'wmv') { element.innerHTML = this.getWinmediaHTML(); } else alert('don\'t know what to do with filetype: ' + filetype); } /* * Detector functions * * */ // Function gets flashplayer version, if flash is not installed it returns major:0 minor:0 revision:0 function getFlashPlayerVersion(){ var version = new FlashPlayerVersion([0,0,0]); if(navigator.plugins && navigator.mimeTypes.length){ var x=navigator.plugins["Shockwave Flash"]; if(x && x.description){ version = new FlashPlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split(".")); } }else{ try{ var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); } catch(e){ try{ var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); version = new FlashPlayerVersion([6,0,21]); axo.AllowScriptAccess="always"; } catch(e){ if(version.major==6){return version;} } try{ axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); } catch(e){} } if(axo!=null){ version=new FlashPlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); } } return version; }; // object used by the getFlashPlayerVersion function FlashPlayerVersion = function(player){ this.major = player[0]!=null?parseInt(player[0]):0; this.minor = player[1]!=null?parseInt(player[1]):0; this.rev = player[2]!=null?parseInt(player[2]):0; }; // function checks if quicktime is installed function isQTInstalled() { var qtInstalled = false; var qtObj = false; if (navigator.plugins && navigator.plugins.length) { var navigatorLength = navigator.plugins.length; for (var i=0; i < navigatorLength; i++ ) { var plugin = navigator.plugins[i]; if (plugin.name.indexOf("QuickTime") > -1) { qtInstalled = true; } } } else { execScript('on error resume next: qtObj = IsObject(CreateObject("QuickTimeCheckObject.QuickTimeCheck.1"))','VBScript'); qtInstalled = qtObj; } return qtInstalled; } /* * General functions / html functions * * */ // function hides or shows an element with stylesheet classes function govVidToggle(objid) { var el = document.getElementById(objid); if ( el.className == 'close' ) el.className = 'open'; else el.className = 'close'; } // function to rename text of link function renameLink(id, text) { linkname = document.getElementById(id); linkname.innerHTML = text; } // do stuff with links to binary files (not needed for pilot video files) function openBinary() { if(contentDispositionFile != undefined && contentDispositionFile != "") { var filetypes = new Array("pdf", "wmv", "mov", "mp4", "flv", "3gp"); var myAnchors = document.getElementsByTagName('a'); var myAnchorsLength = myAnchors.length; for (i=0; i' + header.innerHTML + ''; } govVidToggle(headerID); } if((tagName == "UL" || tagName == "DIV" || tagName == "P") && toggleEl == "") { toggleEl = elements[i].childNodes[j]; toggleEl.id = ulID; govVidToggle(ulID); } } } } else alert("id '" + liID + "'not found!"); } // funtion to check if a value is in a array, returns true or false function in_array(myArray, value) { var myArrayLength = myArray.length; for(var i=0; i < myArrayLength; i++) { if(myArray[i] == value) return true; } return false; } // hide element with given id function hideElement(ids) { var arElements = ids.split(","); var elementsLength = arElements.length; for(var i=0; i < elementsLength; i++) { var id = arElements[i]; var element = document.getElementById(id); if(element) { element.parentNode.removeChild(element); } } } // flvplayer functions var currentPosition; var currentVolume; function loadFile(caps) { thisMovie("mediaplayer").loadFile(fil); }; function thisMovie(movieName) { if(navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } }; function sendEvent(typ,prm) { thisMovie("mediaplayer").sendEvent(typ,prm); }; function getUpdate(typ,pr1,pr2) { if(typ == "time") { currentPosition = pr1; } else if(typ == "volume") { currentVolume = pr1; } }; function getElementsByClassName(className, tag, elm){ var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)"); var tag = tag || "*"; var elm = elm || document; var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag); var returnElements = []; var current; var length = elements.length; for(var i=0; i