	var UA = function()
	{
		var sUA = navigator.userAgent.toLowerCase();
		var oReturn =  {
			bIsWebKit : sUA.indexOf("applewebkit") > -1,
			bIsSafari : sUA.indexOf("safari") > -1,
			bIsKonq: navigator.product != null && navigator.product.toLowerCase().indexOf("konqueror") > -1,
			bIsOpera : sUA.indexOf("opera") > -1,
			bIsXML : document.contentType != null && document.contentType.indexOf("xml") > -1,
			bHasTransparencySupport : true,
			bUseDOM : true,
			nFlashVersion : null,
			nOperaVersion : null,
			nGeckoBuildDate : null,
			nWebKitVersion : null
		};

		oReturn.bIsKHTML = oReturn.bIsWebKit || oReturn.bIsKonq;
		oReturn.bIsGecko = !oReturn.bIsWebKit && navigator.product != null && navigator.product.toLowerCase() == "gecko";
		if(oReturn.bIsGecko){ oReturn.nGeckoBuildDate = new Number(sUA.match(/.*gecko\/(\d{8}).*/)[1]) };
		oReturn.bIsIE = sUA.indexOf("msie") > -1 && !oReturn.bIsOpera && !oReturn.bIsKHTML && !oReturn.bIsGecko;
		oReturn.bIsIEMac = oReturn.bIsIE && sUA.match(/.*mac.*/) != null;
		if(oReturn.bIsOpera){ oReturn.nOperaVersion = new Number(sUA.match(/.*opera(\s|\/)(\d+\.\d+)/)[2]) };
		if(oReturn.bIsIE || (oReturn.bIsOpera && oReturn.nOperaVersion < 7.6)){ oReturn.bUseDOM = false };
		if(oReturn.bIsWebKit){ oReturn.nWebKitVersion = new Number(sUA.match(/.*applewebkit\/(\d+).*/)[1]) };
		if(window.hasFlash && (!oReturn.bIsIE || oReturn.bIsIEMac)){
			var flashDescription = (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]).description;
			oReturn.nFlashVersion = parseInt(flashDescription.charAt(flashDescription.indexOf(".") - 1));
		};
		if(sUA.match(/.*(windows|mac).*/) == null ||
		oReturn.bIsIEMac || oReturn.bIsKonq ||
		(oReturn.bIsOpera && oReturn.nOperaVersion < 7.6) ||
		(oReturn.bIsSafari && oReturn.nFlashVersion < 7) ||
		(!oReturn.bIsSafari && oReturn.bIsWebKit && oReturn.nWebKitVersion < 124) ||
		(oReturn.bIsGecko && oReturn.nGeckoBuildDate < 20020523)){
			oReturn.bHasTransparencySupport = false;
		};

		if(!oReturn.bIsIEMac && !oReturn.bIsGecko && document.createElementNS){
			try {
				document.createElementNS("http://www.w3.org/1999/xhtml", "i").innerHTML = "";
			} catch(e){
				oReturn.bIsXML = true;
			};
		};

		oReturn.bUseInnerHTMLHack = oReturn.bIsKonq || (oReturn.bIsWebKit && oReturn.nWebKitVersion < 312) || oReturn.bIsIE;

		return oReturn;
	}();

virtual_object = {
	init : function()
	{
		myHeader = document.getElementById("virtual_object");
		virtual_object.insert(myHeader);
	},

	createObjectParameter : function(nodeObject, sName, sValue)
	{
		var node = document.createElement("param");

		node.setAttribute("name", sName);
		node.setAttribute("value", sValue);
		nodeObject.appendChild(node);
	},

	insert : function(myElement)
	{
		if(UA.bUseDOM)
		{
			outHTML = '<applet codebase = "." archive = "twviewer.jar" code = "com.easypano.tw.TWViewer.class" name = "TWViewer" width = "800" height = "520" hspace = "0" vspace = "0" mayscript = "true">';
			outHTML += '<PARAM name = iniFile value = "Config_index.txt">';
			outHTML += '<PARAM name = skin.bgcolor value = "134, 114, 77">';
			outHTML += '<PARAM name = skin.waitingimg value = "Skin/preload_image.jpg">';
			outHTML += '<PARAM name = skin.archive value = "Skin_index.zip">';;
			outHTML += '<PARAM name = skin.archive.itemnum value = "42">';
			outHTML += '<PARAM name = progress.color value = "255, 253, 253">';
			outHTML += '<PARAM name = progress.bounds value = "93, 361, 614, 9">';
			outHTML += '<PARAM name = comappletname value = "UserApplet1">';;
			outHTML += '</applet>';
			myElement.innerHTML = [outHTML].join("");
		}
		else
		{
			nodeJava = document.createElement("applet");

			nodeJava.setAttribute("codebase",".");
			nodeJava.setAttribute("archive","twviewer.jar");
			nodeJava.setAttribute("code","com.easypano.tw.TWViewer.class");
			nodeJava.setAttribute("name","TWViewer");
			nodeJava.setAttribute("width","800");
			nodeJava.setAttribute("height","520");
			nodeJava.setAttribute("hspace","0");
			nodeJava.setAttribute("vspace","0");
			nodeJava.setAttribute("mayscript","true");

			virtual_object.createObjectParameter(nodeJava,"iniFile","Config_index.txt");
			virtual_object.createObjectParameter(nodeJava,"skin.bgcolor","134, 114, 77");
			virtual_object.createObjectParameter(nodeJava,"skin.waitingimg value","Skin/preload_image.jpg");
			virtual_object.createObjectParameter(nodeJava,"skin.archive","Skin_index.zip");
			virtual_object.createObjectParameter(nodeJava,"skin.archive.itemnum","42");
			virtual_object.createObjectParameter(nodeJava,"progress.color","255, 253, 253");
			virtual_object.createObjectParameter(nodeJava,"progress.bounds","93, 361, 614, 9");
			virtual_object.createObjectParameter(nodeJava,"comappletname","UserApplet1");

			myElement.appendChild(nodeJava);
		}
	}
};

evt.add(window, "load", virtual_object.init);

