
/* 


 * 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; 


} 
// JavaScript Document
