var deployJava={debug:null,
				firefoxJavaVersion: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',
				browserName:null,
				browserName2:null,
				getJREs:function(){
					var list=new Array();
					if(deployJava.isPluginInstalled()){
						var plugin=deployJava.getPlugin();
						var VMs=plugin.jvms;
						for(var i=0;i<VMs.getLength();i++){
							list[i]=VMs.get(i).version;
						}
					}else{
						var browser=deployJava.getBrowser();
						if(browser=='MSIE'){
							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'){
							deployJava.getJPIVersionUsingMimeType();
							if(deployJava.firefoxJavaVersion!=null){
								list[0]=deployJava.firefoxJavaVersion;
							}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(deployJava.browserName2=='Safari'){
								if(deployJava.testUsingPluginsArray('1.7.0')){
									list[0]='1.7.0';
								}else if(deployJava.testUsingPluginsArray('1.6')){
									list[0]='1.6.0';
								}else if(deployJava.testUsingPluginsArray('1.5')){
									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!='?')&&('Safari'!=deployJava.browserName2)){
							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 ';
					var codeAttribute=false;
					for(var attribute in attributes){
						s+=(' '+attribute+'="'+attributes[attribute]+'"');
						if(attribute=='code'){
							codeAttribute=true;
						}
					}
					if(!codeAttribute){
						s+=(' code="dummy"');
					}
					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=='?')||('Safari'==deployJava.browserName2)){
						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;
				},
				getJPIVersionUsingMimeType:function(){
					for(var i=0;i<navigator.mimeTypes.length;++i){
						var s=navigator.mimeTypes[i].type;
						var m=s.match(/^application\/x-java-applet;jpi-version=(.*)$/);
						if(m!=null){
							deployJava.firefoxJavaVersion=m[1];
							break;
						}
					}
				},
				launchWebStartApplication:function(jnlp){
					var uaString=navigator.userAgent.toLowerCase();
					deployJava.getJPIVersionUsingMimeType();
					if(uaString.indexOf("windows",0)!=-1){
						if(deployJava.isWebStartInstalled('1.6.0_18')==false){
							if(deployJava.isPluginInstalled()){
								if(deployJava.installLatestJRE()==false){
									alert("Java install failed: cannot use launchWebStartApplication function");
									return;
								}
							}else{
								alert("Please visit java.com to install Java and try again after");
								return;
							}
						}
					}else{
						if(deployJava.firefoxJavaVersion==null){
							alert("Please visit java.com to install Java and try again after");
							return;
						}
						if(deployJava.firefoxJavaVersion<"1.6.0_18"){
							alert("Please visit java.com to install Java and try again after");
							return;
						}
					}
					var jnlpDocbase=null;
					if(document.documentURI){jnlpDocbase=document.documentURI;}
					if(jnlpDocbase==null){jnlpDocbase=document.URL;}
					var browser=deployJava.getBrowser();
					if(browser=='MSIE'){
						document.write('<'+'object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" '+'width="0" height="0">'+'<'+'PARAM name="launchjnlp" value="'+jnlp+'"'+'>'+'<'+'PARAM name="docbase" value="'+jnlpDocbase+'"'+'>'+'<'+'/'+'object'+'>');
					}else if(browser=='Netscape Family'){
						document.write('<'+'embed type="application/x-java-applet;jpi-version='+ deployJava.firefoxJavaVersion+'" '+'width="0" height="0" '+'launchjnlp="'+jnlp+'"'+'docbase="'+jnlpDocbase+'"'+' />');
					}
					document.location=jnlpDocbase;
				},
				createWebStartLaunchButtonEx:function(jnlp,minimumVersion){
					if(deployJava.returnPage==null){
						deployJava.returnPage=jnlp;
					}
					var url='javascript:deployJava.launchWebStartApplication(\''+jnlp+'\');';
					document.write('<'+'a href="'+url+'" onMouseOver="window.status=\'\'; '+'return true;"><'+'img '+'src="'+deployJava.launchButtonPNG+'" '+'border="0" /><'+'/'+'a'+'>');
				},
				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;
				},
				allowPlugin:function(){
					deployJava.getBrowser();
					var ret=('Chrome'!=deployJava.browserName2&&'Safari'!=deployJava.browserName2&&'Opera'!=deployJava.browserName2);
					return ret;
				},
				getPlugin:function(){
					deployJava.refresh();
					var ret=null;
					if(deployJava.allowPlugin()){
						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(){
					if(deployJava.browserName==null){
						var browser=navigator.userAgent.toLowerCase();
						if(deployJava.debug){
							alert('userAgent -> '+browser);
						}
						if(browser.indexOf('msie')!=-1){
							deployJava.browserName='MSIE';
							deployJava.browserName2='MSIE';
						}else if(browser.indexOf('firefox')!=-1){
							deployJava.browserName='Netscape Family';
							deployJava.browserName2='Firefox';
						}else if(browser.indexOf('chrome')!=-1){
							deployJava.browserName='Netscape Family';
							deployJava.browserName2='Chrome';
						}else if(browser.indexOf('safari')!=-1){
							deployJava.browserName='Netscape Family';
							deployJava.browserName2='Safari';
						}else if(browser.indexOf('mozilla')!=-1){
							deployJava.browserName='Netscape Family';
							deployJava.browserName2='Other';
						}else if(browser.indexOf('opera')!=-1){
							deployJava.browserName='Netscape Family';
							deployJava.browserName2='Opera';
						}else{
							deployJava.browserName='?';
							deployJava.browserName2='unknown';
						}
						if(deployJava.debug){
							alert('Detected browser name:'+deployJava.browserName+', '+deployJava.browserName2);
						}
					}
					return deployJava.browserName;
				},
				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.browserName=null;
					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.allowPlugin()){
						deployJava.writeEmbedTag();
					}
				},
				refresh:function(){
					navigator.plugins.refresh(false);
					var browser=deployJava.getBrowser();
					if(browser=='Netscape Family'&&deployJava.allowPlugin()){
						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();


