/*
 * 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 + '\n';
        }

        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 Array();
        gTagAttrs["src"] = args[0];
        gTagAttrs["width"] = args[1];
        gTagAttrs["height"] = args[2];
        gTagAttrs["classid"] = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";
        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")
                                        + '>\n'
                                        + _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>\n</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));
}





