/*
 * AC_QuickTime.js
 * Abstract: This file contains functions to generate OBJECT and EMBED tags for QuickTime content.
 * Version: <1.1>
 * Copyright (C) 2006 Apple Computer, Inc., All Rights Reserved
 * 
 * This file contains functions to generate OBJECT and EMBED tags for QuickTime content. 
 */


/************** LOCALIZABLE GLOBAL VARIABLES ****************/
var gArgCountErr = 'The "%%" function requires an even number of arguments.'
  + '\nArguments should be in the form "atttributeName", "attributeValue", ...';
/******************** END LOCALIZABLE **********************/

var gTagAttrs  = null;
var gQTGeneratorVersion = 1.0;


function AC_QuickTimeVersion()	{ return gQTGeneratorVersion; }


function _QTComplain(callingFcnName, errMsg){
  errMsg = errMsg.replace("%%", callingFcnName);
  alert(errMsg);
}


function _QTAddAttribute(prefix, slotName, tagName){
  var value;
  value = gTagAttrs[prefix + slotName];
  if ( null == value )
    value = gTagAttrs[slotName];
  if ( null != value ){

		if ( 0 == slotName.indexOf(prefix) && (null == tagName) )

			tagName = slotName.substring(prefix.length); 

		if ( null == tagName ) 

			tagName = slotName;

		return '' + tagName + '="' + value + '"';

  } else return "";
}


function _QTAddObjectAttr(slotName, tagName){
  // don't bother if it is only for the embed tag
  if ( 0 == slotName.indexOf("emb#") )
    return "";
  if ( 0 == slotName.indexOf("obj#") && (null == tagName) )
    tagName = slotName.substring(4); 
  return _QTAddAttribute("obj#", slotName, tagName);
}


function _QTAddEmbedAttr(slotName, tagName){
  // don't bother if it is only for the object tag
  if ( 0 == slotName.indexOf("obj#") )
    return "";
  if ( 0 == slotName.indexOf("emb#") && (null == tagName) )
    tagName = slotName.substring(4); 
  return _QTAddAttribute("emb#", slotName, tagName);
}


function _QTAddObjectParam(slotName, generateXHTML){
  var paramValue;
  var paramStr = "";
  var endTagChar = (generateXHTML) ? ' />' : '>';
  if ( -1 == slotName.indexOf("emb#") ){
    // look for the OBJECT-only param first. if there is none, look for a generic one
    paramValue = gTagAttrs["obj#" + slotName];
    if ( null == paramValue )
      paramValue = gTagAttrs[slotName];
    if ( 0 == slotName.indexOf("obj#") )
      slotName = slotName.substring(4); 
    if ( null != paramValue )
      paramStr = '<param name="' + slotName + '" value="' + paramValue + '"' + endTagChar;
  }
  return paramStr;
}


function _QTDeleteTagAttrs(){
  for ( var ndx = 0; ndx < arguments.length; ndx++ ){
    var attrName = arguments[ndx];
    delete gTagAttrs[attrName];
    delete gTagAttrs["emb#" + attrName];
    delete gTagAttrs["obj#" + attrName];
  }
}


// generate an embed and object tag, return as a string
function _QTGenerate(callingFcnName, generateXHTML, args){
  // is the number of optional arguments even?
  if ( args.length < 4 || (0 != (args.length % 2)) ){
    _QTComplain(callingFcnName, gArgCountErr);
    return "";
  }
  // allocate an array, fill in the required attributes with fixed place params and defaults
  gTagAttrs = new Object();
  gTagAttrs["src"] = args[0];
  gTagAttrs["width"] = args[1];
  gTagAttrs["height"] = args[2];
  gTagAttrs["classid"] = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";
  //Impportant note: It is recommended that you use this exact classid in order to ensure a seamless experience for all viewers
  gTagAttrs["pluginspage"] = "http://www.apple.com/quicktime/download/";
  // set up codebase attribute with specified or default version before parsing args so
  //  anything passed in will override
  var activexVers = args[3]
  if ( (null == activexVers) || ("" == activexVers) )
    activexVers = "6,0,2,0";
  gTagAttrs["codebase"] = "http://www.apple.com/qtactivex/qtplugin.cab#version=" + activexVers;
  var attrName, attrValue;
  // add all of the optional attributes to the array
  for ( var ndx = 4; ndx < args.length; ndx += 2){
    attrName = args[ndx].toLowerCase();
    attrValue = args[ndx + 1];
    // "name" and "id" should have the same value, the former goes in the embed and the later goes in
    //  the object. use one array slot 
    if ( "name" == attrName || "id" == attrName )
      gTagAttrs["name"] = attrValue;
    else 
      gTagAttrs[attrName] = attrValue;
  }
  // init both tags with the required and "special" attributes
  var objTag =  '<object '
	+ _QTAddObjectAttr("classid")
	+ _QTAddObjectAttr("width")
	+ _QTAddObjectAttr("height")
	+ _QTAddObjectAttr("codebase")
	+ _QTAddObjectAttr("name", "id")
	+ _QTAddObjectAttr("tabindex")
	+ _QTAddObjectAttr("hspace")
	+ _QTAddObjectAttr("vspace")
	+ _QTAddObjectAttr("border")
	+ _QTAddObjectAttr("align")
	+ _QTAddObjectAttr("class")
	+ _QTAddObjectAttr("title")
	+ _QTAddObjectAttr("accesskey")
	+ _QTAddObjectAttr("noexternaldata")
	+ '>'
	+ _QTAddObjectParam("src", generateXHTML);
  var embedTag = '<embed '
	+ _QTAddEmbedAttr("src")
	+ _QTAddEmbedAttr("width")
	+ _QTAddEmbedAttr("height")
	+ _QTAddEmbedAttr("pluginspage")
	+ _QTAddEmbedAttr("name")
	+ _QTAddEmbedAttr("align")
	+ _QTAddEmbedAttr("tabindex");
  // delete the attributes/params we have already added
  _QTDeleteTagAttrs("src","width","height","pluginspage","classid","codebase","name","tabindex",
	"hspace","vspace","border","align","noexternaldata","class","title","accesskey");
  // and finally, add all of the remaining attributes to the embed and object
  for ( var attrName in gTagAttrs ){
    attrValue = gTagAttrs[attrName];
    if ( null != attrValue ){
      embedTag += _QTAddEmbedAttr(attrName);
      objTag += _QTAddObjectParam(attrName, generateXHTML);
    }
  }
  // end both tags, we're done
  return objTag + embedTag + '></em' + 'bed></ob' + 'ject' + '>';
}


// return the object/embed as a string
function QT_GenerateOBJECTText(){
  return _QTGenerate("QT_GenerateOBJECTText", false, arguments);
}


function QT_GenerateOBJECTText_XHTML(){
  return _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments);
}


function QT_WriteOBJECT(){
  document.writeln(_QTGenerate("QT_WriteOBJECT", false, arguments));
}


function QT_WriteOBJECT_XHTML(){
  document.writeln(_QTGenerate("QT_WriteOBJECT_XHTML", true, arguments));
}



/*
 * WGBH Quicktime functions for Greater Boston video
 * added 2007-09-01 pbull, modified 2008-12-16 pbull
 */

// check for QT
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;
}
var QT = isQTInstalled();

// rewrite QT container with new URL to media file
function swapVideo(url, id) {
  if(url){
    if (!id) id = '';
    if (QT && document.getElementById('wgbhQT' + id)) { eval('document.wgbhQT' + id + '.Stop();'); }
    document.getElementById('wgbhQtContainer' + id).innerHTML = QT_GenerateOBJECTText_XHTML(
      url, '320', '256', '',
      'autoplay', 'true',
      'controller', 'true',
      'emb#bgcolor', 'black',
      'align', 'middle',
      'id', 'wgbhQT' + id,
      'kioskmode','true',
      'scale', 'aspect'
    );
  }
  return false;
}

