// Implements AC_GenerateObj() function. This is a generic function used to generate// object/embed/param tags. It is used by higher level api functions./************** LOCALIZABLE GLOBAL VARIABLES ****************/var MSG_EvenArgs = 'The %s function requires an even number of arguments.'                 + '\nArguments should be in the form "atttributeName","attributeValue",...';var MSG_SrcRequired = "The %s function requires that a movie src be passed in as one of the arguments.";/******************** END LOCALIZABLE **********************/// Finds a parameter with the name paramName, and checks to see if it has the // passed extension. If it doesn't have it, this function adds the extension.function AC_AddExtension(args, paramName, extension){  var currArg, paramVal, queryStr, endStr;  for (var i=0; i < args.length; i=i+2){    currArg = args[i].toLowerCase();        if (currArg == paramName.toLowerCase() && args.length > i+1) {      paramVal = args[i+1];      queryStr = "";      // Pull off the query string if it exists.      var indQueryStr = args[i+1].indexOf('?');      if (indQueryStr != -1){        paramVal = args[i+1].substring(0, indQueryStr);        queryStr = args[i+1].substr(indQueryStr);      }      endStr = "";      if (paramVal.length > extension.length)        endStr = paramVal.substr(paramVal.length - extension.length);      if (endStr.toLowerCase() != extension.toLowerCase()) {        // Extension doesn't exist, add it        args[i+1] = paramVal + extension + queryStr;      }    }  }}// passed extension. If it doesn't have it, this function adds the extension.function AC_GetArguments(args, paramName){  var currArg, paramVal;  for (var i=0; i < args.length; i=i+2){    currArg = args[i].toLowerCase();        if (currArg == paramName.toLowerCase() && args.length > i+1) {      paramVal = args[i+1];    }  }  return paramVal;	}// Builds the codebase value to use. If the 'codebase' parameter is found in the args,// uses its value as the version for the baseURL. If 'codebase' is not found in the args,// uses the defaultVersion.function AC_GetCodebase(baseURL, defaultVersion, args){  var codebase = baseURL + defaultVersion;  for (var i=0; i < args.length; i=i+2) {    currArg = args[i].toLowerCase();        if (currArg == "codebase" && args.length > i+1) {      if (args[i+1].indexOf("http://") == 0) {        // User passed in a full codebase, so use it.        codebase = args[i+1];      }      else {        codebase = baseURL + args[i+1];      }    }  }	  return codebase;	}// Substitutes values for %s in a string.// Usage: AC_sprintf("The %s function requires %s arguments.","foo()","4");function AC_sprintf(str){  for (var i=1; i < arguments.length; i++){    str = str.replace(/%s/,arguments[i]);  }  return str;}		// Checks that args, the argument list to check, has an even number of // arguments. Alerts the user if an odd number of arguments is found.function AC_checkArgs(args,callingFn){  var retVal = true;  // If number of arguments isn't even, show a warning and return false.  if (parseFloat(args.length/2) != parseInt(args.length/2)){    alert(sprintf(MSG_EvenArgs,callingFn));    retVal = false;  }  return retVal;}	function AC_GenerateObj(callingFn, useXHTML, classid, codebase, pluginsPage, mimeType, args){  if (!AC_checkArgs(args,callingFn)){    return;  }  // Initialize variables  var tagStr = '';  var currArg = '';  var closer = (useXHTML) ? '/>' : '>';  var srcFound = false;  var embedStr = '<embed';  var paramStr = '';  var embedNameAttr = '';  var objStr = '<object classid="' + classid + '" codebase="' + codebase + '"';  // Spin through all the argument pairs, assigning attributes and values to the object,  // param, and embed tags as appropriate.  for (var i=0; i < args.length; i=i+2){    currArg = args[i].toLowerCase();        if (currArg == "src"){      if (callingFn.indexOf("RunSW") != -1){        paramStr += '<param name="' + args[i] + '" value="' + args[i+1] + '"' + closer + '\n';        embedStr += ' ' + args[i] + '="' + args[i+1] + '"';        srcFound = true;      }      else if (!srcFound){        paramStr += '<param name="movie" value="' + args[i+1] + '"' + closer + '\n';         embedStr += ' ' + args[i] + '="' + args[i+1] + '"';        srcFound = true;      }    }    else if (currArg == "movie"){      if (!srcFound){        paramStr += '<param name="' + args[i] + '" value="' + args[i+1] + '"' + closer + '\n';         embedStr += ' src="' + args[i+1] + '"';        srcFound = true;      }    }    else if (   currArg == "width"               || currArg == "height"               || currArg == "align"               || currArg == "vspace"               || currArg == "hspace"               || currArg == "class"               || currArg == "title"               || currArg == "accesskey"               || currArg == "tabindex"){      objStr += ' ' + args[i] + '="' + args[i+1] + '"';      embedStr += ' ' + args[i] + '="' + args[i+1] + '"';    }    else if (currArg == "id"){      objStr += ' ' + args[i] + '="' + args[i+1] + '"';      // Only add the name attribute to the embed tag if a name attribute       // isn't already there. This is what Dreamweaver does if the user      // enters a name for a movie in the PI: it adds id to the object      // tag, and name to the embed tag.      if (embedNameAttr == "")        embedNameAttr = ' name="' + args[i+1] + '"';    }    else if (currArg == "name"){      objStr += ' ' + args[i] + '="' + args[i+1] + '"';      // Replace the current embed tag name attribute with the one passed in.      embedNameAttr = ' ' + args[i] + '="' + args[i+1] + '"';    }        else if (currArg == "codebase"){      // The codebase parameter has already been handled, so ignore it.     }        // This is an attribute we don't know about. Assume that we should add it to the     // param and embed strings.    else{      paramStr += '<param name="' + args[i] + '" value="' + args[i+1] + '"' + closer + '\n';       embedStr += ' ' + args[i] + '="' + args[i+1] + '"';    }  }  // Tell the user that a movie/src is required, if one was not passed in.  if (!srcFound){    alert(AC_sprintf(MSG_SrcRequired,callingFn));    return;  }  if (embedNameAttr)    embedStr += embedNameAttr;	  if (pluginsPage)    embedStr += ' pluginspage="' + pluginsPage + '"';  if (mimeType)    embedStr += ' type="' + mimeType + '"';      // Close off the object and embed strings  objStr += '>\n';  embedStr += '></embed>\n';   // Assemble the three tag strings into a single string.  tagStr = objStr + paramStr + embedStr + "</object>\n";   document.write(tagStr);}function get_cookie(Name) {  var search = Name + "="  var returnvalue = "";  if (document.cookie.length > 0) {    offset = document.cookie.indexOf(search)    if (offset != -1) { // if the cookie exists      offset += search.length      //set the index of beginning value      end = document.cookie.indexOf(";", offset);          if (end == -1) // set the index of the end of cookie value         end = document.cookie.length;         returnvalue = unescape(document.cookie.substring(offset, end))      }   }  return returnvalue;}function flash_test() {  var nnswf=navigator.plugins["Shockwave Flash"];     if (nnswf) {         return "Yes";     }	   var ieswf=new ActiveXObject('ShockwaveFlash.ShockwaveFlash');     if (ieswf) {         return "Yes";     }	   return "No";}