﻿var deployJava={
				debug:null,myInterval:null,preInstallJREList:null,returnPage:null,brand:null,locale:null,
				installType:null,EAInstallEnabled:false,EarlyAccessURL:null,
				getJavaURL:'http://java.sun.com/webapps/getjava/BrowserRedirect?host=java.com',
				appleRedirectPage:'http://www.apple.com/support/downloads/',
				oldMimeType:'application/npruntime-scriptable-plugin;DeploymentToolkit',
				mimeType:'application/java-deployment-toolkit',
				launchButtonPNG:'http://java.sun.com/products/jfc/tsc/articles/swing2d/webstart.png',
				getJREs:function(){
	var list=new Array();
	if(deployJava.isPluginInstalled())
	{
		var plugin=deployJava.getPlugin();
		for(var i=0;i<plugin.jvms.getLength();i++)
		{
			list[i]=plugin.jvms.get(i).version;
		}
	}
	else
	{
		var browser=deployJava.getBrowser();
		if(browser=='MSIE')
		{
			if(deployJava.testUsingActiveX('1.8.0'))
			{
				list[0]='1.8.0';
			}
			else if(deployJava.testUsingActiveX('1.7.0'))
			{
				list[0]='1.7.0';
			}
			else if(deployJava.testUsingActiveX('1.6.0'))
			{
				list[0]='1.6.0';
			}
			else if(deployJava.testUsingActiveX('1.5.0'))
			{
				list[0]='1.5.0';
			}
			else if(deployJava.testUsingActiveX('1.4.2'))
			{
				list[0]='1.4.2';
			}
			else if(deployJava.testForMSVM())
			{
				list[0]='1.1';
			}
		}
		else if(browser=='Netscape Family')
		{
			if(deployJava.testUsingMimeTypes('1.8'))
			{
				list[0]='1.8.0';
			}
			else if(deployJava.testUsingMimeTypes('1.7'))
			{
				list[0]='1.7.0';
			}
				else if(deployJava.testUsingMimeTypes('1.6'))
			{
				list[0]='1.6.0';
			}
			else if(deployJava.testUsingMimeTypes('1.5'))
			{
				list[0]='1.5.0';
			}
			else if(deployJava.testUsingMimeTypes('1.4.2'))
			{
				list[0]='1.4.2';
			}
		}
		else if(browser=='Safari')
		{
			if(deployJava.testUsingPluginsArray('1.8.0'))
			{
				list[0]='1.8.0';
			}
			else if(deployJava.testUsingPluginsArray('1.7.0'))
			{
				list[0]='1.7.0';
			}
			else if(deployJava.testUsingPluginsArray('1.6.0'))
			{
				list[0]='1.6.0';
			}
			else if(deployJava.testUsingPluginsArray('1.5.0'))
			{
				list[0]='1.5.0';
			}
			else if(deployJava.testUsingPluginsArray('1.4.2'))
			{
				list[0]='1.4.2';
			}
		}
	}

	if(deployJava.debug)
	{
		for(var i=0;i<list.length;++i)
		{
			alert('We claim to have detected Java SE '+list[i]);
		}
	}
	return list;
}

,getLatestJRE:function(){
	var list=new Array();
	if(deployJava.isPluginInstalled())
	{
		var plugin=deployJava.getPlugin();
		for(var i=0;i<plugin.jvms.getLength();i++)
		{
			list[0]=plugin.jvms.get(i).version;
		}
	}
	else
	{
		var browser=deployJava.getBrowser();
		if(browser=='MSIE')
		{
			if(deployJava.testUsingActiveX('1.8.0'))
			{
				list[0]='1.8.0';
			}
			else if(deployJava.testUsingActiveX('1.7.0'))
			{
				list[0]='1.7.0';
			}
			else if(deployJava.testUsingActiveX('1.6.0'))
			{
				list[0]='1.6.0';
			}
			else if(deployJava.testUsingActiveX('1.5.0'))
			{
				list[0]='1.5.0';
			}
			else if(deployJava.testUsingActiveX('1.4.2'))
			{
				list[0]='1.4.2';
			}
			else if(deployJava.testForMSVM())
			{
				list[0]='1.1';
			}
		}
		else if(browser=='Netscape Family')
		{
			if(deployJava.testUsingMimeTypes('1.8'))
			{
				list[0]='1.8.0';
			}
			else if(deployJava.testUsingMimeTypes('1.7'))
			{
				list[0]='1.7.0';
			}
				else if(deployJava.testUsingMimeTypes('1.6'))
			{
				list[0]='1.6.0';
			}
			else if(deployJava.testUsingMimeTypes('1.5'))
			{
				list[0]='1.5.0';
			}
			else if(deployJava.testUsingMimeTypes('1.4.2'))
			{
				list[0]='1.4.2';
			}
		}
		else if(browser=='Safari')
		{
			if(deployJava.testUsingPluginsArray('1.8.0'))
			{
				list[0]='1.8.0';
			}
			else if(deployJava.testUsingPluginsArray('1.7.0'))
			{
				list[0]='1.7.0';
			}
			else if(deployJava.testUsingPluginsArray('1.6.0'))
			{
				list[0]='1.6.0';
			}
			else if(deployJava.testUsingPluginsArray('1.5.0'))
			{
				list[0]='1.5.0';
			}
			else if(deployJava.testUsingPluginsArray('1.4.2'))
			{
				list[0]='1.4.2';
			}
		}
	}

	if(deployJava.debug)
	{
		for(var i=0;i<list.length;++i)
		{
			alert('We claim to have detected Java SE '+list[i]);
		}
	}
	return list;
}

,installJRE:function(requestVersion)
{
	var ret=false;
	if(deployJava.isPluginInstalled())
	{
		if(deployJava.getPlugin().installJRE(requestVersion))
		{
			deployJava.refresh();
			if(deployJava.returnPage!=null)
			{
				document.location=deployJava.returnPage;
			}
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		return deployJava.installLatestJRE();
	}
}
							
,installLatestJRE:function()
{
	if(deployJava.isPluginInstalled())
	{
		if(deployJava.getPlugin().installLatestJRE())
		{
			deployJava.refresh();
			if(deployJava.returnPage!=null)
			{
				document.location=deployJava.returnPage;
			}
			return true;
		}
		else
		{
			return false;
		}
	}
	else
	{
		var browser=deployJava.getBrowser();
		var platform=navigator.platform.toLowerCase();
		if((deployJava.EAInstallEnabled=='true')&&(platform.indexOf('win')!=-1)&&(deployJava.EarlyAccessURL!=null))
		{
			deployJava.preInstallJREList=deployJava.getJREs();
			if(deployJava.returnPage!=null)
			{
				deployJava.myInterval=setInterval("deployJava.poll()",3000);
			}
			location.href=deployJava.EarlyAccessURL;
			return false;
		}
		else
		{
			if(browser=='MSIE')
			{
				return deployJava.IEInstall();
			}
			else if((browser=='Netscape Family')&&(platform.indexOf('win32')!=-1))
			{
				return deployJava.FFInstall();
			}
			else
			{
				location.href=deployJava.getJavaURL+
					((deployJava.returnPage!=null)?('&returnPage='+deployJava.returnPage):'')+
					((deployJava.locale!=null)?('&locale='+deployJava.locale):'')+
					((deployJava.brand!=null)?('&brand='+deployJava.brand):'');
			}
			return false;
		}
	}
}

,runApplet:function(attributes,parameters,minimumVersion)
{
	if(minimumVersion=='undefined'||minimumVersion==null)
	{
		minimumVersion='1.1';
	}
	var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
	var matchData=minimumVersion.match(regex);
	if(deployJava.returnPage==null)
	{
		deployJava.returnPage=document.location;
	}
	if(matchData!=null)
	{
		var browser=deployJava.getBrowser();
		if((browser!='?')&&(browser!='Safari'))
		{
			if(deployJava.versionCheck(minimumVersion+'+'))
			{
				deployJava.writeAppletTag(attributes,parameters);
			}
			else if(deployJava.installJRE(minimumVersion+'+'))
			{
				deployJava.refresh();
				location.href=document.location;
				deployJava.writeAppletTag(attributes,parameters);
			}
		}
		else
		{
			deployJava.writeAppletTag(attributes,parameters);
		}
	}
	else
	{
		if(deployJava.debug)
		{
			alert('Invalid minimumVersion argument to runApplet():'+minimumVersion);
		}
	}
}

,writeAppletTag:function(attributes,parameters)
{
	var s='<'+'applet ';
	for(var attribute in attributes)
	{
		s+=(' '+attribute+'="'+attributes[attribute]+'"');
	}
	s+='>';
	document.write(s);
	if(parameters!='undefined'&&parameters!=null)
	{
		var codebaseParam=false;
		for(var parameter in parameters)
		{
			if(parameter=='codebase_lookup')
			{
				codebaseParam=true;
			}
			s='<param name="'+parameter+'" value="'+parameters[parameter]+'">';
			document.write(s);
		}
		if(!codebaseParam)
		{
			document.write('<param name="codebase_lookup" value="false">');
		}
	}
	document.write('<'+'/'+'applet'+'>');
}
					
,versionCheck:function(versionPattern)
{
	var index=0;
	var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?(\\*|\\+)?$";
	var matchData=versionPattern.match(regex);
	if(matchData!=null)
	{
		var familyMatch=true;
		var patternArray=new Array();
		for(var i=1;i<matchData.length;++i)
		{
			if((typeof matchData[i]=='string')&&(matchData[i]!=''))
			{
				patternArray[index]=matchData[i];
				index++;
			}
		}
		if(patternArray[patternArray.length-1]=='+')
		{
			familyMatch=false;
			patternArray.length--;
		}
		else
		{
			if(patternArray[patternArray.length-1]=='*')
			{
				patternArray.length--;
			}
		}
		var list=deployJava.getJREs();
		for(var i=0;i<list.length;++i)
		{
			if(deployJava.compareVersionToPattern(list[i],patternArray,familyMatch))
			{
				return true;
			}
		}
		return false;
	}
	else
	{
		alert('Invalid versionPattern passed to versionCheck: '+versionPattern);
		return false;
	}
}

,isWebStartInstalled:function(minimumVersion)
{
	var browser=deployJava.getBrowser();
	if((browser=='?')||(browser=='Safari'))
	{
		return true;
	}
	if(minimumVersion=='undefined'||minimumVersion==null)
	{
		minimumVersion='1.4.2';
	}
	var retval=false;
	var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
	var matchData=minimumVersion.match(regex);
	if(matchData!=null)
	{
		retval=deployJava.versionCheck(minimumVersion+'+');
	}
	else
	{
		if(deployJava.debug)
		{
			alert('Invalid minimumVersion argument to isWebStartInstalled(): '+minimumVersion);
		}
		retval=deployJava.versionCheck('1.4.2+');
	}
	return retval;
}

,createWebStartLaunchButton:function(jnlp,minimumVersion)
{
	if(deployJava.returnPage==null)
	{
		deployJava.returnPage=jnlp;
	}
	var url='javascript:'+'if (!deployJava.isWebStartInstalled(&quot;'+minimumVersion+'&quot;)) {'+
			'if (deployJava.installLatestJRE()) {'+'if (deployJava.launch(&quot;'+jnlp+'&quot;)) {}'+
			'}'+'} else {'+'if (deployJava.launch(&quot;'+jnlp+'&quot;)) {}'+'}';document.write('<'+
			'a href="'+url+'" onMouseOver="window.status=\'\'; '+'return true;"><'+'img '+'src="'+
			deployJava.launchButtonPNG+'" '+'border="0" /><'+'/'+'a'+'>');
}

,launch:function(jnlp)
{
	if(deployJava.isPluginInstalled())
	{
		return deployJava.getPlugin().launch(jnlp);
	}
	else
	{
		document.location=jnlp;
		return true;
	}
}

,isPluginInstalled:function()
{
	var plugin=deployJava.getPlugin();
	if(plugin&&plugin.jvms)
	{
		return true;
	}
	else
	{
		return false;
	}
}

,isAutoUpdateEnabled:function()
{
	if(deployJava.isPluginInstalled())
	{
		return deployJava.getPlugin().isAutoUpdateEnabled();
	}
	return false;
}

,setAutoUpdateEnabled:function()
{
	if(deployJava.isPluginInstalled())
	{
		return deployJava.getPlugin().setAutoUpdateEnabled();
	}
	return false;
}

,setInstallerType:function(type)
{
	deployJava.installType=type;
	if(deployJava.isPluginInstalled())
	{
		return deployJava.getPlugin().setInstallerType(type);
	}
	return false;
}

,setAdditionalPackages:function(packageList)
{
	if(deployJava.isPluginInstalled())
	{
		return deployJava.getPlugin().setAdditionalPackages(packageList);
	}
	return false;
}

,setEarlyAccess:function(enabled)
{
	deployJava.EAInstallEnabled=enabled;
}

,isPlugin2:function()
{
	if(deployJava.isPluginInstalled())
	{
		if(deployJava.versionCheck('1.6.0_10+'))
		{
			try
			{
				return deployJava.getPlugin().isPlugin2();
			}
			catch(err) {}
		}
	}
	return false;
}

,getPlugin:function()
{
	deployJava.refresh();
	var ret=document.getElementById('deployJavaPlugin');
	return ret;
}

,compareVersionToPattern:function(version,patternArray,familyMatch)
{
	var regex="^(\\d+)(?:\\.(\\d+)(?:\\.(\\d+)(?:_(\\d+))?)?)?$";
	var matchData=version.match(regex);
	if(matchData!=null)
		{
		var index=0;
		var result=new Array();
		for(var i=1;i<matchData.length;++i)
		{
			if((typeof matchData[i]=='string')&&(matchData[i]!=''))
			{
				result[index]=matchData[i];
				index++;
			}
		}
		var l=Math.min(result.length,patternArray.length);
		if(familyMatch)
		{
			for(var i=0;i<l;++i)
			{
				if(result[i]!=patternArray[i]) return false;
			}
			return true;
		}
		else
		{
			for(var i=0;i<l;++i)
			{
				if(result[i]<patternArray[i])
				{
					return false;
				}
				else if(result[i]>patternArray[i])
				{
					return true;
				}
			}
			return true;
		}
	}
	else
	{
		return false;
	}
}
				
,getBrowser:function()
{
	var browser=navigator.userAgent.toLowerCase();
	if(deployJava.debug)
	{
		alert('userAgent -> '+browser);
	}
	if((navigator.vendor)&&(navigator.vendor.toLowerCase().indexOf('apple')!=-1)&&(browser.indexOf('safari')!=-1))
	{
		if(deployJava.debug)
		{
			alert('We claim to have detected "Safari".');
		}
		return'Safari';
	}
	else if(browser.indexOf('msie')!=-1)
	{
		if(deployJava.debug)
		{
			alert('We claim to have detected "IE".');
		}
		return'MSIE';
	}
	else if((browser.indexOf('mozilla')!=-1)||(browser.indexOf('firefox')!=-1))
	{
		if(deployJava.debug)
		{
			alert('We claim to have detected a Netscape family browser.');
		}
		return'Netscape Family';
	}
	else
	{
		if(deployJava.debug)
		{
			alert('We claim to have failed to detect a browser.');
		}
		return'?';
	}
}

,testUsingActiveX:function(version)
{
	var objectName='JavaWebStart.isInstalled.'+version+'.0';
	if(!ActiveXObject)
	{
		if(deployJava.debug)
		{
			alert('Browser claims to be IE, but no ActiveXObject object?');
		}
		return false;
	}
	try
	{
		return(new ActiveXObject(objectName)!=null);
	}
	catch(exception)
	{
		return false;
	}
}

,testForMSVM:function()
{
	var clsid='{08B0E5C0-4FCB-11CF-AAA5-00401C608500}';
	if(typeof oClientCaps!='undefined')
	{
		var v=oClientCaps.getComponentVersion(clsid,"ComponentID");
		if((v=='')||(v=='5,0,5000,0'))
		{
			return false;
		}
		else
		{
			return true;
		}
	}
	else
	{
		return false;
	}
}

,testUsingMimeTypes:function(version)
{
	if(!navigator.mimeTypes)
	{
		if(deployJava.debug)
		{
			alert('Browser claims to be Netscape family, but no mimeTypes[] array?');
		}
		return false;
	}
	for(var i=0;i<navigator.mimeTypes.length;++i)
	{
		s=navigator.mimeTypes[i].type;
		var m=s.match(/^application\/x-java-applet\x3Bversion=(1\.8|1\.7|1\.6|1\.5|1\.4\.2)$/);
		if(m!=null)
		{
			if(deployJava.compareVersions(m[1],version))
			{
				return true;
			}
		}
	}
	return false;
}

,testUsingPluginsArray:function(version)
{
	if((!navigator.plugins)||(!navigator.plugins.length))
	{
		return false;
	}
	var platform=navigator.platform.toLowerCase();
	for(var i=0;i<navigator.plugins.length;++i)
	{
		s=navigator.plugins[i].description;
		if(s.search(/^Java Switchable Plug-in (Cocoa)/)!=-1)
		{
			if(deployJava.compareVersions("1.5.0",version))
			{
				return true;
			}
		}
		else if(s.search(/^Java/)!=-1)
		{
			if(platform.indexOf('win')!=-1)
			{
				if(deployJava.compareVersions("1.5.0",version)||deployJava.compareVersions("1.6.0",version))
				{
					return true;
				}
			}
		}
	}
	if(deployJava.compareVersions("1.5.0",version))
	{
		return true;
	}
	return false;
}
			
,IEInstall:function()
{
	location.href=deployJava.getJavaURL+((deployJava.returnPage!=null)?('&returnPage='+
		deployJava.returnPage):'')+((deployJava.locale!=null)?('&locale='+deployJava.locale):'')+
		((deployJava.brand!=null)?('&brand='+deployJava.brand):'')+
		((deployJava.installType!=null)?('&type='+deployJava.installType):'');
	return false;
}
	
,done:function(name,result)
{
}

,FFInstall:function()
{
	location.href=deployJava.getJavaURL+
		((deployJava.returnPage!=null)?('&returnPage='+deployJava.returnPage):'')+
		((deployJava.locale!=null)?('&locale='+deployJava.locale):'')+
		((deployJava.brand!=null)?('&brand='+deployJava.brand):'')+
		((deployJava.installType!=null)?('&type='+deployJava.installType):'');
	return false;
}

,compareVersions:function(installed,required)
{
	var a=installed.split('.');
	var b=required.split('.');
	for(var i=0;i<a.length;++i)
	{
		a[i]=Number(a[i]);
	}
	for(var i=0;i<b.length;++i)
	{
		b[i]=Number(b[i]);
	}
	if(a.length==2)
	{
		a[2]=0;
	}
	if(a[0]>b[0]) return true;
	if(a[0]<b[0]) return false;
	if(a[1]>b[1]) return true;
	if(a[1]<b[1]) return false;
	if(a[2]>b[2]) return true;
	if(a[2]<b[2]) return false;
	return true;
}
		
,enableAlerts:function()
{
	deployJava.debug=true;
}

,poll:function()
{
	deployJava.refresh();
	var postInstallJREList=deployJava.getJREs();
	if((deployJava.preInstallJREList.length==0)&&(postInstallJREList.length!=0))
	{
		clearInterval(deployJava.myInterval);
		if(deployJava.returnPage!=null)
		{
			location.href=deployJava.returnPage;
		}
	}
	if((deployJava.preInstallJREList.length!=0)&&(postInstallJREList.length!=0)
		&&(deployJava.preInstallJREList[0]!=postInstallJREList[0]))
	{
		clearInterval(deployJava.myInterval);
		if(deployJava.returnPage!=null)
		{
			location.href=deployJava.returnPage;
		}
	}
}

,writePluginTag:function()
{
	var browser=deployJava.getBrowser();
	if(browser=='MSIE')
	{
		document.write('<'+'object classid="clsid:CAFEEFAC-DEC7-0000-0000-ABCDEFFEDCBA" '+
		'id="deployJavaPlugin" width="0" height="0">'+'<'+'/'+'object'+'>');
	}
	else if(browser=='Netscape Family')
	{
		deployJava.writeEmbedTag();
	}
}

,refresh:function()
{
	navigator.plugins.refresh(false);
	var browser=deployJava.getBrowser();
	if(browser=='Netscape Family')
	{
		var plugin=document.getElementById('deployJavaPlugin');
		if(plugin==null)
		{
			deployJava.writeEmbedTag();
		}
	}
}

,writeEmbedTag:function()
{
	var written=false;
	if(navigator.mimeTypes!=null)
	{
		for(var i=0;i<navigator.mimeTypes.length;i++)
		{
			if(navigator.mimeTypes[i].type==deployJava.mimeType)
			{
				if(navigator.mimeTypes[i].enabledPlugin)
				{
					document.write('<'+'embed id="deployJavaPlugin" type="'+
					deployJava.mimeType+'" hidden="true" />');
					written=true;
				}
			}
		}
		if(!written)
		{
			for(var i=0;i<navigator.mimeTypes.length;i++)
			{
				if(navigator.mimeTypes[i].type==deployJava.oldMimeType)
				{
					if(navigator.mimeTypes[i].enabledPlugin)
					{
						document.write('<'+'embed id="deployJavaPlugin" type="'+
						deployJava.oldMimeType+'" hidden="true" />');
					}
				}
			}
		}
	}
}

,do_initialize:function()
{
	deployJava.writePluginTag();
	if(deployJava.locale==null)
	{
		var loc=null;
		if(loc==null)
		{
			try
			{
				loc=navigator.userLanguage;
			}
			catch(err) {}
			if(loc==null)
			{
				try
				{
					loc=navigator.systemLanguage;
				}
				catch(err) {}
				if(loc==null)
				{
					try
					{
						loc=navigator.language;
					}
					catch(err) {}
					if(loc!=null)
					{
						loc.replace("-","_")
						deployJava.locale=loc;
					}
				}
			}
		}
	}
}
};

deployJava.do_initialize();

var javaversion = "1.5.0_22";
var installfile = "jre-1_5_0_22-windows-i586-p.exe";

function createObject(idname, objectjar, objectclass, objectname, objectwidth, objectheight, objectalign, objectpara, objectcodebase)
{
	var divEl = document.getElementById(idname);
	var objecttag;

	if(deployJava.versionCheck(javaversion))
	{
		objecttag = '<OBJECT classid="clsid:CAFEEFAC-0015-0000-FFFF-ABCDEFFEDCBA" name="' + objectname + '" width="' + objectwidth + '" height="' + objectheight + '" align="' + objectalign + '">'+
					'<PARAM name="type" value="application/x-java-applet;jpi-version=1.5">'+
					'<PARAM name="codebase" value="' + objectcodebase + '">'+
					'<PARAM name="code" value="' + objectclass + '">'+
					'<PARAM name="archive" value="' + objectjar + '">'+
					'<PARAM name="mayscript" value="true">'+
					objectpara+
					'</OBJECT>';
	}
	else
	{
		var askjre = getCookie("USEALTERNATEJRE");
		var installcosmosjre = false;

		if(askjre == null)
		{
			askjre = "false";
		}

		if(askjre == "false")
		{ // Hinweis das nicht die optimierte Java-Version gefunden wurde und Frage ob diese installiert werden soll
			installcosmosjre = confirm(getLanguageText(ID_SYSTEM_CHCEK_INSTALL_JAVA));
		}

		if (installcosmosjre == true)
  	{ // Aufruf der Installation
  		document.location.href="tools/"+installfile;
  	}
  	else
  	{
  		setCookie("USEALTERNATEJRE","true");

			var latestJavaVersion = deployJava.getLatestJRE();

			if(latestJavaVersion > '1.5')
			{
				objecttag = '<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" name="' + objectname + '" width="' + objectwidth + '" height="' + objectheight + '" align="' + objectalign + '">'+
					'<PARAM name="codebase" value="' + objectcodebase + '">'+
					'<PARAM name="code" value="' + objectclass + '">'+
					'<PARAM name="archive" value="' + objectjar + '">'+
					'<PARAM name="mayscript" value="true">'+
					'<param name="java_version" value="1.5+">'+
					objectpara+
					'</OBJECT>';
			}
			else
			{ // Hinweis das keine kompatible Java-Version gefunden wurde
				alert(getLanguageText(ID_JAVA_VERSION_CHECK_NOT_FOUND));
			}
		}
	}
	divEl.outerHTML = objecttag;
}

