﻿/*File: AC_QuickTime.jsAbstract: This file contains functions to generate OBJECT and EMBED tags for QuickTime content.Version: <1.2>Copyright Â© 2006-2007 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.2;var gQTBehaviorID			= "qt_event_source";var gQTEventsEnabled		= false;function AC_QuickTimeVersion()	{ return gQTGeneratorVersion; }function _QTComplain(callingFcnName, errMsg){    errMsg = errMsg.replace("%%", callingFcnName);	alert(errMsg);}function _QTIsMSIE(){    var ua = navigator.userAgent.toLowerCase();	var msie = /msie/.test(ua) && !/opera/.test(ua);	return msie;}function _QTGenerateBehavior(){	return objTag = '<!--[if IE]>'				 + '<object id="' + gQTBehaviorID + '" classid="clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598"></object>'				 + '<![endif]-->';}function _QTPageHasBehaviorObject(callingFcnName, args){	var haveBehavior = false;	var objects = document.getElementsByTagName('object');		for ( var ndx = 0, obj; obj = objects[ndx]; ndx++ )	{		if ( obj.getAttribute('classid') == "clsid:CB927D12-4FF7-4a9e-A169-56E4B8A75598" )		{			if ( obj.getAttribute('id') == gQTBehaviorID )				haveBehavior = false;			break;		}	}	return haveBehavior;}function _QTShouldInsertBehavior(){	var		shouldDo = false;	if ( gQTEventsEnabled && _QTIsMSIE() && !_QTPageHasBehaviorObject() )		shouldDo = true;		return shouldDo;}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 = "7,3,0,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];		gTagAttrs[attrName] = attrValue;		if ( ("postdomevents" == attrName) && (attrValue.toLowerCase() != "false") )		{			gQTEventsEnabled = true;			if ( _QTIsMSIE() )				gTagAttrs["obj#style"] = "behavior:url(#" + gQTBehaviorID + ")";		}	}	// init both tags with the required and "special" attributes	var objTag =  '<object '					+ _QTAddObjectAttr("classid")					+ _QTAddObjectAttr("width")					+ _QTAddObjectAttr("height")					+ _QTAddObjectAttr("codebase")					+ _QTAddObjectAttr("name")					+ _QTAddObjectAttr("id")					+ _QTAddObjectAttr("tabindex")					+ _QTAddObjectAttr("hspace")					+ _QTAddObjectAttr("vspace")					+ _QTAddObjectAttr("border")					+ _QTAddObjectAttr("align")					+ _QTAddObjectAttr("class")					+ _QTAddObjectAttr("title")					+ _QTAddObjectAttr("accesskey")					+ _QTAddObjectAttr("noexternaldata")					+ _QTAddObjectAttr("obj#style")					+ '>'					+ _QTAddObjectParam("src", generateXHTML);	var embedTag = '<embed '					+ _QTAddEmbedAttr("src")					+ _QTAddEmbedAttr("width")					+ _QTAddEmbedAttr("height")					+ _QTAddEmbedAttr("pluginspage")					+ _QTAddEmbedAttr("name")					+ _QTAddEmbedAttr("id")					+ _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","id","style");	// 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(){	var	txt = _QTGenerate("QT_GenerateOBJECTText", false, arguments);	if ( _QTShouldInsertBehavior() )		txt = _QTGenerateBehavior() + txt;	return txt;}function QT_GenerateOBJECTText_XHTML(){	var	txt = _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments);	if ( _QTShouldInsertBehavior() )		txt = _QTGenerateBehavior() + txt;	return txt;}function QT_WriteOBJECT(){	var	txt = _QTGenerate("QT_WriteOBJECT", false, arguments);	if ( _QTShouldInsertBehavior() )		document.writeln(_QTGenerateBehavior());	document.writeln(txt);}function QT_WriteOBJECT_XHTML(){	var	txt = _QTGenerate("QT_WriteOBJECT_XHTML", true, arguments);	if ( _QTShouldInsertBehavior() )		document.writeln(_QTGenerateBehavior());	document.writeln(txt);}function QT_GenerateBehaviorOBJECT(){	return _QTGenerateBehavior();}function QT_ReplaceElementContents(){	var element = arguments[0];	var args = [];	// copy all other arguments we want to pass through to the fcn	for ( var ndx = 1; ndx < arguments.length; ndx++ )		args.push(arguments[ndx]);	var	txt = _QTGenerate("QT_ReplaceElementContents", false, args);	if ( txt.length > 0 )		element.innerHTML = txt;}function QT_ReplaceElementContents_XHTML(){	var element = arguments[0];	var args = [];	// copy all other arguments we want to pass through to the fcn	for ( var ndx = 1; ndx < arguments.length; ndx++ )		args.push(arguments[ndx]);	var	txt = _QTGenerate("QT_ReplaceElementContents_XHTML", true, args);	if ( txt.length > 0 )		element.innerHTML = txt;}