/*



File: AC_QuickTime.js



Abstract: This file contains functions to generate OBJECT and EMBED tags for QuickTime content.



Version: <1.1>



Disclaimer: IMPORTANT:  This Apple software is supplied to you by Apple

Computer, Inc. ("Apple") in consideration of your agreement to the

following terms, and your use, installation, modification or

redistribution of this Apple software constitutes acceptance of these

terms.  If you do not agree with these terms, please do not use,

install, modify or redistribute this Apple software.



In consideration of your agreement to abide by the following terms, and

subject to these terms, Apple grants you a personal, non-exclusive

license, under Apple's copyrights in this original Apple software (the

"Apple Software"), to use, reproduce, modify and redistribute the Apple

Software, with or without modifications, in source and/or binary forms;

provided that if you redistribute the Apple Software in its entirety and

without modifications, you must retain this notice and the following

text and disclaimers in all such redistributions of the Apple Software. 

Neither the name, trademarks, service marks or logos of Apple Computer,

Inc. may be used to endorse or promote products derived from the Apple

Software without specific prior written permission from Apple.  Except

as expressly stated in this notice, no other rights or licenses, express

or implied, are granted by Apple herein, including but not limited to

any patent rights that may be infringed by your derivative works or by

other works in which the Apple Software may be incorporated.



The Apple Software is provided by Apple on an "AS IS" basis.  APPLE

MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION

THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS

FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND

OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.



IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL

OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF

SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS

INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,

MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED

AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),

STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE

POSSIBILITY OF SUCH DAMAGE.



Copyright © 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 gWMGeneratorVersion		= 1.0;



function AC_QuickTimeVersion()	{ return gWMGeneratorVersion; }



function _WMComplain(callingFcnName, errMsg)

{

    errMsg = errMsg.replace("%%", callingFcnName);

	alert(errMsg);

}



function _WMAddAttribute(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 _WMAddObjectAttr(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 _WMAddAttribute("obj#", slotName, tagName);

}



function _WMAddEmbedAttr(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 _WMAddAttribute("emb#", slotName, tagName);

}





function _WMAddObjectParam(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 _WMDeleteTagAttrs()

{

	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 _WMGenerate(callingFcnName, generateXHTML, args)

{

	// is the number of optional arguments even?

	if ( args.length < 4 || (0 != (args.length % 2)) )

	{

		_WMComplain(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:22d6f312-b0f6-11d0-94ab-0080c74c7e95";

		//Impportant note: It is recommended that you use this exact classid in order to ensure a seamless experience for all viewers

	gTagAttrs["pluginspage"] = "http://activex.microsoft.com/activex/controls/ mplayer/en/nsmp2inf.cab#Version=5,1,52,701";



	// 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://activex.microsoft.com/activex/controls/ mplayer/en/nsmp2inf.cab#Version=5,1,52,701" + 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 '

					+ _WMAddObjectAttr("classid")

					+ _WMAddObjectAttr("width")

					+ _WMAddObjectAttr("height")

					+ _WMAddObjectAttr("codebase")

					+ _WMAddObjectAttr("name", "id")

					+ _WMAddObjectAttr("tabindex")

					+ _WMAddObjectAttr("hspace")

					+ _WMAddObjectAttr("vspace")

					+ _WMAddObjectAttr("border")

					+ _WMAddObjectAttr("align")

					+ _WMAddObjectAttr("class")

					+ _WMAddObjectAttr("title")

					+ _WMAddObjectAttr("accesskey")

					+ _WMAddObjectAttr("noexternaldata")

					+ '>'

					+ _WMAddObjectParam("src", generateXHTML);

	var embedTag = '<embed '

					+ _WMAddEmbedAttr("src")

					+ _WMAddEmbedAttr("width")

					+ _WMAddEmbedAttr("height")

					+ _WMAddEmbedAttr("pluginspage")

					+ _WMAddEmbedAttr("name")

					+ _WMAddEmbedAttr("align")

					+ _WMAddEmbedAttr("tabindex");



	// delete the attributes/params we have already added

	_WMDeleteTagAttrs("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 += _WMAddEmbedAttr(attrName);

			objTag += _WMAddObjectParam(attrName, generateXHTML);

		}

	} 



	// end both tags, we're done

	return objTag + embedTag + '></em' + 'bed></ob' + 'ject' + '>';

}



// return the object/embed as a string

function WM_GenerateOBJECTText()

{

	return _WMGenerate("WM_GenerateOBJECTText", false, arguments);

}



function WM_GenerateOBJECTText_XHTML()

{

	return _WMGenerate("WM_GenerateOBJECTText_XHTML", true, arguments);

}



function WM_WriteOBJECT()

{

	document.writeln(_WMGenerate("WM_WriteOBJECT", false, arguments));

}



function WM_WriteOBJECT_XHTML()

{

	document.writeln(_WMGenerate("WM_WriteOBJECT_XHTML", true, arguments));

}






