/*
* 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";
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 += '';
return wHTML;
}
// function that generates flash html, different for ie or navigator browsers
GovVidMovie.prototype.getFlashHTML = function() {
var swfHTML = "";
var flashVars = "";
// do flashvars
if(this.flashvars) {
for (var param in this.getFlashVars()) {
flashVars += param + '=' + this.flashvars[param] + '&';
}
}
if(navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length){
swfHTML = '";
}
else{
swfHTML = "";
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