//  DevalVR + QuickTime + PTviewer + Flash - Javascript workaround
//
//	Author: fiero http://www.devalvr.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">writevrcode("fileForQT.mov","fileForJava.jpg","fileForFlash.swf","fileForFlashVR.swf","100%","94%");</SCRIPT>


var minQTVersion = "5.0.0";			// minimal required version checked for QuickTime
var minDevalVRVersion = "0,3,3,0";  // minimal required version checked for DevalVR
var minFlashVersion = "8.0.0";		// minimal required version checked for Flash
var minFlashVRVersion = "6.0.0";	// minimal required version checked for FlashVR
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_Shockwave=3;
var pluginPriority_FlashVR=6;

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 enableSizeLimitsFlashVR=0;		// 0: disable  1: enable     (size limits for FlashVR)
var maxViewerWidth="1280";
var maxViewerHeight="1024";
var maxViewerWidthJava="900";
var maxViewerHeightJava="700";
var maxViewerWidthFlash="900";
var maxViewerHeightFlash="700";
var maxViewerWidthFlashVR="625";
var maxViewerHeightFlashVR="400";

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="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>";
var writeLineUnderFlash="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>";
var writeLineUnderShockwave="";

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.class';

/////////////////////////////////////////////////////////////////////////////////////////////////

var isOpera=(navigator.userAgent.indexOf('Opera')!=-1);
var isIE=((navigator.appVersion.indexOf("MSIE") != -1) && !isOpera);
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, SHOCKWAVE, JAVA, or DETECT
var controlsURLdef= "/control/"
var detectableWithVB = false;
var adviselineunderpano="";
var orgsizepluginx,orgsizepluginy;
var sizepluginx;
var sizepluginy;
var pluginDevalVRInstalled = 0;
var pluginQTInstalled = 0;
var javaInstalled=0;
var pluginFlashInstalled = 0; 
var pluginFlashVRInstalled = 0;
var pluginShockwaveInstalled = 0; 
var writePluginVR=0;
var writeInstallPluginVR=0;
var auxparameters=new Array();
auxparameters['devalvr']=new Array();
auxparameters['qt']=new Array();
auxparameters['java']=new Array();
auxparameters['flash']=new Array();
auxparameters['shockwave']=new Array();

//function writevrcode(movfile,javafile,flashfile,Shockwavefile,horizontalsize,verticalsize)
function writevrcode(movfile,javafile,flashfile,flashvrfile,sizex,sizey,controlsURL)
{
	var existmovfile=(movfile!=null && movfile!="");
	var existjavafile=(javafile!=null && javafile!="");
	var existflashfile=(flashfile!=null && flashfile!="");
	var existflashvrfile=(flashvrfile!=null && flashvrfile!="");

	if(!existmovfile && !existflashfile && !existflashvrfile) favoriteViewer="JAVA";  
	if(!existmovfile &&  (existflashfile || existflashvrfile)) favoriteViewer="FLASH"; 

	if(isWindows)
	{
		if (!isIE) 
		{
			if (isOpera || (navigator.mimeTypes && navigator.mimeTypes['application/x-java-applet'] && navigator.mimeTypes["application/x-java-applet"].enabledPlugin))
			{
				javaInstalled=navigator.javaEnabled();
			}
			if(navigator.mimeTypes && navigator.mimeTypes["application/x-devalvrx"] && navigator.mimeTypes["application/x-devalvrx"].enabledPlugin)
			{
				var words = navigator.plugins["DevalVR 3D Plugin"].description.split(" ");
				var version = words[3].split(",");
				var min = minDevalVRVersion.split(",");
				pluginDevalVRInstalled=checkMinVersion(version,min,4);
			}	
		    if(navigator.mimeTypes && navigator.mimeTypes["video/quicktime"] && navigator.mimeTypes["video/quicktime"].enabledPlugin)
		    {
				for (var i = 0; i < navigator.plugins.length; i++)
				{
					if(navigator.plugins[i].name.indexOf("QuickTime Plug-in")!=-1)
					{
						var words = navigator.plugins[i].name.split(" ");
						var version = words[2].split(".");
						var min = minQTVersion.split(".");
						pluginQTInstalled=checkMinVersion(version,min,3);
						break;
					}
				}
			}
		    if(navigator.mimeTypes && navigator.mimeTypes["application/x-director"] && navigator.mimeTypes["application/x-director"].enabledPlugin)
		    {
				var description=navigator.plugins["Shockwave for Director"].description;
				var pos=description.indexOf("version");
				if (pos!=-1)
				{
					var words=description.substr(pos+8);
					var version = words.split(".");
					var min = minShockwaveVersion.split(".");
					pluginShockwaveInstalled=checkMinVersion(version,min,2);
				}
			}
		}
		else 
		{
			if(detectableWithVB)
			{
				javaInstalled=(detectActiveXControl('JavaPlugin') && navigator.javaEnabled());
				pluginDevalVRInstalled=detectActiveXControl('DevalVRXCtrl.DevalVRXCtrl.1');
				pluginQTInstalled=detectQuickTimeActiveXControl();
				pluginShockwaveInstalled=detectActiveXControl('SWCtl.SWCtl');
			}
		}
		
	}else{
		if (isOpera || (navigator.mimeTypes && navigator.mimeTypes['application/x-java-applet'] && navigator.mimeTypes["application/x-java-applet"].enabledPlugin))
		{
			javaInstalled=navigator.javaEnabled();
		}
	}

	var flashVersion=minFlashVersion.split(".");
	pluginFlashInstalled = DetectFlashVer(parseInt(flashVersion[0]),parseInt(flashVersion[1]),parseInt(flashVersion[2])); 
	var flashVRVersion=minFlashVRVersion.split(".");
	pluginFlashVRInstalled = DetectFlashVer(parseInt(flashVRVersion[0]),parseInt(flashVRVersion[1]),parseInt(flashVRVersion[2])); 

	writePluginVR=0;
	writeInstallPluginVR=0;
	
	if((favoriteViewer=="JAVA" && !existjavafile) || (favoriteViewer=="FLASH" && !existflashfile) || (favoriteViewer=="SHOCKWAVE" && !existmovfile))
		favoriteViewer="DETECT";
		
	var priority=new Array();
	var installed=new Array();

	priority[1]=pluginPriority_DevalVR;
	priority[2]=pluginPriority_QuickTime;
	priority[3]=pluginPriority_Flash;
	priority[4]=pluginPriority_Java;
	priority[5]=pluginPriority_Shockwave;
	priority[6]=pluginPriority_FlashVR;
	installed[1]=(pluginDevalVRInstalled && existmovfile);
	installed[2]=(pluginQTInstalled && existmovfile);
	installed[3]=(pluginFlashInstalled && existflashfile);
	installed[4]=(javaInstalled && existjavafile);
	installed[5]=(pluginShockwaveInstalled && existmovfile);
	installed[6]=(pluginFlashVRInstalled && existflashvrfile);

	if(isWindows)
	{
		if(favoriteViewer=="DETECT")
		{
			for(order=1;order<=6 && writePluginVR==0;order++)
			{
				for(n=1;n<=6;n++)
				{
					if(priority[n]==order && installed[n])
					{
						writePluginVR=n;
					}
				}
			}
			if(writePluginVR==0) 
				writeInstallPluginVR=1;	//Install DevalVR if there is not any plugin (fastest installation)
		}
		else if(favoriteViewer=="DEVALVR")
		{
			if(pluginDevalVRInstalled) writePluginVR=1;
			else writeInstallPluginVR=1;
		}
		else if(favoriteViewer=="QT")
		{
			if(pluginQTInstalled) writePluginVR=2;
			else writeInstallPluginVR=2;
		}
		else if(favoriteViewer=="FLASH")
		{
			if(pluginFlashInstalled) writePluginVR=3;
			else if(pluginFlashVRInstalled && existflashvrfile) writePluginVR=6;
			else writeInstallPluginVR=3;
		}
		else if(favoriteViewer=="JAVA") 
		{
			if(javaInstalled) writePluginVR=4;
			else writeInstallPluginVR=4;
		}
		else if(favoriteViewer=="SHOCKWAVE") 
		{
			if(pluginShockwaveInstalled) writePluginVR=5;
			else writeInstallPluginVR=5;
		}
	}
	else if(isMac) 
	{
		if(favoriteViewer=="FLASH" && existflashfile) 
		{
			if(pluginFlashInstalled) writePluginVR=3;
			else if(pluginFlashVRInstalled && existflashvrfile) writePluginVR=6;
			else writeInstallPluginVR=3;
		}
		else if(favoriteViewer=="JAVA" && existjavafile) 
		{
			if(javaInstalled) writePluginVR=4;
			else writeInstallPluginVR=4;
		}
		else if(favoriteViewer=="SHOCKWAVE" && existmovfile) 
		{
			if(pluginShockwaveInstalled) writePluginVR=5;
			else writeInstallPluginVR=5;
		}
		else writePluginVR=2;	//Use QT always in Mac
	}
	else 
	{
		if(javaInstalled) writePluginVR=4;	//Use Java always in Linux
		else writeInstallPluginVR=4;
	}
	
	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 && writeLineUnderShockwave!="") adviselineunderpano=writeLineUnderShockwave;
	}

	if(sizex==0) sizex="100%";
	if(sizey==0) sizey="100%";

	orgsizepluginx=sizex;
	orgsizepluginy=sizey;
	
	CalcLimits(sizex,sizey);
	sizex=sizepluginx;
	sizey=sizepluginy;

	if(!controlsURL) controlsURL=controlsURLdef;

	if(writePluginVR==1)
	{
		p2q_EmbedDevalVR(movfile,sizex,sizey,'filter','0','autoplay','10','autoplayspeed','10');
	}
	else if(writePluginVR==2)
	{
		p2q_EmbedQuicktime(movfile,sizex,sizey,'scale','tofit','autostart','true','kioskmode','true','controller','true');
	}
	else if(writePluginVR==3)
	{
		p2q_EmbedFlash(flashfile,sizex,sizey,'scale','tofit', 'bgcolor', '#baa67c', 'play', 'true', 'cache','true', 'autoplay','true');
	}
	else if(writePluginVR==4)
	{
		if(usePurePlayer==0) p2q_EmbedPtviewer(javafile,sizex,sizey,controlsURL,'cursor','MOVE','showToolbar','true','imgLoadFeedback','false','bgcolor','F8F7F8');
		else p2q_EmbedPurePlayer(javafile,sizex,sizey);
	}
	else if(writePluginVR==5)
	{
		p2q_EmbedShockwave(movfile,sizex,sizey,controlsURL,'bgcolor', '#F8F7F8','scale','tofit','autostart','true','kioskmode','true','controller','true');
	}
	else if(writePluginVR==6)
	{
		p2q_EmbedFlashVR(flashvrfile,sizex,sizey,controlsURL,'bgcolor', '#baa67c', 'play', 'true', 'cache','true', 'autoplay','true');
	}
	else if(writeInstallPluginVR==1)
	{
		var str='<DIV align=center><table border="0" cellpadding="0" cellspacing="0" style="WIDTH:80%; HEIGHT:100%" width="80%" height="100%"><tr><td align="center" valign="middle">';
		str+='<div id="content-noplugin-message">DevalVR plugin is required to see this content';
		str+='<BR><BR><BR><A href="http://www.devalvr.com/install/">Click here to install</A>';
		str+='<BR><BR>(250 KB, installation only takes a few seconds)';
		str+='<BR><BR><BR><BR><BR><A href="javascript:reloadPage()">click here after installing to reload page</A>';
		str+='</div></td></tr></table></DIV>';
		document.writeln(str);
	}
	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"
		}
		
		var str='<DIV align=center><table border="0" cellpadding="0" cellspacing="0" style="WIDTH:80%; HEIGHT:100%" width="80%"  height="100%"><tr><td align="center" valign="middle">';
		str+='<div id="content-noplugin-message">This content requires '+ pluginname +'.';
		str+='<BR><BR><BR><BR><A href="'+ pluginurl +'">click here to install '+ pluginname +'</A>';
		str+='</div></td></tr></table></DIV>';
		document.writeln(str);
	}

	if(writeInstallPluginVR==0) window.onresize=OnResizeWindow;
}

function ShowViewerSelection(options)
{
	options.toLowerCase();
	var vertical=(options.indexOf("vertical")!=-1);
	var selector=(options.indexOf("selector")!=-1);
	var str='';
	
	viewer=getCookie("panorama_viewer");
	if(!viewer) viewer="DETECT";

	if(selector) {
		str+='<select name="format" id="format" onChange="changeFavoriteViewer(this.value.toUpperCase())">';
		if(options.indexOf("detect")!=-1)
		{
			str+='<option value="detect" '+(viewer=="DETECT"?'selected':'')+'>Detect plugin</option>';
		}
		if(options.indexOf("devalvr")!=-1)
		{
			str+='<option value="devalvr" '+(viewer=="DEVALVR"?'selected':'')+'>DevalVR</option>';
		}
		if(options.indexOf("qt")!=-1)
		{
			str+='<option value="qt" '+(viewer=="QT"?'selected':'')+'>QuickTime</option>';
		}
		if(options.indexOf("shockwave")!=-1)
		{
			str+='<option value="shockwave" '+(viewer=="SHOCKWAVE"?'selected':'')+'>Shockwave</option>';
		}
		if(options.indexOf("flash")!=-1)
		{
			str+='<option value="flash" '+(viewer=="FLASH"?'selected':'')+'>Flash</option>';
		}
		if(options.indexOf("java")!=-1)
		{
			str+='<option value="java" '+(viewer=="JAVA"?'selected':'')+'>Java</option>';
		}
		str+='</select>';
	} else {
		if(options.indexOf("detect")!=-1)
		{
			str+='<INPUT id=radioViewer type=radio name=radioViewer '+(viewer=="DETECT"?'checked':'')+' OnClick="javascript:changeFavoriteViewer(\'DETECT\');">Detect plugin ';
			if(vertical) str+='<BR>';
		}
		if(options.indexOf("devalvr")!=-1)
		{
			str+='<INPUT type=radio name=radioViewer '+(viewer=="DEVALVR"?'checked':'')+' OnClick="javascript:changeFavoriteViewer(\'DEVALVR\');">DevalVR ';
			if(vertical) str+='<BR>';
		}
		if(options.indexOf("qt")!=-1)
		{
			str+='<INPUT type=radio name=radioViewer '+(viewer=="QT"?'checked':'')+' OnClick="javascript:changeFavoriteViewer(\'QT\');">QuickTime ';
			if(vertical) str+='<BR>';
		}
		if(options.indexOf("shockwave")!=-1)
		{
			str+='<INPUT type=radio name=radioViewer '+(viewer=="SHOCKWAVE"?'checked':'')+' OnClick="javascript:changeFavoriteViewer(\'SHOCKWAVE\');">Shockwave ';
			if(vertical) str+='<BR>';
		}
		if(options.indexOf("flash")!=-1)
		{
			str+='<INPUT type=radio name=radioViewer '+(viewer=="FLASH"?'checked':'')+' OnClick="javascript:changeFavoriteViewer(\'FLASH\');">Flash ';
			if(vertical) str+='<BR>';
		}
		if(options.indexOf("java")!=-1)
		{
			str+='<INPUT type=radio name=radioViewer '+(viewer=="JAVA"?'checked':'')+' OnClick="javascript:changeFavoriteViewer(\'JAVA\');">Java ';
			if(vertical) str+='<BR>';
		}
		if(!vertical) str+='<BR>';
	}
	document.write(str);
}

function viewerparameters(viewer)
{
	for(var i=1;i<arguments.length;i++) 
	{
		auxparameters[viewer][i-1]=arguments[i];
	}
}

function OnResizeWindow()
{
	CalcLimits(orgsizepluginx,orgsizepluginy);

	if ((typeof PANORAMAID!="undefined") && document.PANORAMAID) {
		if(isIE || isOpera)
		{
			document.PANORAMAID.style.width=sizepluginx;
			document.PANORAMAID.style.height=sizepluginy;
		}
		else
		{	
			document.PANORAMAID.width=sizepluginx;
			document.PANORAMAID.height=sizepluginy;
		}
	}
}

function checkMinVersion(version,min,num)
{
	var installed=0;
	for (var i = 0; i < num; i++)
	{
		if(parseInt(version[i])>parseInt(min[i])) 
		{
			installed=1;
			break;
		}
		else if(parseInt(version[i])<parseInt(min[i]))
		{
			break;
		}
		else if(parseInt(version[i])==parseInt(min[i]) && i==num-1)
			installed=1;
	}
	return installed;
}

function CalcLimits(sizex, sizey)
{
	var sizew,sizeh,limits;
	
	if(writePluginVR==4)
	{
		maxx=maxViewerWidthJava;
		maxy=maxViewerHeightJava;
		limits=enableSizeLimitsJava;
	}
	else if(writePluginVR==3)
	{
		maxx=maxViewerWidthFlash;
		maxy=maxViewerHeightFlash;
		limits=enableSizeLimitsFlash;
	}
	else
	{
		maxx=maxViewerWidth;
		maxy=maxViewerHeight;
		limits=enableSizeLimits;
	}

	if(limits || enableSizeRatio || adviselineunderpano!="")
	{
		sizex=sizex.toString();
		sizey=sizey.toString();
		pw=sizex.indexOf("px");
		if(pw!=-1) sizex=sizex.substring(0,pw);
		pw=sizey.indexOf("px");
		if(pw!=-1) sizey=sizey.substring(0,pw);
	
		sizew=getPageWidth();
		sizeh=getPageHeight();
	
		pw=sizex.indexOf("%");
		if(pw!=-1)
		{
			percent=sizex.substring(0,pw);
			sizex=(sizew*percent)/100;
		}
		pw=sizey.indexOf("%");
		if(pw!=-1)
		{
			percent=sizey.substring(0,pw);
			sizey=(sizeh*percent)/100;
		}
	
	}
	if(limits)
	{
		if(sizex>maxx) sizex=maxx;
		if(sizey>maxy) sizey=maxy;
	}	
	if(enableSizeRatio)
	{
		x=sizey*sizeRatio;
		if(x<sizex)
		{
			sizex=x;
			if(limits && sizex>maxx) sizex=maxx;
		}
	}
	if(adviselineunderpano!="")
	{
		sizey-=16;
	}
	if(limits || enableSizeRatio || adviselineunderpano!="")
	{
		sizex=((sizex*100.0)/sizew);
		sizey=((sizey*100.0)/sizeh);
		if(sizex<1) sizex=1; 
		if(sizex>100) sizex=100; 
		if(sizey<1) sizey=1; 
		if(sizey>100) sizey=100;
		sizex=sizex+"%";
		sizey=sizey+"%";
	}
	sizepluginx=sizex;
	sizepluginy=sizey;
}

function reloadPage()
{
	if(!isIE) navigator.plugins.refresh(true);
	window.location.reload();
}

function getCookie(nombre)
{
	var dcookie=document.cookie;
	var cname=nombre+"=";
	var longitud=dcookie.length;
	var inicio=0;
	while(inicio<longitud)
	{
		var vbegin=inicio+cname.length;
		if(dcookie.substring(inicio,vbegin)==cname)
		{
			var vend=dcookie.indexOf(";",vbegin);
			if(vend==-1) vend=longitud;
			return unescape(dcookie.substring(vbegin,vend));
		}
		inicio=dcookie.indexOf(" ",inicio)+1;
		if(inicio==0) break;
	}
	return null;
}

function setCookie(name, value, expires)
{
	if(!expires)
	{ 
		expires=new Date();
		expires.setTime(expires.getTime()+(24*3600*1000*365));
	}
	document.cookie=name+"="+escape(value)+"; expires=" + expires.toGMTString()+ "; path=/";
}

function changeFavoriteViewer(favoriteviewer)
{
	setCookie("panorama_viewer",favoriteviewer);
}

function getPageHeight()
{
	var ret;
	if(isIE) ret=document.body.clientHeight-document.body.topMargin-document.body.bottomMargin;
	else ret=window.innerHeight-16;
	
	return ret;
}

function getPageWidth()
{
	var ret;
	if(isIE) ret=document.body.clientWidth-document.body.leftMargin-document.body.rightMargin;
	else ret=window.innerWidth-16;
	
	return ret;
}

function IEGetSwfVer()
{
	flashVer=0;
		
	for(i=25;i>0 && flashVer==0;i--)
	{
		flashVer=VBGetSwfVer(i);
	}
	return flashVer;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function JSGetSwfVer()
{
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
      		var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			descArray = flashDescription.split(" ");
			tempArrayMajor = descArray[2].split(".");
			versionMajor = tempArrayMajor[0];
			versionMinor = tempArrayMajor[1];
			if ( descArray[3] != "" ) {
				tempArrayMinor = descArray[3].split("r");
			} else {
				tempArrayMinor = descArray[4].split("r");
			}
      		versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
            flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
      	} else {
			flashVer = -1;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	// Can't detect in all other cases
	else {
		
		flashVer = -1;
	}
	return flashVer;
}
 
// If called with no parameters this function returns a floating point value 
// which should be the version of the Flash Player or 0.0 
// ex: Flash Player 7r14 returns 7.14
// If called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) 
{
 	reqVer = parseFloat(reqMajorVer + "." + reqRevision);
  	if (isIE && isWindows && !isOpera) {
		versionStr = IEGetSwfVer();
	} else {
		versionStr = JSGetSwfVer();		
	}
	if (versionStr == -1 ) 
	{ 
		return false;
	} 
	else if (versionStr != 0) 
	{
		if(isIE && isWindows && !isOpera) {
			tempArray         = versionStr.split(" ");
			tempString        = tempArray[1];
			versionArray      = tempString .split(",");				
		} else {
			versionArray      = versionStr.split(".");
		}
		versionMajor      = versionArray[0];
		versionMinor      = versionArray[1];
		versionRevision   = versionArray[2];
			
		versionString     = versionMajor + "." + versionRevision;   // 7.0r24 == 7.24
		versionNum        = parseFloat(versionString);
    	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) {
			return true;
		} else {
			return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false );	
		}
	}
	return (reqVer ? false : 0.0);
}

/*  
    IE + ActiveX + EOLAS - Javascript workaround

	Author: 
		Thomas Rauscher <rauscher@pano2qtvr.com> http://www.pano2qtvr.com
		Modified by Armando Saenz
		
	To embed a panorama just call one of these functions with 
	additional pairs for additional paramameters f.e:
	
	p2q_EmbedQuicktime('pano.mov','640','480','scale','tofit','background','#eeeeee');
	
	Use this file at your own risk
*/

window.p2q_Version	= 1.0;

function p2q_EmbedQuicktime(sFile,sWidth,sHeight) {
	var randLink=(isIE || isOpera)?'?t='+Date.parse(timestamp):'';
	document.writeln('<object id="PANORAMAID" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B"');
	document.writeln(' codebase="http://www.apple.com/qtactivex/qtplugin.cab"');
	document.writeln('  style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" width="' + sWidth + '" height="' + sHeight + '" >');
	document.writeln('  <param name="src" value="' + sFile + randLink+'">');
	if (pan)	document.writeln('  <param name="pan" value="' + (180-pan) + '">');
	if (tilt)	document.writeln('  <param name="tilt" value="' + tilt + '">');
	if (fov)	document.writeln('  <param name="fov" value="' + fov + '">');
	if (qt_code1)	document.writeln(qt_code1);
	for(i=3;i<arguments.length;i+=2) {
		document.writeln('  <param name="' + arguments[i] + '" value="' + arguments[i+1] + '">');
	}
	for(i=0;i<auxparameters['qt'].length;i+=2) {
		document.writeln('  <param name="' + auxparameters['qt'][i] + '" value="' + auxparameters['qt'][i+1] + '">');
	}
	document.writeln('<embed name="PANORAMAID" width="' + sWidth + '" height="' + sHeight + '"');
	document.writeln('	pluginspage="http://www.apple.com/quicktime/download/"');
	document.writeln('	type="video/quicktime"');
	document.writeln('	src="' + sFile + randLink + '"');
	if (pan)	document.writeln('	pan="' + (180-pan) + '"');
	if (tilt)	document.writeln('	tilt="' + tilt + '"');
	if (fov)	document.writeln('	fov="' + fov + '"');
	if (qt_code2)	document.writeln(qt_code2);
	for(i=3;i<arguments.length;i+=2) {
		document.writeln('  ' + arguments[i] + '="' + arguments[i+1] + '"');
	}
	for(i=0;i<auxparameters['qt'].length;i+=2) {
		document.writeln('  ' + auxparameters['qt'][i] + '="' + auxparameters['qt'][i+1] + '"');
	}
	document.writeln('	/>');
	document.writeln('</object>');
	if(adviselineunderpano!="")
	{
		if(sWidth!="100%") document.writeln('<BR>');
		document.writeln(adviselineunderpano);
	}
}

function p2q_EmbedDevalVR(sFile,sWidth,sHeight) {
	document.writeln('<object id="PANORAMAID" classid="clsid:5D2CF9D0-113A-476B-986F-288B54571614"');
	document.writeln(' codebase="http://www.devalvr.com/instalacion/plugin/devalocx.cab');
	document.writeln('#version='+minDevalVRVersion+'"');
	document.writeln('  style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" width="' + sWidth + '" height="' + sHeight + '" >');
	document.writeln('  <param name="src" value="' + sFile + '">');
	if (pan)	document.writeln('  <param name="rotationy" value="' + (180-pan) + '">');
	if (tilt)	document.writeln('  <param name="rotationx" value="' + tilt + '">');
	if (fov)	document.writeln('  <param name="zoom" value="' + (45/fov) + '">');
	for(i=3;i<arguments.length;i+=2) {
		document.writeln('  <param name="' + arguments[i] + '" value="' + arguments[i+1] + '">');
	}
	for(i=0;i<auxparameters['devalvr'].length;i+=2) {
		document.writeln('  <param name="' + auxparameters['devalvr'][i] + '" value="' + auxparameters['devalvr'][i+1] + '">');
	}
	document.writeln('<embed name="PANORAMAID" width="' + sWidth + '" height="' + sHeight + '"');
	document.writeln('	pluginspage="http://www.devalvr.com/instalacion/plugin/install.html"');
	document.writeln('	type="application/x-devalvrx"');
	document.writeln('	src="' + sFile + '"');
	if (pan)	document.writeln('  rotationy="' + (180-pan) + '"');
	if (tilt)	document.writeln('  rotationx="' + tilt + '"');
	if (fov)	document.writeln('  zoom="' + (45/fov) + '"');
	for(i=3;i<arguments.length;i+=2) {
		document.writeln('  ' + arguments[i] + '="' + arguments[i+1] + '"');
	}
	for(i=0;i<auxparameters['devalvr'].length;i+=2) {
		document.writeln('  ' + auxparameters['devalvr'][i] + '="' + auxparameters['devalvr'][i+1] + '"');
	}
	document.writeln('	/>');
	document.writeln('</object>');
}

function p2q_EmbedShockwave(sFile,sWidth,sHeight,controlsURL) {
	sFile=sFile.substring(sFile.indexOf('.ee')+4);
	document.writeln('<object id="PANORAMAID" classid="clsid:166B1BCA-3F9C-11CF-8075-444553540000"');
	document.writeln(' codebase="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0"');
	document.writeln('  style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" width="' + sWidth + '" height="' + sHeight + '" >');
	document.writeln('  <param name="src" value="http://www.fellini.ee'+controlsURL+'SPi-V.dcr">');
	document.writeln('  <param name="swURL" value="http://www.fellini.ee/qtparser.php?mov=' + sFile + '">');
	document.writeln('  <param name="swStretchStyle" value="stage">');
	document.writeln('  <param name="progress" value="true">');
	document.writeln('  <param name="logo" value="false">');
	document.writeln('  <param name="swRemote" value="swContextMenu=\'false\'">');
	if (pan)	document.writeln('  <param name="pan" value="' + (180-pan) + '">');
	if (tilt)	document.writeln('  <param name="tilt" value="' + tilt + '">');
	if (fov)	document.writeln('  <param name="fov" value="' + fov + '">');
	for(i=4;i<arguments.length;i+=2) {
		document.writeln('  <param name="' + arguments[i] + '" value="' + arguments[i+1] + '">');
	}
	for(i=0;i<auxparameters['shockwave'].length;i+=2) {
		document.writeln('  <param name="' + auxparameters['shockwave'][i] + '" value="' + auxparameters['spiv'][i+1] + '">');
	}
	document.writeln('<embed name="PANORAMAID" width="' + sWidth + '" height="' + sHeight + '"');
	document.writeln('	pluginspage="http://www.macromedia.com/shockwave/download/"');
	document.writeln('	type="application/x-director"');
	document.writeln('	src="http://www.fellini.ee'+controlsURL+'SPi-V.dcr"');
	document.writeln('  swURL="http://www.fellini.ee/qtparser.php?mov=' + sFile + '"');
	document.writeln('  swStretchStyle="stage" swRemote="swContextMenu=\'false\'"');
	document.writeln('  swLiveconnect="true" progress="true" logo="false"');
	if (pan)	document.writeln('	pan="' + (180-pan) + '"');
	if (tilt)	document.writeln('	tilt="' + tilt + '"');
	if (fov)	document.writeln('	fov="' + fov + '"');
	for(i=4;i<arguments.length;i+=2) {
		document.writeln('  ' + arguments[i] + '="' + arguments[i+1] + '"');
	}
	for(i=0;i<auxparameters['shockwave'].length;i+=2) {
		document.writeln('  ' + auxparameters['shockwave'][i] + '="' + auxparameters['shockwave'][i+1] + '"');
	}
	document.writeln('	/>');
	document.writeln('</object>');
}

function p2q_EmbedFlash(sFile,sWidth,sHeight) {
	document.writeln('<object id="PANORAMAID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"');
	document.writeln(' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"');
	document.writeln('  style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" width="' + sWidth + '" height="' + sHeight + '" >');
	if (navigator.appVersion.indexOf("MSIE")!=-1) 
	document.writeln('  <param name="wmode" value="transparent">');
	document.writeln('  <param name="src" value="' + sFile + '">');
	var flashVars='';
	if (pan)	flashVars+='pan="' + (180-pan) + '"';
	if (tilt)	flashVars+='&tilt="' + tilt + '"';
	if (fov)	flashVars+='&fov="' + fov + '"';
	document.writeln('  <param name="FlashVars" value="' + flashVars + '">');
	for(i=3;i<arguments.length;i+=2) {
		document.writeln('  <param name="' + arguments[i] + '" value="' + arguments[i+1] + '">');
	}
	for(i=0;i<auxparameters['flash'].length;i+=2) {
		document.writeln('  <param name="' + auxparameters['flash'][i] + '" value="' + auxparameters['flash'][i+1] + '">');
	}
	document.writeln('<embed name="PANORAMAID" width="' + sWidth + '" height="' + sHeight + '"');
	document.writeln('	pluginspage="http://www.macromedia.com/go/getflashplayer"');
	document.writeln('	type="application/x-shockwave-flash"');
	document.writeln('	src="' + sFile + '"');
	document.writeln('	FlashVars="' + flashVars + '"');
	for(i=3;i<arguments.length;i+=2) {
		document.writeln('  ' + arguments[i] + '="' + arguments[i+1] + '"');
	}
	for(i=0;i<auxparameters['flash'].length;i+=2) {
		document.writeln('  ' + auxparameters['flash'][i] + '="' + auxparameters['flash'][i+1] + '"');
	}
	document.writeln('	/>');
	document.writeln('</object>');
	if(adviselineunderpano!="")
	{
		if(sWidth!="100%") document.writeln('<BR>');
		document.writeln(adviselineunderpano);
	}
}

function p2q_EmbedFlashVR(sFile,sWidth,sHeight,controlsURL) {
	var scene="scene"+sFile;
	document.writeln('<object id="PANORAMAID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"');
	document.writeln(' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"');
	document.writeln('  style="WIDTH: ' + sWidth + '; HEIGHT: ' + sHeight + '" width="' + sWidth + '" height="' + sHeight + '" >');
	document.writeln(' <param name="swliveconnect" value="true">');
	if (navigator.appVersion.indexOf("MSIE")!=-1) 
	document.writeln('  <param name="wmode" value="transparent">');
	document.writeln('  <param name="src" value="' + controlsURL + 'flashvr.swf?initscene='+scene+'&connect='+Date.parse(timestamp)+'">');
	document.writeln('  <param name="initscene" value="' + scene + '">');
	for(i=4;i<arguments.length;i+=2) {
		document.writeln('  <param name="' + arguments[i] + '" value="' + arguments[i+1] + '">');
	}
	document.writeln('<embed name="PANORAMAID" width="' + sWidth + '" height="' + sHeight + '"');
	document.writeln('	pluginspage="http://www.macromedia.com/go/getflashplayer"');
	document.writeln('	type="application/x-shockwave-flash"');
	document.writeln('  swliveconnect="true"');
	document.writeln('  src="' + controlsURL + 'flashvr.swf?initscene='+scene+'&connect='+Date.parse(timestamp)+'"');
	document.writeln('	initscene="' + scene + '"');
	for(i=4;i<arguments.length;i+=2) {
		document.writeln('  ' + arguments[i] + '="' + arguments[i+1] + '"');
	}
	document.writeln('	/>');
	document.writeln('</object>');
	if(adviselineunderpano!="")
	{
		if(sWidth!="100%") document.writeln('<BR>');
		document.writeln(adviselineunderpano);
	}
}

function p2q_EmbedPtviewer(sFile,sWidth,sHeight,controlsURL) {
	var nr=sprintf('%04d',sFile);
	var file="http://www.fellini.ee/pano/"+nr+"/"+nr+".jpg"
	document.writeln('<div id="ptViewer" style="width:' + sWidth + '; height:' + sHeight + ';"><applet name="PANORAMAID" code="ptviewer.class" archive="ptviewer.jar"'); 
	document.writeln('  codebase="http://www.fellini.ee/control/" mayscript="true"');
	document.writeln('  width="' + sWidth + '" height="' + sHeight + '" >');
	document.writeln('  <param name="maxarray" value="5000000">');
	document.writeln('  <param name="file" value="ptviewer:' + sFile + '">');
	document.writeln('  <param name="pano' + sFile + '" value="');
	document.writeln('    {file=' + file + '}');
	if (pan)	document.writeln('    {pan=' + pan + '}');
	if (tilt)	document.writeln('    {tilt=' + tilt + '}');
	if (fov)	document.writeln('    {fov=' + fov + '}');
	else	document.writeln('    {fov=90}');
	document.writeln('    {fovmax=120}');
	document.writeln('    {fovmin=60}');
	document.writeln('    {auto=0.5}');
	if (pt_code1)	document.writeln(pt_code1);
	document.writeln('  ">');
	if (pt_code2)	document.writeln(pt_code2);
	for(i=4;i<arguments.length;i+=2) {
		document.writeln('  <param name="' + arguments[i] + '" value="' + arguments[i+1] + '">');
	}
	for(i=0;i<auxparameters['java'].length;i+=2) {
		document.writeln('  <param name="' + auxparameters['java'][i] + '" value="' + auxparameters['java'][i+1] + '">');
	}
	document.writeln('</applet></div>');
	if(adviselineunderpano!="")
	{
		if(sWidth!="100%") document.writeln('<BR>');
		document.writeln(adviselineunderpano);
	}
}

function p2q_EmbedPurePlayer(sFile,sWidth,sHeight) 
{
	document.writeln('<applet name="PANORAMAID" code="' + codePurePlayer + '" archive="' + archivePurePlayer + '"'); 
	document.writeln('  width="' + sWidth + '" height="' + sHeight + '" >');
	document.writeln('	<param name="panorama" value="' + sFile + '" >');
	document.writeln('	<param name="optimizememory" value="true" >');
	for(i=3;i<arguments.length;i+=2) {
		document.writeln('  <param name="' + arguments[i] + '" value="' + arguments[i+1] + '">');
	}
	for(i=0;i<auxparameters['java'].length;i+=2) {
		document.writeln('  <param name="' + auxparameters['java'][i] + '" value="' + auxparameters['java'][i+1] + '">');
	}
	document.writeln('</applet>');
	
	if(adviselineunderpano!="")
	{
		if(sWidth!="100%") document.writeln('<BR>');
		document.writeln(adviselineunderpano);
	}
}

// Here we write out the VBScript block for MSIE Windows
if (isWindows && isIE) 
{
    document.writeln('<script language="VBscript" type="text/vbscript">');

    document.writeln('\'do a one-time test for a version of VBScript that can handle this code');
    document.writeln('detectableWithVB = False');
    document.writeln('If ScriptEngineMajorVersion >= 2 then');
    document.writeln('  detectableWithVB = True');
    document.writeln('End If');

    document.writeln('\'this next function will detect most plugins');
    document.writeln('Function detectActiveXControl(activeXControlName)');
    document.writeln('  on error resume next');
    document.writeln('  detectActiveXControl = False');
    document.writeln('  If detectableWithVB Then');
    document.writeln('		set pControl = CreateObject(activeXControlName)');
    document.writeln('		If (IsObject(pControl)) then');
    document.writeln('			detectActiveXControl = True');
    document.writeln('		End If');
    document.writeln('  End If');
    document.writeln('End Function');

    document.writeln('\'and the following function handles QuickTime');
    document.writeln('Function detectQuickTimeActiveXControl()');
    document.writeln('  on error resume next');
    document.writeln('  detectQuickTimeActiveXControl = False');
    document.writeln('  If detectableWithVB Then');
    document.writeln('    detectQuickTimeActiveXControl = False');
    document.writeln('    hasQuickTimeChecker = false');
    document.writeln('    Set hasQuickTimeChecker = CreateObject("QuickTimeCheckObject.QuickTimeCheck.1")');
    document.writeln('    If IsObject(hasQuickTimeChecker) Then');
    document.writeln('      If hasQuickTimeChecker.IsQuickTimeAvailable(0) Then ');
    document.writeln('        detectQuickTimeActiveXControl = True');
    document.writeln('      End If');
    document.writeln('    End If');
    document.writeln('  End If');
    document.writeln('End Function');

    document.writeln('\'Visual basic helper required to detect Flash Player ActiveX control version information');
    document.writeln('Function VBGetSwfVer(i)');
    document.writeln('  on error resume next');
    document.writeln('  Dim swControl, swVersion');
    document.writeln('  swVersion = 0');
    document.writeln('  If detectableWithVB Then');
    document.writeln('		set swControl = CreateObject("ShockwaveFlash.ShockwaveFlash." + CStr(i))');
    document.writeln('		If (IsObject(swControl)) then');
    document.writeln('			swVersion = swControl.GetVariable("$version")');
    document.writeln('		End If');
    document.writeln('  End If');
    document.writeln('  VBGetSwfVer = swVersion');
    document.writeln('End Function');

    document.writeln('</scr' + 'ipt>');
}
