 //     Copyright 2005-2006 IntegrityWebServices -  All Rights Reserved  - Http://www.integritywebservices.net
//     Ownership Remains with Integrity Web Services
//     For Use By License Only - May Not be Reproduced
//     License Restrictions Require This Header To Be Included To Utilize The Code In This File!!  

/*
This is the offical versioned class for the activeX control class 
This is the version to support all new projects
   //
   //  Property Of Dallasart (C)2006 Licensed For Use!
   //  Version  1.0  (Apr 1, 2006	)
*/

/*
 * This file contains functions to generate OBJECT and EMBED tags 
 */

/************** LOCALIZABLE GLOBAL VARIABLES ****************/

var gArgCountErr =	'The "%%" function requires an even number of arguments.'
				+	'\nArguments should be in the form "atttributeName", "attributeValue", ...';
				

var gArgPlayerErr =	'The "%%" function requires first Argument to be Player Type.'
				+	'\nSupported Players are \'MediaPlayer\',\'FlashPlayer\', and \'QuickTimePlayer\' ';				
				
var gPlayer = new Number(0);	
var gFlash =  new Number(1);
var gQuick = new Number(2);
var gMedia = new Number(3);				


var qplayer
/******************** 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, player ,args)
{
	
	// is the number of optional arguments even?
	if ( args.length < 4 || (0 != (args.length % 2)) )
	{
		_QTComplain(callingFcnName, gArgCountErr);
		return "";
	}
   
	// find the player
    switch (player.toLowerCase())
 	 {
  	    case  "quicktimeplayer" :    {    gPlayer  = gQuick ; break ;}
  	    case  "mediaplayer" :         {    gPlayer  = gMedia ; break ;}
   	    case  "flashplayer" :            {     gPlayer  = gFlash ; break ;}
        
        default : {  _QTComplain(callingFcnName, gArgPlayerErr);    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];

    switch (gPlayer)
     {
	    case  gQuick :
	      {
	         gTagAttrs["classid"] = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";

	          // 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;
             break;
          }


	    case  gFlash   :
	      {

            gTagAttrs["classid"] = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
            gTagAttrs["pluginspage"] = "";
	          // 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,0,0";
	        gTagAttrs["codebase"] = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=" + activexVers;
            break;
           }

	    case  gMedia   :
	      {

            gTagAttrs["classid"] = "clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95";
            gTagAttrs["pluginspage"] = "http://www.microsoft.com/Windows/MediaPlayer/";
	          // 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,4,7,1112";
	        gTagAttrs["codebase"] = "http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=version=" + activexVers;
            break;
           }




     
	  } // end case

	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' + '>';
}

/*--------------------------------------------------------------*/
// remove first argument - return remainder
 
function clipArguments(arg)
{
     var  _args = new Array();
	  for (var i=0 ; i < arg.length-1 ; i++)
	  {
	    _args[i ]  = arg[i+1];
	  }

     return _args;
 }
 
 
/*--------------------------------------------------------------*/
//
//  Main Calling Functions
//
/*--------------------------------------------------------------*/

// return the object/embed as a string
// for testing
function GenerateOBJECTText()
{
	 var _player  =   arguments[0];
     var _args     = clipArguments(arguments) ;
		return _QTGenerate("QT_GenerateOBJECTText",  false,   _player ,  _args) ;
}

/*--------------------------------------------------------------*/

function GenerateOBJECTText_XHTML()
{
	 var _player  =   arguments[0];
     var _args     = clipArguments(arguments) ;
	return _QTGenerate("QT_GenerateOBJECTText_XHTML", true,  _player ,  _args) ;
}

/*--------------------------------------------------------------*/

function WriteOBJECT()
{
	 var _player  =   arguments[0];
     var _args     = clipArguments(arguments)   ;
  	document.writeln(_QTGenerate("QT_WriteOBJECT", false, _player ,  _args) );

}

/*--------------------------------------------------------------*/
 function WriteOBJECT_XHTML()
{
	 var _player  =   arguments[0];
     var _args     = clipArguments(arguments)
     document.writeln( _QTGenerate("QT_WriteOBJECT_XHTML", true,  _player ,  _args) );
}

 
/*--------------------------------------------------------------*/

function WrightObject_TerminalServer(  MsRdpClient , OnControlLoad ,  width   , height   )
{
    var vwidth = width;
    var vheight = height;
   
    if (vwidth < 200 || vwidth > 1600 ) vwidth = 800; 
    if (vheight <200 || vheight > 1200) vheight = 600;
  
   var q = '"';
  
	var objTag =  '<object '
 					+   ' language=' + q +  'vbscript' + q 
 				    +   '  id=' + q + MsRdpClient + q 
 					+   '  onreadystatechange=' + q  + OnControlLoad +"()" + q  
 		            +   '  CLASSID='+ q +  'CLSID:9059f30f-4eb1-4bd2-9fdc-36f43a218f4a' + q 
                    +  '  CODEBASE=' + q +   'msrdp.cab#version=5,1,2600,2180' + q
    	            +  '  HEIGHT=' + q + vheight + q 
     	            +  '  WIDTH=' + q + vheight + q 
 	                +  ' ><object>\n'
 
  document.writeln( objTag  );
        
}
/*--------------------------------------------------------------*/