/*
 * 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 = "content-disposition.asp";
var statisticsFile = "statistics/statistics.asp";

var flvplayerFile = "flash/flvplayer.swf";
var fullscreenFile = "flash/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);
		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("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("strong")[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);
	}
}



function old_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; }
	};
