/*
 * This file contains functions to generate OBJECT and EMBED tags for FLASH content. 
 *
 * Modified version of AC_QUICKTIME: <http://developer.apple.com/internet/ieembedprep.html>
 */

/************** 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 gFLASHGeneratorVersion		= 1.0;

function AC_FLASHVersion()	{ return gFLASHGeneratorVersion; }

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

function _FLASHAddAttribute(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 _FLASHAddObjectAttr(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 _FLASHAddAttribute("obj#", slotName, tagName);
}

function _FLASHAddEmbedAttr(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 _FLASHAddAttribute("emb#", slotName, tagName);
}


function _FLASHAddObjectParam(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 + '\n';
		}
	}

	return paramStr;
}

function _FLASHDeleteTagAttrs(){
	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 (2)
function _FLASHGenerate(callingFcnName, generateXHTML, args){
	// is the number of optional arguments even?
	if ( args.length < 4 || (0 != (args.length % 2)) ){
		_FLASHComplain(callingFcnName, gArgCountErr);
		return "";
	}
	
	// allocate an array, fill in the required attributes with fixed place params and defaults
	gTagAttrs = new Array();
	gTagAttrs["src"] = args[0];
	gTagAttrs["obj#movie"] = args[0]; 
	gTagAttrs["width"] = args[1];
	gTagAttrs["height"] = args[2];
	gTagAttrs["classid"] = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000";
	gTagAttrs["codebase"] = "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version="+args[3];
	gTagAttrs["pluginspage"] = "http://www.macromedia.com/go/getflashplayer";
	gTagAttrs["quality"] = "high";
	gTagAttrs["emb#type"] = "application/x-shockwave-flash";

	// 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 '
					+ _FLASHAddObjectAttr("classid")
					+ _FLASHAddObjectAttr("width")
					+ _FLASHAddObjectAttr("height")
					+ _FLASHAddObjectAttr("codebase")
					+ _FLASHAddObjectAttr("name", "id")
					+ _FLASHAddObjectAttr("align")
					+ '>\n'
					+ _FLASHAddObjectParam("movie", generateXHTML);
	var embedTag = '  <embed '
					+ _FLASHAddEmbedAttr("src")
					+ _FLASHAddEmbedAttr("width")
					+ _FLASHAddEmbedAttr("height")
					+ _FLASHAddEmbedAttr("pluginspage")
					+ _FLASHAddEmbedAttr("name")
					+ _FLASHAddEmbedAttr("align")
					+ _FLASHAddEmbedAttr("quality");
					+ _FLASHAddEmbedAttr("allowScriptAccess");
					+ _FLASHAddEmbedAttr("type");
					+ _FLASHAddEmbedAttr("bgcolor");

	// delete the attributes/params we have already added
	_FLASHDeleteTagAttrs("src","width","height","pluginspage","classid","codebase","name",
					"align","allowScriptAccess","quality","bgcolor","type","movie");

	// 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 += _FLASHAddEmbedAttr(attrName);
			objTag += _FLASHAddObjectParam(attrName, generateXHTML);
		}
	} 

	// end both tags, we're done
	return objTag + embedTag + '> </em' + 'bed>\n</ob' + 'ject' + '>';
}

// return the object/embed as a string (1)
function FLASH_GenerateOBJECTText(){
	return _FLASHGenerate("FLASH_GenerateOBJECTText", false, arguments);
}

// (1)
function FLASH_GenerateOBJECTText_XHTML(){
	return _FLASHGenerate("FLASH_GenerateOBJECTText_XHTML", true, arguments);
}

function FLASH_WriteOBJECT(){
	document.writeln(_FLASHGenerate("FLASH_WriteOBJECT", false, arguments));
}

function FLASH_WriteOBJECT_XHTML(){
	document.writeln(_FLASHGenerate("FLASH_WriteOBJECT_XHTML", true, arguments));
}



