PageSourceSearch

https://www.virtualczech.cz/fldetectvr.js

js virtualczech.cz collected 2026-10-02 11:16:58 UTC 30,043 bytes, 966 lines download raw bytes

1//
2//  DevalVR + QuickTime + PTviewer + Flash + Spi-v  Javascript workaround
3//	Author: fiero http://www.devalvr.com
4//  Version: 1.2.4
5//
6//	To embed a panorama just include these lines in your HTML file (change filenames):
7//
8//	<SCRIPT type="text/javascript" src="detectvr.js"></SCRIPT>
9//	<SCRIPT type="text/javascript">
10//		writecode("fileForQT.mov","fileForDevalVR.mov","fileForJava.jpg","fileForFlash.swf","fileForSPIV.jpg","100%","94%");
11//	</SCRIPT>
12//
13//
14//	NOTE: To use Spi-v viewer, place "SPi-V.dcr" file in same folder that HTML file, 
15//        you can find it here: http://www.fieldofview.com
16//	
17// 	IMPORTANT: Use this file at your own risk
18//
19
20var minQTVersion = "5.0.0";			// minimal required version checked for QuickTime
21var minDevalVRVersion = "0,5,0,0";  // minimal required version checked for DevalVR
22var minFlashVersion = "9.0.0";		// minimal required version checked for Flash
23var minShockwaveVersion = "10.1";	// minimal required version checked for Shockwave
24
25var pluginPriority_QuickTime=4;		// Set the order of Priority to use in each plugin 
26var pluginPriority_DevalVR=2;		// when Autodetect option is selected. Change 
27var pluginPriority_Flash=1;			// the number or priority for each plugin
28var pluginPriority_Java=3;
29var pluginPriority_Spiv=5;
30var pluginPriority_PangeaVR=6;
31
32var enableSizeLimits=0;				// 0: disable  1: enable  (size limits for QT, DevalVR and Spi-v)
33var enableSizeLimitsJava=0;			// 0: disable  1: enable  (size limits for Java)
34var enableSizeLimitsFlash=0;		// 0: disable  1: enable  (size limits for Flash)
35var maxViewerWidth="1280";
36var maxViewerHeight="1024";
37var maxViewerWidthJava="900";
38var maxViewerHeightJava="700";
39var maxViewerWidthFlash="900";
40var maxViewerHeightFlash="700";
41
42var enableSizeRatio=0;				// 0: disable size ratio    1: enable size ratio
43var sizeRatio=6/3;					// maximum aspect ratio, horizontal/vertical proportions
44
45var enableLineUnderPanorama=0;		//Enable an adviser line under panorama
46var writeLineUnderQuickTime="";
47var writeLineUnderDevalVR="";
48var writeLineUnderJava="";
49var writeLineUnderFlash="";
50var writeLineUnderSpiV="";
51var writeLineUnderPangeaVR="";
52
53var installfont="<font>";
54var selectedlinkcolor="#333333";
55var selectedlinkbgcolor="#AAAAFF";
56
57var usePurePlayer=1;						//0: PTViewer is used as Java player  1: PurePlayer is used (write correct names below)
58var archivePurePlayer='PurePlayerPro.jar';		//Copy this file in the same folder
59var codePurePlayer='PurePlayerPro';
60
61var detectvr_replacepage=0;		// 1 to use window.location.replace() function to open a new page for each viewer (if 1 then writecode parameters must be the name of HTML pages)
62
63/////////////////////////////////////////////////////////////////////////////////////////////////
64
65var isOpera=(navigator.userAgent.indexOf('Opera')!=-1);
66var isIE=((navigator.appVersion.indexOf("MSIE") != -1) && !isOpera);
67var isDOM=document.getElementById?1:0;
68var isNS4=navigator.appName=='Netscape'&&!isDOM?1:0;
69var isIE4=isIE&&!isDOM?1:0;
70var isWindows=(navigator.platform.indexOf('Win')!=-1);
71var isMac=(navigator.platform.indexOf('Mac')!=-1 || navigator.platform.indexOf('PowerPC')!=-1);
72var favoriteViewer=getCookie("panorama_viewer");
73if(!favoriteViewer) favoriteViewer="DETECT";  //DEVALVR , QT, FLASH, JAVA, SPIV, PANGEAVR, or DETECT
74var detectableWithVB = false;
75var adviselineunderpano="";
76var orgsizepluginx=new Array();
77var orgsizepluginy=new Array();
78var numberofplugins=0;
79var sizepluginx;
80var sizepluginy;
81var writePluginVR=0;
82var writeInstallPluginVR=0;
83var reloadpagewhenchangeviewer=0;
84var auxparameters=new Array();
85auxparameters['devalvr']=new Array();
86auxparameters['qt']=new Array();
87auxparameters['java']=new Array();
88auxparameters['flash']=new Array();
89auxparameters['spiv']=new Array();
90
91
92//Use 'viewerparameters' function to define different parameters for each viewer
93//Use "devalvr", "qt", "java", "flash", "spiv" or "pangeavr" in first parameter
94//for example: viewerparameters("devalvr","resize","0","autoplay","3");
95
96function viewerparameters(viewer)
97{
98	auxparameters[viewer]=new Array();
99	for(var i=1;i<arguments.length;i++) 
100	{
101		auxparameters[viewer][i-1]=arguments[i];
102	}
103}
104
105function writecode(qtfile, devalvrfile, javafile, flashfile, spivfile, sizex, sizey)
106{
107	writecode2(qtfile, qtfile, devalvrfile, javafile, flashfile, spivfile, sizex, sizey);
108}
109
110function writecode2(qtfile, pangeafile, devalvrfile, javafile, flashfile, spivfile, sizex, sizey)
111{
112	var priority=new Array();
113	var existfile=new Array();
114	writePluginVR=0;
115	writeInstallPluginVR=0;
116	
117	existfile[1]=(devalvrfile!=null && devalvrfile!="");
118	existfile[2]=(qtfile!=null && qtfile!="");
119	existfile[3]=(flashfile!=null && flashfile!="");
120	existfile[4]=(javafile!=null && javafile!="");
121	existfile[5]=(spivfile!=null && spivfile!="");
122	existfile[6]=(pangeafile!=null && pangeafile!="");
123	
124	if((favoriteViewer=="DEVALVR" && (!existfile[1] || !isWindows))
125	|| (favoriteViewer=="QT" && !existfile[2])
126	|| (favoriteViewer=="JAVA" && !existfile[4]) 
127	|| (favoriteViewer=="FLASH" && !existfile[3]) 
128	|| (favoriteViewer=="SPIV" && !existfile[5])
129	|| (favoriteViewer=="PANGEAVR" && !existfile[6]))
130		favoriteViewer="DETECT";
131	
132	priority[2]=pluginPriority_DevalVR;
133	priority[3]=pluginPriority_QuickTime;
134	priority[1]=pluginPriority_Flash;
135	priority[4]=pluginPriority_Java;
136	priority[5]=pluginPriority_Spiv;
137	priority[6]=pluginPriority_PangeaVR;
138	
139	if(favoriteViewer=="DETECT")
140	{
141		for(order=1;order<=6 && writePluginVR==0;order++)
142		{
143			for(n=1;n<=6;n++)
144			{
145				if(priority[n]==order && existfile[n] && IsPluginInstalled(n))
146				{
147					writePluginVR=n;
148					break;
149				}
150			}
151		}
152	}
153	else if(favoriteViewer=="DEVALVR" && isWindows)
154	{
155		if(IsPluginInstalled(1)) writePluginVR=1;
156		else writeInstallPluginVR=1;
157	}
158	else if(favoriteViewer=="QT" && (isWindows || isMac))
159	{
160		if(IsPluginInstalled(2)) writePluginVR=2;
161		else writeInstallPluginVR=2;
162	}
163	else if(favoriteViewer=="FLASH")
164	{
165		if(IsPluginInstalled(3)) writePluginVR=3;
166		else writeInstallPluginVR=3;
167	}
168	else if(favoriteViewer=="JAVA") 
169	{
170		if(IsPluginInstalled(4)) writePluginVR=4;
171		else writeInstallPluginVR=4;
172	}
173	else if(favoriteViewer=="SPIV" && (isWindows || isMac)) 
174	{
175		if(IsPluginInstalled(5)) writePluginVR=5;
176		else writeInstallPluginVR=5;
177	}
178	else if(favoriteViewer=="PANGEAVR" && isMac) 
179	{
180		if(IsPluginInstalled(6)) writePluginVR=6;
181		else writeInstallPluginVR=6;
182	}
183	
184	if(writeInstallPluginVR==0 && writePluginVR==0)
185	{
186		if(isWindows) writeInstallPluginVR=1;	//Install DevalVR if there is not any plugin (fastest installation)
187		else if(isMac) writeInstallPluginVR=2;	//Install QT always in Mac
188		else writeInstallPluginVR=4;			//Install Java always in Linux
189	} 
190	
191	adviselineunderpano="";
192	if(enableLineUnderPanorama)
193	{
194		if(writePluginVR==1 && writeLineUnderDevalVR!="") adviselineunderpano=writeLineUnderDevalVR;
195		else if(writePluginVR==2 && writeLineUnderQuickTime!="") adviselineunderpano=writeLineUnderQuickTime;
196		else if(writePluginVR==3 && writeLineUnderFlash!="") adviselineunderpano=writeLineUnderFlash;
197		else if(writePluginVR==4 && writeLineUnderJava!="") adviselineunderpano=writeLineUnderJava;
198		else if(writePluginVR==5 && writeLineUnderSpiV!="") adviselineunderpano=writeLineUnderSpiV;
199		else if(writePluginVR==6 && writeLineUnderPangeaVR!="") adviselineunderpano=writeLineUnderPangeaVR;
200	}
201
202	if(sizex=="") sizex="100%";
203	if(sizey=="") sizey="94%";
204
205	orgsizepluginx[numberofplugins]=sizex;
206	orgsizepluginy[numberofplugins]=sizey;
207	
208	CalcLimits(sizex,sizey);
209	sizex=sizepluginx;
210	sizey=sizepluginy;
211
212	idpano='PANORAMAID';
213	if(numberofplugins>0) idpano+=numberofplugins;
214	numberofplugins++;
215	
216	if(writePluginVR==1)
217	{
218		if(detectvr_replacepage) window.location.replace(devalvrfile); 
219		else detecvr_embedPlugin('devalvr',devalvrfile,sizex,sizey,idpano,'5D2CF9D0-113A-476B-986F-288B54571614','http://www.devalvr.com/instalacion/plugin/devalocx.cab#ver
219sion='+minDevalVRVersion,'application/x-devalvrx','http://www.devalvr.com/installation/','filter','0');
220	}
221	else if(writePluginVR==2)
222	{
223		if(detectvr_replacepage) window.location.replace(qtfile); 
224		else detecvr_embedPlugin('qt',qtfile,sizex,sizey,idpano,'02BF25D5-8C17-4B23-BC80-D3488ABDDC6B','http://www.apple.com/qtactivex/qtplugin.cab','video/quicktime','http://www.apple.com/quicktime/download/','scale','tofit','autostart','true','kioskmode','true','controller', 'true', 'enablejavascript', 'true');
225	}
226	else if(writePluginVR==3)
227	{
228		if(detectvr_replacepage) window.location.replace(flashfile); 
229		else detecvr_embedPlugin('flash',flashfile,sizex,sizey,idpano,'D27CDB6E-AE6D-11cf-96B8-444553540000','http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab','application/x-shockwave-flash','http://www.macromedia.com/go/getflashplayer','bgcolor', '#f0f0f0', 'play', 'true', 'cache','true', 'autoplay','true','allowScriptAccess','always','allowFullScreen', 'true');
230	}
231	else if(writePluginVR==4)
232	{
233		if(detectvr_replacepage) window.location.replace(javafile); 
234		else 
235		{
236			if(usePurePlayer==0) detecvr_embedPlugin('java','',sizex,sizey,idpano,'','','','','code','ptviewer.class','archive','ptviewer.jar','file',javafile,'fov','120','cursor','MOVE','showToolbar','true','imgLoadFeedback','false');
237			else detecvr_embedPlugin('java','',sizex,sizey,idpano,'','','','','code',codePurePlayer,'archive',archivePurePlayer,'panorama',javafile,'optimizememory','true');
238		}
239	}
240	else if(writePluginVR==5)
241	{
242		if(detectvr_replacepage) window.location.replace(spivfile); 
243		else detecvr_embedPlugin('spiv','SPi-V.dcr',sizex,sizey,idpano,'166B1BCA-3F9C-11CF-8075-444553540000','http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version='+minShockwaveVersion,'application/x-director','http://www.macromedia.com/shockwave/download/','swURL',spivfile,'swStretchStyle','stage','swRemote','swContextMenu=\'FALSE\'','progress','true','logo','false');
244	}
245	else if(writePluginVR==6)
246	{
247		if(detectvr_replacepage) window.location.replace(pangeafile); 
248		else detecvr_embedPlugin('pangeavr',pangeafile,sizex,sizey,idpano,'','','graphics/pangeavr2','http://www.pangeasoft.net/pano/plugin/downloads.html','maxtilt','0','mintilt','0','maxfov','0','minfov','0');
249	}
250	else if(writeInstallPluginVR==1)
251	{
252		var str='<div align=center><table border="0" cellpadding="0" cellspacing="0" style="WIDTH: ' + sizex + '; HEIGHT: ' + sizey + '" width="'+sizex+'"  height="'+sizey+'"><tr><td align="center" valign="middle">';
253		str+='Je vyžadován FlashPlayer plugin / Required FlasPlayer plugin';
254		str+='<br /><br /><a href="http://www.adobe.com/products/flashplayer/">instalujte zde / install here</a>';
255		str+='</td></tr></table></div>';
256		
257		document.writeln(str);
258		setTimeout("CheckPluginInstallation()",10000);
259	}
260	else
261	{
262		var pluginname,pluginurl;
263		
264		if(writeInstallPluginVR==2) 
265		{
266			pluginname="QuickTime Player"
267			pluginurl="http://www.apple.com/quicktime/download/"
268		}
269		else if(writeInstallPluginVR==3) 
270		{
271			pluginname="Adobe Flash Player Version " + minFlashVersion + " or higher."
272			pluginurl="http://www.adobe.com/go/getflash/"
273		}
274		else if(writeInstallPluginVR==4) 
275		{
276			pluginname="Java Software"
277			pluginurl="http://java.com/en/download/"
278		}
279		else if(writeInstallPluginVR==5) 
280		{
281			pluginname="Shockwave Player"
282			pluginurl="http://www.macromedia.com/shockwave/download"
283		}
284		else if(writeInstallPluginVR==6) 
285		{
286			pluginname="PangeaVR Player"
287			pluginurl="http://www.pangeasoft.net/pano/plugin/downloads.html"
288		}
289		
290		var str='<div align=center><table border="0" cellpadding="0" cellspacing="0" style="WIDTH: ' + sizex + '; HEIGHT: ' + sizey + '" width="'+sizex+'"  height="'+sizey+'"><tr><td align="center" valign="middle">';
291		str+=installfont+' Je vyžadován '+ pluginname +'.';
292		str+='<br /><br /><a href="'+ pluginurl +'" target="_blank">'+ pluginname +' instalujte zde</a>';
293		str+='</font></td></tr></table></div>';
294		document.writeln(str);
295	}
296
297	if(writeInstallPluginVR==0)
298	{
299		window.onresize=OnResizeWindow;
300		if(isWindows && isIE) 
301			setTimeout("OnResizeWindow()",2000);
302	}
303}
304
305function ShowViewerSelection(options)
306{
307	var optionviewer=new Array("DETECT","DEVALVR","QT","FLASH","JAVA","SPIV","PANGEAVR");
308	var textviewer=new Array("Automatický výběr","DevalVR","QuickTime","Flash","Java","Spi-V","PangeaVR");
309	var osviewer=new Array(0,1,0,0,0,0,2);	//0:All  1:Windows  2:Mac
310
311	options=options.toUpperCase();
312	reloadpagewhenchangeviewer=(options.indexOf("RELOAD")!=-1);
313	var vertical='';
314	var str='';
315
316	var combobox=(options.indexOf("COMBOBOX")!=-1);
317	var links=(options.indexOf("LINKS")!=-1);
318
319	if(options.indexOf("HORIZONTAL")==-1)
320		vertical='<br />';
321	
322	viewer=getCookie("panorama_viewer");
323	if(!viewer) viewer="DETECT";
324
325	if(combobox)
326	{
327		str+='<select id="comboboxViewer" style="WIDTH: 160px" width=160 name="comboboxViewer" onchange="favoriteViewerChangedCombo()">';
328	}
329	for(n=0;n<7;n++)
330	{
331		if(options.indexOf(optionviewer[n])!=-1 && (osviewer[n]==0 || (osviewer[n]==1 && isWindows) || (osviewer[n]==2 && isMac)))
332		{
333			if(combobox) str+='<option value="'+optionviewer[n]+'" '+(viewer==optionviewer[n]?'selected="selected"':'')+'> '+textviewer[n]+'</option>';
334			else if(links) str+='<a hRef="javascript:changeFavoriteViewer(\''+optionviewer[n]+'\');">
334'+(viewer==optionviewer[n]?('<font style="BACKGROUND-COLOR: '+selectedlinkbgcolor+'" color='+selectedlinkcolor+'>&nbsp;'):'')+textviewer[n]+(viewer==optionviewer[n]?'&nbsp;</font>':'')+'&nbsp;</a> '+vertical;
335			else str+='<input id="radioViewer" value='+n+' type=radio name="radioViewer" OnClick="javascript:changeFavoriteViewer(\''+optionviewer[n]+'\');" '+(viewer==optionviewer[n]?'checked="checked"':'')+' />'+textviewer[n]+' '+vertical;
336		}
337	}
338	if(combobox)
339	{
340		str+='</select><br />';
341	}
342	else if(vertical=='') str+='<br />';
343
344	document.writeln('<font id="IDVIEWEROPTIONS">&nbsp;</font>');
345	ref=getRef("IDVIEWEROPTIONS");
346	if(ref)	ref.innerHTML=str;
347}
348
349function favoriteViewerChangedCombo()
350{
351	ref=getRef("comboboxViewer");
352	if(ref) changeFavoriteViewer(ref.value);
353}
354
355function changeFavoriteViewer(viewer)
356{
357	if(favoriteViewer!=viewer)
358	{
359		setCookie("panorama_viewer",viewer);
360		if(reloadpagewhenchangeviewer)
361			window.location.reload();
362	}
363}
364
365//Old version, it exist for compatibility with old pages
366function writevrcode(movfile,javafile,flashfile,spivfile,width,height)
367{
368	var sizex=0,sizey=0;
369	
370	//Compatibility code, old versions of writevrcode only was 
371	//qtfile and javafile parameters: writevrcode(movfile,javafile,width,height)
372	
373	var paramsize=2;
374	for(var n=2;n<4;n++)
375	{
376		if(arguments[n]!=null)
377		{
378			var str=arguments[n].toString();
379			str.toLowerCase();
380			if(n==2)
381			{
382				if(str.indexOf(".swf")!=-1 || str=="") paramsize++;
383				else flashfile="";
384			}
385			else if(n==3)
386			{
387				if(str.indexOf(".spv")!=-1 || str.indexOf(".xml")!=-1 || str.indexOf(".jpg")!=-1 || str=="")
388				{
389					if(paramsize==2) paramsize++;
390					paramsize++;
391				}
392				else spivfile="";
393			}
394		}
395	}
396	if(arguments[paramsize]!=null)
397		sizex=arguments[paramsize];
398	if(arguments[paramsize+1]!=null)
399		sizey=arguments[paramsize+1];
400	
401	var qtfile=movfile;	
402	if(movfile.toLowerCase().indexOf(".mov")==-1)
403		qtfile="";
404
405	writecode(qtfile,movfile,javafile,flashfile,spivfile,sizex,sizey);
406}
407
408function CheckPluginInstallation()
409{
410	if(!isIE) navigator.plugins.refresh(false);
411
412	if(IsPluginInstalled(1))
413	{
414		reloadPage();
415	}
416	else setTimeout("CheckPluginInstallation()",3000);
417}
418
419function IsPluginInstalled(numplugin)
420{
421	var installed=0;
422	
423	if(isWindows && isIE)
424	{
425		if(detectableWithVB)
426		{
427			if(numplugin==1)
428			{
429				installed=detectActiveXControl('DevalVRXCtrl.DevalVRXCtrl.1');
430			}
431			else if(numplugin==2)
432			{
433				installed=detectQuickTimeActiveXControl();
434			}
435			else if(numplugin==3)
436			{
437				installed =DetectFlashVer(); 
438			}
439			else if(numplugin==4)
440			{
441				installed=detectActiveXControl('JavaPlugin') && navigator.javaEnabled();
442			}
443			else if(numplugin==5)
444			{
445				var strswversion=minShockwaveVersion.split(".");
446				var strshockwave="";
447				do{
448					strshockwave="SWCtl.SWCtl."+strswversion[0]+"."+strswversion[1]+".1";
449					strswversion[1]++;
450					if(strswversion[1]>9)
451					{
452						strswversion[1]=0;
453						strswversion[0]++;
454					}
455					installed=detectActiveXControl(strshockwave);
456				}while(installed==0 && strswversion[0]<20);
457			}
458		}
459	}
460	else
461	{
462		if(numplugin==1)
463		{
464			if(navigator.mimeTypes && navigator.mimeTypes["application/x-devalvrx"] && (isOpera || navigator.mimeTypes["application/x-devalvrx"].enabledPlugin))
465			{
466				var words = navigator.plugins["DevalVR 3D Plugin"].description.split(" ");
467				var version = words[3].split(",");
468				var min = minDevalVRVersion.split(",");
469				installed=checkMinVersion(version,min,4);
470			}	
471		}
472		else if(numplugin==2)
473		{
474			if(isMac) 
475			{
476				installed=1;
477			}
478			else
479			{
480				if(navigator.mimeTypes && navigator.mimeTypes["video/quicktime"] && (isOpera || navigator.mimeTypes["video/quicktime"].enabledPlugin))
481				{
482					for (var i = 0; i < navigator.plugins.length; i++)
483					{
484						if(navigator.plugins[i].name.indexOf("QuickTime Plug-in")!=-1)
485						{
486							var words = navigator.plugins[i].name.split(" ");
487							if (words.length<3) installed=1;
488							else
489							{
490								var version = words[2].split(".");
491								var min = minQTVersion.split(".");
492								installed=checkMinVersion(version,min,version.length);
493							}
494							break;
495						}
496					}
497				}
498			}
499		}
500		else if(numplugin==3)
501		{
502			installed = DetectFlashVer(); 
503		}
504		else if(numplugin==4)
505		{
506			if (isOpera || (navigator.mimeTypes && navigator.mimeTypes['application/x-java-applet'] && navigator.mimeTypes["application/x-java-applet"].enabledPlugin))
507			{
508				installed=navigator.javaEnabled();
509			}
510		}
511		else if(numplugin==5)
512		{
513			if(navigator.mimeTypes && navigator.mimeTypes["application/x-director"] && (isOpera || navigator.mimeTypes["application/x-director"].enabledPlugin))
514			{
515				var description=navigator.plugins["Shockwave for Director"].description;
516				var pos=description.indexOf("version");
517				if (pos!=-1)
518				{
519					var words=description.substr(pos+8);
520					var version = words.split(".");
521					var min = minShockwaveVersion.split(".");
522					installed=checkMinVersion(version,min,2);
523				}
524			}
525		}
526		else if(numplugin==6)
527		{
528			if(navigator.mimeTypes && navigator.mimeTypes["graphics/pangeavr2"] && (isOpera || navigator.mimeTypes["graphics/pangeavr2"].enabledPlugin))
529			{
530				installed=1;
531			}
532		}
533	}
534	return installed;
535}
536
537function OnResizeWindow()
538{
539	for(n=0;n<numberofplugins;n++)
540	{
541		CalcLimits(orgsizepluginx[n],orgsizepluginy[n]);
542
543		if(n==0) ref=getRef("PANORAMAID");
544		else ref=getRef("PANORAMAID"+n);
545		if(ref!=null)
546		{
547			if(isIE || isOpera)
548			{
549				ref.style.width=sizepluginx;
550				ref.style.height=sizepluginy;
551			}
552			else
553			{	
554				ref.width=sizepluginx;
555				ref.height=sizepluginy;
556			}
557		}
558	}
559}
560
561function checkMinVersion(version,min,num)
562{
563	var installed=0;
564	for (var i = 0; i < num; i++)
565	{
566		if(parseInt(version[i])>parseInt(min[i])) 
567		{
568			installed=1;
569			break;
570		}
571		else if(parseInt(version[i])<parseInt(min[i]))
572		{
573			break;
574		}
575		else if(parseInt(version[i])==parseInt(min[i]) && i==num-1)
576			installed=1;
577	}
578	return installed;
579}
580
581function CalcLimits(sizex, sizey)
582{
583	var sizew,sizeh,limits;
584	
585	if(writePluginVR==4)
586	{
587		maxx=maxViewerWidthJava;
588		maxy=maxViewerHeightJava;
589		limits=enableSizeLimitsJava;
590	}
591	else if(writePluginVR==3)
592	{
593		maxx=maxViewerWidthFlash;
594		maxy=maxViewerHeightFlash;
595		limits=enableSizeLimitsFlash;
596	}
597	else
598	{
599		maxx=maxViewerWidth;
600		maxy=maxViewerHeight;
601		limits=enableSizeLimits;
602	}
603
604	if(sizex<0) sizex=getPageWidth()+parseInt(sizex);
605	if(sizey<0) sizey=getPageHeight()+parseInt(sizey);
606	
607	if(limits || enableSizeRatio || adviselineunderpano!="")
608	{
609		sizex=sizex.toString();
610		sizey=sizey.toString();
611		pw=sizex.indexOf("px");
612		if(pw!=-1) sizex=sizex.substring(0,pw);
613		pw=sizey.indexOf("px");
614		if(pw!=-1) sizey=sizey.substring(0,pw);
615	
616		sizew=getPageWidth();
617		sizeh=getPageHeight();
618	
619		pw=sizex.indexOf("%");
620		if(pw!=-1)
621		{
622			percent=sizex.substring(0,pw);
623			sizex=(sizew*percent)/100;
624		}
625		pw=sizey.indexOf("%");
626		if(pw!=-1)
627		{
628			percent=sizey.substring(0,pw);
629			sizey=(sizeh*percent)/100;
630		}
631	
632		sizex=parseInt(sizex);
633		sizey=parseInt(sizey);
634
635		if(limits)
636		{
637			if(sizex>maxx) sizex=maxx;
638			if(sizey>maxy) sizey=maxy;
639		}	
640		if(enableSizeRatio)
641		{
642			x=sizey*sizeRatio;
643			if(x<sizex)
644			{
645				sizex=x;
646				if(limits && sizex>maxx) sizex=maxx;
647			}
648		}
649		if(adviselineunderpano!="")
650		{
651			sizey-=16;
652		}
653	}
654
655	sizepluginx=sizex;
656	sizepluginy=sizey;
657
658}
659
660function reloadPage()
661{
662	if(!isIE) navigator.plugins.refresh(true);
663	window.location.reload();
664}
665
666function getCookie(nombre)
667{
668	var dcookie=document.cookie;
669	var cname=nombre+"=";
670	var longitud=dcookie.length;
671	var inicio=0;
672
673	while(inicio<longitud)
674	{
675		var vbegin=inicio+cname.length;
676		if(dcookie.substring(inicio,vbegin)==cname)
677		{
678			var vend=dcookie.indexOf(";",vbegin);
679			if(vend==-1) vend=longitud;
680			return unescape(dcookie.substring(vbegin,vend));
681		}
682		inicio=dcookie.indexOf(" ",inicio)+1;
683		if(inicio==0) break;
684	}
685	return null;
686}
687
688function setCookie(name, value, expires)
689{
690	if(!expires)
691	{ 
692		expires=new Date();
693		expires.setTime(expires.getTime()+(24*3600*1000*365));
694	}
695	var str=name+"="+escape(value)+"; expires=" + expires.toGMTString();
696
697	document.cookie=str;
698}
699
700function getPageHeight()
701{
702	var ret,margintop=16,marginbottom=16;
703	
704	if(isIE) ret=document.body.clientHeight-document.body.topMargin-document.body.bottomMargin;
705	else 
706	{
707		if(document.body.attributes.topmargin)
708			margintop=document.body.attributes.topmargin.value;
709		if(document.body.attributes.bottommargin)
710			marginbottom=document.body.attributes.bottommargin.value;
711		ret=window.innerHeight-margintop-marginbottom;
712	}
713	return ret;
714}
715
716function getPageWidth()
717{
718	var ret,marginleft=16,marginright=16;
719	
720	if(isIE) ret=document.body.clientWidth-document.body.leftMargin-document.body.rightMargin;
721	else
722	{
723		if(document.body.attributes.leftmargin)
724			marginleft=document.body.attributes.leftmargin.value;
725		if(document.body.attributes.rightmargin)
726			marginright=document.body.attributes.rightmargin.value;
727		ret=window.innerWidth-marginleft-marginright;
728	}
729	return ret;
730}
731
732function IEGetSwfVer()
733{
734	flashVer=0;
735		
736	for(i=25;i>0 && flashVer==0;i--)
737	{
738		flashVer=VBGetSwfVer(i);
739	}
740	return flashVer;
741}
742
743// JavaScript helper required to detect Flash Player PlugIn version information
744function JSGetSwfVer()
745{
746	// NS/Opera version >= 3 check for Flash plugin in plugin array
747	if (navigator.plugins != null && navigator.plugins.length > 0) {
748		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
749			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
750      		var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
751			descArray = flashDescription.split(" ");
752			tempArrayMajor = descArray[2].split(".");
753			versionMajor = tempArrayMajor[0];
754			versionMinor = tempArrayMajor[1];
755			if ( descArray[3] != "" ) {
756				tempArrayMinor = descArray[3].split("r");
757			} else {
758				tempArrayMinor = descArray[4].split("r");
759			}
760      		versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
761            flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
762      	} else {
763			flashVer = -1;
764		}
765	}
766	// MSN/WebTV 2.6 supports Flash 4
767	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
768	// WebTV 2.5 supports Flash 3
769	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
770	// older WebTV supports Flash 2
771	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
772	// Can't detect in all other cases
773	else {
774		
775		flashVer = -1;
776	}
777	return flashVer;
778}
779 
780function DetectFlashVer() 
781{
782  	if (isIE && isWindows && !isOpera) {
783		versionStr = IEGetSwfVer();
784	} else {
785		versionStr = JSGetSwfVer();		
786	}
787	if (versionStr != 0 && versionStr != -1) 
788	{
789		if(isIE && isWindows && !isOpera) {
790			tempArray         = versionStr.split(" ");
791			tempString        = tempArray[1];
792			versionArray      = tempString .split(",");				
793		} 
794		else 
795		{
796			versionArray      = versionStr.split(".");
797		}
798		var min=minFlashVersion.split(".");
799		return checkMinVersion(versionArray,min,3);
800	}
801	else return false;
802}
803
804function writeParameters(parameters, auxparameters, IEparameters)
805{
806	str ='';
807	for(i=0;i<auxparameters.length;i+=2) 
808	{
809		if(IEparameters)
810			str+='  <param name="' + auxparameters[i] + '" value="' + auxparameters[i+1] + '" />';
811		else
812			str+=' ' + auxparameters[i] + '="' + auxparameters[i+1] + '"';
813	}
814	for(i=9;i<parameters.length;i+=2) 
815	{
816		var exists=0;
817		for(j=0;j<auxparameters.length;j+=2) {
818			if(auxparameters[j]==parameters[i]) exists=1;
819		}
820		if(exists==0)
821		{
822			if(IEparameters)
823				str+='  <param name="' + parameters[i] + '" value="' + parameters[i+1] + '" />';
824			else
825				str+=' '+ parameters[i] + '="' + parameters[i+1] + '"';
826		}
827	}
828	return str;
829}
830
831function detecvr_embedPlugin(plugin,sFile,sWidth,sHeight,id,classid,codebase,type,pluginspage)
832{
833	str='<div align=center>';
834	if(classid!='' || plugin=='java')
835	{
836		if(plugin=='java') str+='<applet ';
837		else str+='<object classid="clsid:'+classid+'" codebase="'+codebase+'"';
838		str+=' id="'+id+'" style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" width="' + sWidth + '" height="' + sHeight + '" >';
839	
840		if(plugin!='java') {
841			 str+='  <param name="src" value="' + sFile + '" />';
842		} else {
843			 str+='  <param name="gui" value="gui.ivu" />';
844		}
845			
846	
847		str+=writeParameters(arguments,auxparameters[plugin],1);
848	}
849	if(type!='')
850	{
851		str+='<embed id="'+id+'" name="'+id+'" width="' + sWidth + '" height="' + sHeight + '"';
852		str+='	pluginspage="'+pluginspage+'"';
853		str+='	type="'+type+'"';
854		str+='	src="' + sFile + '"';
855		str+=writeParameters(arguments,auxparameters[plugin],0);
856		str+='	/>';
857	}
858	if(classid!='') str+='</object>';
859	if(plugin=='java') str+='</applet>';
860	
861	if(adviselineunderpano!="")
862	{
863		if(sWidth!="100%") str+='<br />';
864		str+=adviselineunderpano;
865	}
866	str+='</div>';
867	document.writeln(str);
868}
869
870// Here we write out the VBScript block for MSIE Windows
871if (isWindows && isIE) 
872{
873    str='<script language="VBscript" type="text/vbscript">';
874	
875    str+='detectableWithVB = False \n';
876    str+='If ScriptEngineMajorVersion >= 2 then \n';
877    str+='  detectableWithVB = True \n';
878    str+='End If \n';
879
880    str+='Function detectActiveXControl(activeXControlName) \n';
881    str+='  on error resume next \n';
882    str+='  detectActiveXControl = False \n';
883    str+='  If detectableWithVB Then \n';
884    str+='		set pControl = CreateObject(activeXControlName) \n';
885    str+='		If (IsObject(pControl)) then \n';
886    str+='			detectActiveXControl = True \n';
887    str+='		End If \n';
888    str+='  End If \n';
889    str+='End Function \n';
890
891    str+='Function detectQuickTimeActiveXControl() \n';
892    str+='  on error resume next \n';
893    str+='  detectQuickTimeActiveXControl = False \n';
894    str+='  If detectableWithVB Then \n';
895    str+='    detectQuickTimeActiveXControl = False \n';
896    str+='    hasQuickTimeChecker = false \n';
897    str+='    Set hasQuickTimeChecker = CreateObject("QuickTimeCheckObject.QuickTimeCheck.1") \n';
898    str+='    If IsObject(hasQuickTimeChecker) Then \n';
899    str+='      If hasQuickTimeChecker.IsQuickTimeAvailable(0) Then  \n';
900    str+='        detectQuickTimeActiveXControl = True \n';
901    str+='      End If \n';
902    str+='    End If \n';
903    str+='  End If \n';
904    str+='End Function \n';
905
906    str+='Function VBGetSwfVer(i) \n';
907    str+='  on error resume next \n';
908    str+='  Dim swControl, swVersion \n';
909    str+='  swVersion = 0 \n';
910    str+='  If detectableWithVB Then \n';
911    str+='		set swControl = CreateObject("ShockwaveFlash.ShockwaveFlash." + CStr(i)) \n';
912    str+='		If (IsObject(swControl)) then \n';
913    str+='			swVersion = swControl.GetVariable("$version") \n';
914    str+='		End If \n';
915    str+='  End If \n';
916    str+='  VBGetSwfVer = swVersion \n';
917    str+='End Function \n';
918    str+='</scr' + 'ipt>';
919    
920    document.writeln(str);
921}
922
923
924//////////////// Special functions to create dynamic pages
925function getQueryVariable(variable) 
926{
927	var query = window.location.search.substring(1);
928	var vars = query.split("&");
929	for (var i=0;i< vars.length;i++) 
930	{
931		var pair = vars[i].split("=");
932		if (pair[0] == variable) 
933		{
934			return pair[1];
935		}
936	} 
937	return -1;
938}	
939
940function getRef(id) 
941{
942	return (isDOM ? document.getElementById(id) : (isIE4 ? document.all[id] : document.layers[id]));
943}
944function getStyle(id) 
945{
946	return (isNS4 ? getRef(id) : getRef(id).style);
947}
948
949var panoramadata=new Array();
950var panoramanumdata=0;
951
952function insertpanoramadata(name, panofile, title, description, date, jpgimage)
953{
954	var pano="pano"+panoramanumdata;
955	panoramadata[pano]=name;
956	panoramadata[name]=new Array();
957	panoramadata[name]["movfile"]=panofile;
958	panoramadata[name]["title"]=title;
959	panoramadata[name]["description"]=description;
960	panoramadata[name]["date"]=date;
961	panoramadata[name]["jpgimage"]=jpgimage;
962	
963	panoramanumdata++;
964}
965
966///////////////////

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.