/* * 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.7 (11-12-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 embedded movie and audio * Can replace a HTML element with the movie/audio 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, only for movies * for flv use path from flvplayer file * myMovie.addCaption("flv","filename"); //adds caption file for flv player, only for movies * myMovie.addAudio("filename"); //supports mp3, can display single mp3 file without movie, or add mp3 as audio description for flvmovie * myMovie.write("htmlelementid"); // script puts movie html inside html element * * Changes: * (5-11-2007) - added movieObject.addFlashVars("usecaptions","false"); on line 149 * (11-12-2007) - added addAudio function for adding mp3 files * - changed function names to prevent problems when using javascript frameworks like prototype.js * - replaced Flvplayer for Mediaplayer from Jeroen Wijering (can also play single mp3 files) * */ // change these filenames if you want to use different files // leave empty if you don't need asp files // //var contentDispositionFile = "content-disposition.asp"; //var statisticsFile = "statistics/statistics.asp"; var contentDispositionFile = ""; var statisticsFile = ""; var mediaplayerFile = "http://www.ez.nl/flash/mediaplayer.swf"; var debug = false; // var arFileTypes = new Array(); arFileTypes["jwmedia"] = new Array("flv","mp3"); arFileTypes["quicktime"] = new Array("smil","mov","mp3"); arFileTypes["winmedia"] = new Array("asx","wmv","mp3","wma"); //GovVid object GovVid = function(id, width, height) { this.id = id; this.width = width; this.height = height; this.movies = new Object(); this.audioFiles = 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; } //add movie function, adds movie to object, myMovie.addMovie("filename"); GovVid.prototype.addAudio = function(filename) { var temp = filename.split("/"); var thefile = temp[temp.length - 1]; var file = thefile.split("."); var type = file[file.length - 1]; this.audioFiles[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; } GovVid.prototype.inArray = function (needleArray,haystackArray) { var key; var key2; for(key in haystackArray) { for(key2 in needleArray) { //alert(key + " : " + needleArray[key2]); if(key == needleArray[key2]) return key; } } return false; } //writes correct movie to html element GovVid.prototype.write = function(elementid) { //get element with id var element = document.getElementById(elementid); if (element) { //set with to parentnode: TODO: maybe only on li elements //element.parentNode.style.width = parseInt(this.width) + "px"; removed by eden { mg 06 may 2008 for video on homepage functionality GovVid_makeListToggle(elementid); } var display = false; var version = GovVid_getFlashPlayerVersion(); var height; if(version.major > 7) { if(mediaplayerFile == undefined || mediaplayerFile == "") { alert("voor het afspelen met de flash plugin, is de jwmediaplayer vereist.\n vul de variable mediaplayerFile met de juiste waarde."); return false; } height = parseInt(this.height) + 20; if(display = this.inArray(arFileTypes["jwmedia"],this.movies)) { //alert("play movie in jwmediplayer"); var movieObject = new GovVidMovie(mediaplayerFile, this.id, this.width, height); // movieObject.addFlashVars("autostart", "false"); // // 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"]); if (this.audioFiles["mp3"] != undefined) movieObject.addFlashVars("audio", this.audioFiles["mp3"]); movieObject.addFlashVars("usecaptions","false"); movieObject.addFlashVars("overstretch","false"); movieObject.addFlashVars("file", this.movies[display]); //path from flash file location if(statisticsFile != undefined && statisticsFile != "") { movieObject.addFlashVars("callback",statisticsFile); movieObject.addFlashVars("logevents",statisticsFile); } 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.showMovie(elementid,"flash"); //element.innerHTML = movieObject.getFlashHTML(); return true; } else if(display = this.inArray(arFileTypes["jwmedia"],this.audioFiles)) { //alert("play audio in jwmediaplayer"); var audioObject = new GovVidMovie(mediaplayerFile, this.id, this.width, height); audioObject.addFlashVars("file", this.audioFiles[display]); //path from flash file location if(statisticsFile != undefined && statisticsFile != "") { audioObject.addFlashVars("callback",statisticsFile); audioObject.addFlashVars("logevents",statisticsFile); } audioObject.addFlashVars("showdigits","total"); audioObject.addFlashVars("showbuttons","true"); audioObject.addFlashVars("bufferlength","5"); audioObject.addFlashVars("backcolor","0x000000"); audioObject.addFlashVars("frontcolor","0xFFFFFF"); audioObject.addFlashVars("lightcolor","0xFFFFFF"); audioObject.showMovie(elementid,"flash"); //element.innerHTML = audioObject.getFlashHTML(); return true; } } if (GovVid_isQTInstalled() && !display) { // Toon quicktime height = parseInt(this.height) + 16; if(display = this.inArray(arFileTypes["quicktime"],this.movies)) { if(display == "smil") height = parseInt(this.height) + 115; var movieObject = new GovVidMovie(this.movies[display], this.id, this.width, height); } else if(display = this.inArray(arFileTypes["quicktime"],this.audioFiles)) { //alert("play audio in quicktime"); var movieObject = new GovVidMovie(this.audioFiles[display], this.id, this.width, height); } movieObject.addParam("autostart", "false"); // movieObject.addParam("autoplay", "false"); // movieObject.addParam("controller", "true"); movieObject.addParam("target", "myself"); movieObject.showMovie(elementid,"quicktime"); return true } if (!display) { // Toon windows media player height = parseInt(this.height) + 46; if(display = this.inArray(arFileTypes["winmedia"],this.movies)) { //alert("play movie in wimmedia"); var movieObject = new GovVidMovie(this.movies[display], this.id, this.width, height); movieObject.addParam("src", this.movies[display]); } else if(display = this.inArray(arFileTypes["winmedia"],this.audioFiles)) { //alert("play audio in wimmedia"); var movieObject = new GovVidMovie(this.audioFiles[display], this.id, this.width, height); movieObject.addParam("src", this.audioFiles[display]) } movieObject.addParam("Showcontrols", "true"); // movieObject.addParam("autoplay", "false"); // movieObject.showMovie(elementid,"winmedia"); return true; } return false; } // 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+=""; } //window.clipboardData.setData("text",swfHTML); return swfHTML; } // replace element with movie html, the get+movie+HTML functions GovVidMovie.prototype.showMovie = function(elementID, filetype) { var element = document.getElementById(elementID); if(filetype == 'flash') { element.innerHTML = this.getFlashHTML(); } else if (filetype == 'quicktime') { element.innerHTML = this.getQuicktimeHTML(); } else if (filetype == 'winmedia') { element.innerHTML = this.getWinmediaHTML(); } } /* * Detector functions * * */ // Function gets flashplayer version, if flash is not installed it returns major:0 minor:0 revision:0 function GovVid_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 GovVid_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 GovVid_toggle(objid) { var el = document.getElementById(objid); if ( el.className == 'close' ) el.className = 'open'; else el.className = 'close'; } // 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","mp3"); var myAnchors = document.getElementsByTagName('a'); var myAnchorsLength = myAnchors.length; for (i=0; i' + header.innerHTML + ''; } GovVid_toggle(headerID); } if((tagName == "UL" || tagName == "DIV" || tagName == "P") && toggleEl == "") { toggleEl = elements[i].childNodes[j]; toggleEl.id = ulID; GovVid_toggle(ulID); } } } } else alert("id '" + liID + "'not found!"); } // funtion to check if a value is in a array, returns true or false function GovVid_in_array(myArray, value) { var myArrayLength = myArray.length; for(var i=0; i < myArrayLength; i++) { if(myArray[i] == value) return true; } return false; } function GovVid_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