function SWFObj(div, swf, v, w, h, bgclr) {
	//get some browser info
	this.isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
	this.isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
	this.isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
	
	/* define private methods that must load first */
	this.ControlVersion = function() {
		var version;
		var axo;
		var e;
	
		// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
	
		try {
			// version will be set for 7.X or greater players
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
			version = axo.GetVariable("$version");
//			alert("version will be set for 7.X or greater players"+version);
		} catch (e) {
		}
	
		if (!version)
		{
			try {
				// version will be set for 6.X players only
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
				
				// installed player is some revision of 6.0
				// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
				// so we have to be careful. 
				
				// default to the first public version
				version = "WIN 6,0,21,0";
	
				// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
				axo.AllowScriptAccess = "always";
	
				// safe to call for 6.0r47 or greater
				version = axo.GetVariable("$version");
	
			} catch (e) {
			}
		}
	
		if (!version)
		{
			try {
				// version will be set for 4.X or 5.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = axo.GetVariable("$version");
			} catch (e) {
			}
		}
	
		if (!version)
		{
			try {
				// version will be set for 3.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = "WIN 3,0,18,0";
			} catch (e) {
			}
		}
	
		if (!version)
		{
			try {
				// version will be set for 2.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				version = "WIN 2,0,0,11";
			} catch (e) {
				version = -1;
			}
		}
		
		return version;
	}
	
	//what is the version of the currently installed Flash Player
	this.getSwfVer = function(){
		// NS/Opera version >= 3 check for Flash plugin in plugin array
		var flashVer = -1;
		
		if (navigator.plugins != null && navigator.plugins.length > 0) {
			if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
				var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
				var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;			
				var descArray = flashDescription.split(" ");
				var tempArrayMajor = descArray[2].split(".");
				var versionMajor = tempArrayMajor[0];
				var versionMinor = tempArrayMajor[1];
				if ( descArray[3] != "" ) {
					tempArrayMinor = descArray[3].split("r");
				} else {
					tempArrayMinor = descArray[4].split("r");
				}
				var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
				var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
			}
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) { // MSN/WebTV 2.6 supports Flash 4
			flashVer = 4;
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) { // WebTV 2.5 supports Flash 3
			flashVer = 3;
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) { // older WebTV supports Flash 2
			flashVer = 2;
		} else if ( this.isIE && this.isWin && !this.isOpera ) {
			flashVer = this.ControlVersion();
		}
		
		return flashVer;
	}
	
	//is the version the same as or better than the passed in version number
	//requires full version number
	this.isVersion = function(reqMajorVer, reqMinorVer, reqRevision) {
		var versionStr = this.getSwfVer();
		if (versionStr == -1 ) {
			return false;
		} else if (versionStr != 0) {
			if(this.isIE && this.isWin && !this.isOpera) {
				// Given "WIN 2,0,0,11"
				var tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
				var tempString        = tempArray[1];			// "2,0,0,11"
				var versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
			} else {
				var versionArray      = versionStr.split(".");
			}
			var versionMajor      = versionArray[0];
			var versionMinor      = versionArray[1];
			var versionRevision   = versionArray[2];

			// is the major.revision >= requested major.revision AND the minor version >= requested minor
			if (versionMajor > parseFloat(reqMajorVer)) {
				return true;
			} else if (versionMajor == parseFloat(reqMajorVer)) {
				if (versionMinor > parseFloat(reqMinorVer))
					return true;
				else if (versionMinor == parseFloat(reqMinorVer)) {
					if (versionRevision >= parseFloat(reqRevision))
						return true;
				}
			}
			return false;
		}
	}
	
	this.setVersionObj = function(ver) {
		var versionArray = ver.split(".");
		var tmpObj = new Object();
		tmpObj.major = versionArray[0];
		tmpObj.minor = versionArray[1];
		tmpObj.rev = versionArray[2];
		
		return tmpObj;
	}
	
	/* define public Class API */
	//override and existing attribute
	this.setAttribute = function(name, value){
		this.attributes[name] = value;
	}
	
	//output final HTML
	this.outputHTML = function() {
		var HTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
		+ ' width="' + this.attributes["width"]
		+ '" height="' + this.attributes["height"]
		+ '" id="' + this.attributes["id"]
		+ '" name="' + this.attributes["name"]
		+ '" align="' + this.attributes["align"]
		+ '" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">'
		+ '<param name="movie" value="'+ this.attributes["movie"] +'.swf" />'
		+ '<param name="loop" value="'+ this.attributes["loop"] +'" />'
		+ '<param name="menu" value="'+ this.attributes["menu"] +'" />'
		+ '<param name="quality" value="'+ this.attributes["quality"] +'" />'
		+ '<param name="scale" value="'+ this.attributes["scale"] +'" />'
		+ '<param name="allowScriptAccess" value="'+ this.attributes["allowScriptAccess"] +'" />'
		+ '<param name="bgcolor" value="'+ this.attributes["bgcolor"] +'" />';
		
		if (this.attributes["FlashVars"]!=null) HTML+= '<param name="FlashVars" value="'+ this.attributes["FlashVars"] +'" />';
		
		HTML+=  '<embed src="'+ this.attributes["src"]
		+'.swf" loop="'+ this.attributes["loop"]
		+'" menu="'+ this.attributes["menu"]
		+'" quality="'+ this.attributes["quality"]
		+'" scale="'+ this.attributes["scale"]
		+'" bgcolor="'+ this.attributes["bgcolor"]
		+'" width="'+ this.attributes["width"]
		+'" height="'+ this.attributes["height"]
		+'" id="'+ this.attributes["id"]
		+'" name="'+ this.attributes["name"]
		+'" align="'+ this.attributes["align"]
		+'" allowScriptAccess="' + this.attributes["allowScriptAccess"] + '" ';
		
		if (this.attributes["FlashVars"]!=null) HTML+= 'FlashVars="' + this.attributes["FlashVars"] + '" ';
		
		HTML+= 'type="application/x-shockwave-flash"'
		+ 'pluginspage="http://www.macromedia.com/go/getflashplayer">'
		+ '<\/embed>'
    		+ '<\/object>';
		
		if (this.isValidVersion) document.getElementById(this.attributes["div"]).innerHTML = HTML;
	}
	
	/* Class properties */
	//store all the SWFs info in one easy place
	this.attributes = new Array();
	//set required passed in values
	this.attributes["div"] = div;
	this.attributes["name"] = this.attributes["src"] = this.attributes["id"] = this.attributes["movie"] = swf;
	this.attributes["version"] = this.setVersionObj(v);
	this.attributes["width"] = w;
	this.attributes["height"] = h;
	this.attributes["bgcolor"] = bgclr;
	
	//set the rest of the defaults
	//all defaults can be changed by using the setAttribute method of this class
	this.attributes["loop"] = "false";
	this.attributes["menu"] = "false";
	this.attributes["quality"] = "high";
	this.attributes["scale"] = "noscale";
	this.attributes["allowScriptAccess"] = "sameDomain";
	this.attributes["align"] = "middle";
	this.attributes["FlashVars"] = null;
	
	// Major version of Flash required
	this.requiredMajorVersion = 8;
	// Minor version of Flash required
	this.requiredMinorVersion = 0;
	// Revision of Flash required
	this.requiredRevision = 0;
	
	//can this current install be upgraded or do we need to redirect to MM
	this.isUpgradable = this.isVersion(6,0,65);
	//does the client already have the correct version
	this.isValidVersion = this.isVersion(this.attributes["version"].major,this.attributes["version"].minor,this.attributes["version"].rev);
}