/*
 * 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.5 (26-03-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
 *
 *
 */
// change these filenames if you want to use different files
// leave empty if you don't need asp files
var contentDispositionFile = "";
var statisticsFile = "";
var flvplayerFile = "http://agentschap.szw.nl/video/flvplayer.swf";
var fullscreenFile = "http://agentschap.szw.nl/video/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 parent div for the elementid
	var element = document.getElementById(elementid);
	/* SGMC Naafs - van Dijk ==> Dit creert invalide HTML en CSS...
	if (element) {
	        element.parentNode.style.width = parseInt(this.width) + "px";
	}*/
	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["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) + 70;
			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");
			movieObject.addFlashVars("overstretch", "false"); // TODO: test
		}
		else {
			movieObject.addFlashVars("autostart", "false");
			movieObject.addFlashVars("fsreturnpage", document.location.href); //TODO: test
		}
		// 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("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 += '<param name="' + param + '" value="' + this.params[param] + '" />';
	}
	if (paramTags == "") {
		paramTags = null;
	}
	return paramTags;
}
/* HTML generator functions */
// function that generates quicktime html, different for ie or navigator browsers
GovVidMovie.prototype.getQuicktimeHTML = function() {
	var qtHTML = "";
	qtHTML += '<embed pluginpage="http://www.apple.com/quicktime/download/" src="' + this.filename + '" width="' + this.width + '" height="' + this.height + '" id="' + this.id + '" name="' + this.id + '"';
	for (var param in this.getParams()) {
		qtHTML += ' ' + param + '="' + this.params[param] + '"';
	}
	qtHTML += '></embed>';
	return qtHTML;
}
// function that generates windows media player html
GovVidMovie.prototype.getWinmediaHTML = function() {
	var wHTML = "";
	wHTML = '<object id="' + this.id + '" width=' + this.width + ' height=' + this.height + ' classid="CLSID:22D6f312-B0F6-11D0-94AB-0080C74C7E95" standby="Loading Windows Media Player components..." type="application/x-oleobject" codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,7,1112">';
	wHTML += '<param name="filename" value="' + this.filename + '">';
	if (this.getParamTags() != null) {
		wHTML += this.getParamTags();
	}
	wHTML += '<embed type="application/x-mplayer2" pluginspage="http://microsoft.com/windows/mediaplayer/ en/download/" src="' + this.filename + '" id="' + this.id + '" name="' + this.id + '" width="' + this.width + '" height="' + this.height + '"';
	for (var param in this.getParams()) {
		wHTML += ' ' + param + '="' + this.params[param] + '"';
	}
	wHTML += '></embed></object>';
	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 = '<embed type="application/x-shockwave-flash" src="'+ this.filename + '" width="' + this.width + '" height="' + this.height + '"';
		swfHTML += ' id="' + this.id + '" name="' + this.id + '" allowfullscreen=true';
		for (var param in this.getParams()) {
			wHTML += ' ' + param + '="' + this.params[param] + '"';
		}
		if(flashVars != '') { swfHTML += ' flashvars="' + flashVars + '"'; }
		swfHTML += "/>";
	}
	else {
		swfHTML = "<object id=\"" + this.id + "\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"" + this.width + "\" height=\"" + this.height + "\">";
		swfHTML += "<param name=\"movie\" value=\"" + this.filename + "\" />";
		swfHTML += "<param name=\"allowfullscreen\" value=\"true\" />";
		if (this.getParamTags() != null) {
			swfHTML += this.getParamTags();
		}
		if(flashVars != '') { swfHTML += "<param name=\"flashvars\" value=\""+ flashVars +"\" />"; }
		swfHTML+="</object>";
	}
	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 == "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;
	qtObj = false;
	if (navigator.plugins && navigator.plugins.length) {
		for (var i=0; i < navigator.plugins.length; 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 toggle(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
function openBinary() {
	if(contentDispositionFile != undefined && contentDispositionFile != "") {
		var filetypes = new Array("pdf","wmv","mov","mp4","flv","3gp");
		myAnchors = document.getElementsByTagName('a');
		for (i=0; i<myAnchors.length ;i++)  {
			var anchor = myAnchors[i];
			var url = String(anchor.getAttribute("href"));
			var arUrl = url.split(".");
			var filetype = arUrl[arUrl.length-1];
			if(in_array(filetypes, filetype.toLowerCase())) {
				var myfile = anchor.href.replace(document.location.href.substring(0,document.location.href.lastIndexOf("/")+1),"");
				//myfile = myfile.replace("http://www.minvws.nl/video",""); //TODO: no urls
				anchor.href = contentDispositionFile + "?file=" + myfile; 
					anchor.onclick = function () {
					this.href = this.href;
				}
			}
			else if (anchor.className == "transcription") {
				anchor.onclick = function () {
					return newWin(this.href,"500","500");
				}
			}
		}
	}
}
// function to open new window
function newWin(href,width,height) {
	newwindow = window.open(href,"transcriptie","toolbar=0,location=0,directories=0,status=,menubar=0,scrollbars=1,resizable=1,height=" + height + ",width=" + width);
	if (window.focus) { newwindow.focus() }
	return false;
}
// make a ul inside a list toggle, to toggle this ul the li item needs a h3 header, this h3 will be made a link 
function makeListToggle(liID,newName) {
	var element = document.getElementById(liID);
	if(element) {
		var header = element.getElementsByTagName("h3")[0];
		var headerText = header.innerHTML;
		if(newName == undefined) { newName = headerText; }
		var ulID = "movieToggleMenu_" + liID;
		element.getElementsByTagName("ul")[0].id = ulID;
		// add link to download video header, h3 
		header.innerHTML = '<a href="#" id="movieToggleLink_' + liID + '" onclick="toggle(\'' + ulID  + '\'); toggle(this.id); return false;">' + newName + '</a>';
		// close the download video list
		toggle(ulID);
		toggle("movieToggleLink_" + liID);
	}
}
// funtion to check if a value is in a array, returns true or false
function in_array(myArray, value) {
	for(var i=0; i < myArray.length; i++) {
		if(myArray[i] == value) { return true; }
	}
	return false;
}
// hide element with given id
function hideElement(ids) {
	var arElements = ids.split(",");
	for(var i=0; i< arElements.length; 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; }
};