﻿function jenaFlash()
{
	this.ControlVersion = function ()
	{
		var version, 
			xObject;

		try 
		{
			xObject = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
			version = xObject.GetVariable("$version");
		} 
		catch (exc1) 
		{
		}

		if (!version)
		{
			try 
			{
				xObject = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
				version = "WIN 6,0,21,0";
				xObject.AllowScriptAccess = "always";
				version = xObject.GetVariable("$version");
			}
			catch (exc2)
			{
			}
		}

		if (!version)
		{
			try 
			{
				xObject = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = xObject.GetVariable("$version");
			} 
			catch (exc3) 
			{
			}
		}

		if (!version)
		{
			try 
			{
				xObject = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = "WIN 3,0,18,0";
			} 
			catch (exc4) 
			{
			}
		}

		if (!version)
		{
			try 
			{
				xObject = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				version = "WIN 2,0,0,11";
			} 
			catch (exc5) 
			{
				version = -1;
			}
		}
		
		return version;
	};
	
	this.GetSwfVer = function ()
	{
		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" : ""),
					flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description,
					descArray = flashDescription.split(" "),
					tempArrayMajor = descArray[2].split("."),
					versionMajor = tempArrayMajor[0],
					versionMinor = tempArrayMajor[1],
					versionRevision = descArray[3];
					
				if (versionRevision === "") 
				{
					versionRevision = descArray[4];
				}
				if (versionRevision[0] === "d") 
				{
					versionRevision = versionRevision.substring(1);
				} 
				else if (versionRevision[0] === "r") 
				{
					versionRevision = versionRevision.substring(1);
					
					if (versionRevision.indexOf("d") > 0) 
					{
						versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
					}
				}
				
				flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
			}
		}
		else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") !== -1) 
		{
			flashVer = 4;
		}
		else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") !== -1) 
		{
			flashVer = 3;
		}
		else if (navigator.userAgent.toLowerCase().indexOf("webtv") !== -1) 
		{
			flashVer = 2;
		}
		else if (jCore().browser.msie && jCore().system.window && !jCore().browser.opera) 
		{
			flashVer = this.ControlVersion();
		}	
		
		return flashVer;
	};
	
	this.DetectFlashVer = function (reqMajorVer, reqMinorVer, reqRevision)
	{
		versionStr = this.GetSwfVer();
		
		if (versionStr === -1 ) 
		{
			return false;
		} 
		else if (versionStr != 0) 
		{
			if (jCore().browser.msie && jCore().system.window && !jCore().browser().opera) 
			{
				tempArray = versionStr.split(" ");
				tempString = tempArray[1];
				versionArray = tempString.split(",");
			} 
			else 
			{
				versionArray = versionStr.split(".");
			}
			
			var versionMajor = versionArray[0],
				versionMinor = versionArray[1],
				versionRevision  = versionArray[2];

			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.AC_AddExtension = function (src, ext)
	{
		if (src.indexOf('?') !== -1)
		{
			return src.replace(/\?/, ext+'?'); 
		}
		else
		{
			return src + ext;
		}
	};

	this.AC_Generateobj = function (objAttrs, params, embedAttrs) 
	{ 
		var str = "";
		
		if (jCore().browser.msie && jCore().system.window && !jCore().browser.opera)
		{
			str += "<object ";
		
			for (var i in objAttrs)
			{
				str += i + "=\"" + objAttrs[i] + "\" ";
			}
			str += ">";
		
			for (var i in params)
			{
				str += "<param name=\"" + i + "\" value=\"" + params[i] + "\" /> ";
			}
			str += "</object>";
		}
		else
		{
			str += "<embed ";
		
			for (var i in embedAttrs)
			{
				str += i + "=\"" + embedAttrs[i] + "\"";
			}
			str += "> </embed>";
		}

		document.write(str);
	};
	
	this.AC_FL_RunContent = function ()
	{
		var ret = this.AC_GetArgs(arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash");
		this.AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
	};

	this.AC_SW_RunContent = function ()
	{
		var ret = this.AC_GetArgs(arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000", null);
		this.AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
	};

	this.AC_GetArgs = function (args, ext, srcParamName, classid, mimeType)
	{
		var ret = new Object();
		
		ret.embedAttrs = new Object();
		ret.params = new Object();
		ret.objAttrs = new Object();
		
		for (var i=0; i < args.length; i=i+2)
		{
			var currArg = args[i].toLowerCase();    

			switch (currArg)
			{	
				case "classid":
					break;
				case "pluginspage":
					ret.embedAttrs[args[i]] = args[i+1];
					break;
				case "src":
				case "movie":	
					args[i+1] = this.AC_AddExtension(args[i+1], ext);
					ret.embedAttrs["src"] = args[i+1];
					ret.params[srcParamName] = args[i+1];
					break;
				case "onafterupdate":
				case "onbeforeupdate":
				case "onblur":
				case "oncellchange":
				case "onclick":
				case "ondblClick":
				case "ondrag":
				case "ondragend":
				case "ondragenter":
				case "ondragleave":
				case "ondragover":
				case "ondrop":
				case "onfinish":
				case "onfocus":
				case "onhelp":
				case "onmousedown":
				case "onmouseup":
				case "onmouseover":
				case "onmousemove":
				case "onmouseout":
				case "onkeypress":
				case "onkeydown":
				case "onkeyup":
				case "onload":
				case "onlosecapture":
				case "onpropertychange":
				case "onreadystatechange":
				case "onrowsdelete":
				case "onrowenter":
				case "onrowexit":
				case "onrowsinserted":
				case "onstart":
				case "onscroll":
				case "onbeforeeditfocus":
				case "onactivate":
				case "onbeforedeactivate":
				case "ondeactivate":
				case "type":
				case "codebase":
				case "id":
					ret.objAttrs[args[i]] = args[i+1];
					break;
				case "width":
				case "height":
				case "align":
				case "vspace": 
				case "hspace":
				case "class":
				case "title":
				case "accesskey":
				case "name":
				case "tabindex":
					ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
					break;
				default:
					ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
			}
		}
	  
		ret.objAttrs["classid"] = classid;
	  
		if (mimeType) 
		{
			ret.embedAttrs["type"] = mimeType;
		}
	  
		return ret;
	}

	return this;
};

var jFlash = function()
{
	return new jenaFlash();
};
