﻿//
//  DevalVR + QuickTime + PTviewer + Flash + Spi-v  Javascript workaround
//	Author: Armando Saenz (aka fiero) http://www.devalvr.com
//  Version: 1.2.1
//
//	p2q_... functions based on Thomas Rauscher's code: 
//	Thomas Rauscher http://www.pano2qtvr.com
//		
//		
//	To embed a panorama just include these lines in your HTML file (change filenames):
//
//	<SCRIPT type="text/javascript" src="detectvr.js"></SCRIPT>
//	<SCRIPT type="text/javascript">
//		writecode("fileForQT.mov","fileForDevalVR.mov","fileForJava.jpg","fileForFlash.swf","fileForSPIV.jpg","100%","94%");
//	</SCRIPT>
//
//
//	NOTE: To use Spi-v viewer, place "SPi-V.dcr" file in same folder that HTML file, you can find it here: http://www.fieldofview.com
//	
// 	IMPORTANT: Use this file at your own risk
//

var minQTVersion = "5.0.0";			// minimal required version checked for QuickTime
var minDevalVRVersion = "0,5,0,0";  // minimal required version checked for DevalVR
var minFlashVersion = "9.0.0";		// minimal required version checked for Flash
var minShockwaveVersion = "10.1";	// minimal required version checked for Shockwave

var pluginPriority_QuickTime=2;		// Set the order of Priority to use in each plugin 
var pluginPriority_DevalVR=1;		// when Autodetect option is selected. Change 
var pluginPriority_Flash=4;			// the number or priority for each plugin
var pluginPriority_Java=5;
var pluginPriority_Spiv=6;
var pluginPriority_PangeaVR=3;

var enableSizeLimits=0;				// 0: disable  1: enable  (size limits for QT, DevalVR and Spi-v)
var enableSizeLimitsJava=0;			// 0: disable  1: enable  (size limits for Java)
var enableSizeLimitsFlash=0;		// 0: disable  1: enable  (size limits for Flash)
var maxViewerWidth="1280";
var maxViewerHeight="1024";
var maxViewerWidthJava="900";
var maxViewerHeightJava="700";
var maxViewerWidthFlash="900";
var maxViewerHeightFlash="700";

var enableSizeRatio=0;				// 0: disable size ratio    1: enable size ratio
var sizeRatio=6/3;					// maximum aspect ratio, horizontal/vertical proportions

var enableLineUnderPanorama=0;		//Enable an adviser line under panorama
var writeLineUnderQuickTime="";
var writeLineUnderDevalVR="";
var writeLineUnderJava="<FONT face='Verdana' size='1' color='#cdcdcd'> Install the DevalVR plugin for an optimal viewing experience <A href='http://www.devalvr.com/install/'>click here to install</A>, and <A href='javascript:reloadPage()'>click here after installing</A></FONT>";
var writeLineUnderFlash="<FONT face='Verdana' size='1' color='#cdcdcd'> Install the DevalVR plugin for an optimal viewing experience <A href='http://www.devalvr.com/install/'>click here to install</A>, and <A href='javascript:reloadPage()'>click here after installing</A></FONT>";
var writeLineUnderSpiV="";
var writeLineUnderPangeaVR="";

var installfont="<FONT face='Verdana' size='2' color='#FFFFFF'>";

var usePurePlayer=0;						//0: PTViewer is used as Java player  1: PurePlayer is used (write correct names below)
var archivePurePlayer='PurePlayer.jar';		//Copy this file in the same folder
var codePurePlayer='PurePlayer';

var 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)

/////////////////////////////////////////////////////////////////////////////////////////////////

var isOpera=(navigator.userAgent.indexOf('Opera')!=-1);
var isIE=((navigator.appVersion.indexOf("MSIE") != -1) && !isOpera);
var isDOM=document.getElementById?1:0;
var isNS4=navigator.appName=='Netscape'&&!isDOM?1:0;
var isIE4=isIE&&!isDOM?1:0;
var isWindows=(navigator.platform.indexOf('Win')!=-1);
var isMac=(navigator.platform.indexOf('Mac')!=-1 || navigator.platform.indexOf('PowerPC')!=-1);
var favoriteViewer=getCookie("panorama_viewer");
if(!favoriteViewer) favoriteViewer="DETECT";  //DEVALVR , QT, FLASH, JAVA, SPIV, PANGEAVR, or DETECT
var detectableWithVB = false;
var adviselineunderpano="";
var orgsizepluginx=new Array();
var orgsizepluginy=new Array();
var numberofplugins=0;
var sizepluginx;
var sizepluginy;
var writePluginVR=0;
var writeInstallPluginVR=0;
var reloadpagewhenchangeviewer=0;
var auxparameters=new Array();
auxparameters['devalvr']=new Array();
auxparameters['qt']=new Array();
auxparameters['java']=new Array();
auxparameters['flash']=new Array();
auxparameters['spiv']=new Array();


//Use 'viewerparameters' function to define different parameters for each viewer
//Use "devalvr", "qt", "java", "flash", "spiv" or "pangeavr" in first parameter
//for example: viewerparameters("devalvr","resize","0","autoplay","3");

function viewerparameters(viewer)
{
	auxparameters[viewer]=new Array();
	for(var i=1;i<arguments.length;i++) 
	{
		auxparameters[viewer][i-1]=arguments[i];
	}
}

function writecode(qtfile, devalvrfile, javafile, flashfile, spivfile, sizex, sizey)
{
	writecode2(qtfile, qtfile, devalvrfile, javafile, flashfile, spivfile, sizex, sizey);
}

function writecode2(qtfile, pangeafile, devalvrfile, javafile, flashfile, spivfile, sizex, sizey)
{
	var priority=new Array();
	var existfile=new Array();
	writePluginVR=0;
	writeInstallPluginVR=0;
	
	existfile[1]=(devalvrfile!=null && devalvrfile!="");
	existfile[2]=(qtfile!=null && qtfile!="");
	existfile[3]=(flashfile!=null && flashfile!="");
	existfile[4]=(javafile!=null && javafile!="");
	existfile[5]=(spivfile!=null && spivfile!="");
	existfile[6]=(pangeafile!=null && pangeafile!="");
	
	if((favoriteViewer=="DEVALVR" && (!existfile[1] || !isWindows))
	|| (favoriteViewer=="QT" && !existfile[2])
	|| (favoriteViewer=="JAVA" && !existfile[4]) 
	|| (favoriteViewer=="FLASH" && !existfile[3]) 
	|| (favoriteViewer=="SPIV" && !existfile[5])
	|| (favoriteViewer=="PANGEAVR" && !existfile[6]))
		favoriteViewer="DETECT";
	
	priority[1]=pluginPriority_DevalVR;
	priority[2]=pluginPriority_QuickTime;
	priority[3]=pluginPriority_Flash;
	priority[4]=pluginPriority_Java;
	priority[5]=pluginPriority_Spiv;
	priority[6]=pluginPriority_PangeaVR;
	
	if(favoriteViewer=="DETECT")
	{
		for(order=1;order<=6 && writePluginVR==0;order++)
		{
			for(n=1;n<=6;n++)
			{
				if(priority[n]==order && existfile[n] && IsPluginInstalled(n))
				{
					writePluginVR=n;
					break;
				}
			}
		}
	}
	else if(favoriteViewer=="DEVALVR" && isWindows)
	{
		if(IsPluginInstalled(1)) writePluginVR=1;
		else writeInstallPluginVR=1;
	}
	else if(favoriteViewer=="QT" && (isWindows || isMac))
	{
		if(IsPluginInstalled(2)) writePluginVR=2;
		else writeInstallPluginVR=2;
	}
	else if(favoriteViewer=="FLASH")
	{
		if(IsPluginInstalled(3)) writePluginVR=3;
		else writeInstallPluginVR=3;
	}
	else if(favoriteViewer=="JAVA") 
	{
		if(IsPluginInstalled(4)) writePluginVR=4;
		else writeInstallPluginVR=4;
	}
	else if(favoriteViewer=="SPIV" && (isWindows || isMac)) 
	{
		if(IsPluginInstalled(5)) writePluginVR=5;
		else writeInstallPluginVR=5;
	}
	else if(favoriteViewer=="PANGEAVR" && isMac) 
	{
		if(IsPluginInstalled(6)) writePluginVR=6;
		else writeInstallPluginVR=6;
	}
	
	if(writeInstallPluginVR==0 && writePluginVR==0)
	{
		if(isWindows) writeInstallPluginVR=1;	//Install DevalVR if there is not any plugin (fastest installation)
		else if(isMac) writeInstallPluginVR=2;	//Install QT always in Mac
		else writeInstallPluginVR=4;			//Install Java always in Linux
	} 
	
	adviselineunderpano="";
	if(enableLineUnderPanorama)
	{
		if(writePluginVR==1 && writeLineUnderDevalVR!="") adviselineunderpano=writeLineUnderDevalVR;
		else if(writePluginVR==2 && writeLineUnderQuickTime!="") adviselineunderpano=writeLineUnderQuickTime;
		else if(writePluginVR==3 && writeLineUnderFlash!="") adviselineunderpano=writeLineUnderFlash;
		else if(writePluginVR==4 && writeLineUnderJava!="") adviselineunderpano=writeLineUnderJava;
		else if(writePluginVR==5 && writeLineUnderSpiV!="") adviselineunderpano=writeLineUnderSpiV;
		else if(writePluginVR==6 && writeLineUnderPangeaVR!="") adviselineunderpano=writeLineUnderPangeaVR;
	}

	if(sizex=="") sizex="100%";
	if(sizey=="") sizey="94%";

	orgsizepluginx[numberofplugins]=sizex;
	orgsizepluginy[numberofplugins]=sizey;
	
	CalcLimits(sizex,sizey);
	sizex=sizepluginx;
	sizey=sizepluginy;

	idpano='PANORAMAID';
	if(numberofplugins>0) idpano+=numberofplugins;
	numberofplugins++;
	
	if(writePluginVR==1)
	{
		if(detectvr_replacepage) window.location.replace(devalvrfile); 
		else p2q_EmbedDevalVR(devalvrfile,sizex,sizey,idpano,'filter','0');
	}
	else if(writePluginVR==2)
	{
		if(detectvr_replacepage) window.location.replace(qtfile); 
		else p2q_EmbedQuicktime(qtfile,sizex,sizey,idpano,'scale','tofit','autostart','true','kioskmode','true','controller', 'true', 'enablejavascript', 'true');
	}
	else if(writePluginVR==3)
	{
		if(detectvr_replacepage) window.location.replace(flashfile); 
		else p2q_EmbedFlash(flashfile,sizex,sizey,idpano,'bgcolor', '#f0f0f0', 'play', 'true', 'cache','true', 'autoplay','true','allowFullScreen', 'true');
	}
	else if(writePluginVR==4)
	{
		if(detectvr_replacepage) window.location.replace(javafile); 
		else 
		{
			if(usePurePlayer==0) p2q_EmbedPtviewer(javafile,sizex,sizey,idpano,'fov','120','cursor','MOVE','showToolbar','true','imgLoadFeedback','false','pan','120');
			else p2q_EmbedPurePlayer(javafile,sizex,sizey,idpano);
		}
	}
	else if(writePluginVR==5)
	{
		if(detectvr_replacepage) window.location.replace(spivfile); 
		else p2q_EmbedSPiV(spivfile,sizex,sizey,idpano);
	}
	else if(writePluginVR==6)
	{
		if(detectvr_replacepage) window.location.replace(pangeafile); 
		else p2q_EmbedPangea(pangeafile,sizex,sizey,idpano,'maxtilt','0','mintilt','0','maxfov','0','minfov','0');
	}
	else if(writeInstallPluginVR==1)
	{
		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">';
		str+='DevalVR plugin is required to see this content';
		str+='<BR><BR><A href="http://www.devalvr.com/install/">click here to install (250 KB, it only takes a few seconds)</A>';
		str+='</td></tr></table></DIV>';
		
		document.writeln(str);
		setTimeout("CheckPluginInstallation()",10000);
	}
	else
	{
		var pluginname,pluginurl;
		
		if(writeInstallPluginVR==2) 
		{
			pluginname="QuickTime Player"
			pluginurl="http://www.apple.com/quicktime/download/"
		}
		else if(writeInstallPluginVR==3) 
		{
			pluginname="Adobe Flash Player Version " + minFlashVersion + " or higher."
			pluginurl="http://www.adobe.com/go/getflash/"
		}
		else if(writeInstallPluginVR==4) 
		{
			pluginname="Java Software"
			pluginurl="http://java.com/en/download/"
		}
		else if(writeInstallPluginVR==5) 
		{
			pluginname="Shockwave Player"
			pluginurl="http://www.macromedia.com/shockwave/download"
		}
		else if(writeInstallPluginVR==6) 
		{
			pluginname="PangeaVR Player"
			pluginurl="http://www.pangeasoft.net/pano/plugin/downloads.html"
		}
		
		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">';
		str+=installfont+'This content requires '+ pluginname +'.';
		str+='<BR><BR><A href="'+ pluginurl +'" target="_blank">click here to install '+ pluginname +'</A>';
		str+='</FONT></td></tr></table></DIV>';
		document.writeln(str);
	}

	if(writeInstallPluginVR==0) window.onresize=OnResizeWindow;
}

function ShowViewerSelection(options)
{
	var optionviewer=new Array("DETECT","DEVALVR","QT","FLASH","JAVA","SPIV","PANGEAVR");
	var textviewer=new Array("Automatic detection","DevalVR","QuickTime","Flash","Java","Spi-V","PangeaVR");
	var osviewer=new Array(0,1,0,0,0,0,2);	//0:All  1:Windows  2:Mac

	options=options.toUpperCase();
	reloadpagewhenchangeviewer=(options.indexOf("RELOAD")!=-1);
	var vertical='';
	var str='';

	var combobox=(options.indexOf("COMBOBOX")!=-1);
	var links=(options.indexOf("LINKS")!=-1);

	if(options.indexOf("HORIZONTAL")==-1)
		vertical='<BR>';
	
	viewer=getCookie("panorama_viewer");
	if(!viewer) viewer="DETECT";

	if(combobox)
	{
		str+='<SELECT id=comboboxViewer style="WIDTH: 160px" width=160 name=comboboxViewer onchange="favoriteViewerChangedCombo()">';
	}
	for(n=0;n<7;n++)
	{
		if(options.indexOf(optionviewer[n])!=-1 && (osviewer[n]==0 || (osviewer[n]==1 && isWindows) || (osviewer[n]==2 && isMac)))
		{
			if(combobox) str+='<OPTION value="'+optionviewer[n]+'" '+(viewer==optionviewer[n]?'selected':'')+'> '+textviewer[n]+'</OPTION>';
			else if(links) str+='<A hRef="javascript:changeFavoriteViewer(\''+optionviewer
