// Globals
// Major version of Flash required
var requiredMajorVersion = 9;
// Minor version of Flash required
var requiredMinorVersion = 0;
// Minor version of Flash required
var requiredRevision = 0;

var ac_isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var ac_isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var ac_isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
var ac_isFireFox = navigator.userAgent.indexOf("Mozilla/5")>-1;
var ac_isSafari = navigator.userAgent.indexOf("Safari")>-1; 


var ac_Width = 0;
var ac_Height = 0;
var ac_Name = null;

var ac_ParametersTable = new Array();
var ac_Parameters = "";
var ac_ParamSep = "[{|!|}]";

var ac_versions = ["Msxml2.XMLHTTP.7.0","Msxml2.XMLHTTP.6.0","Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"];
var ac_request = null;

function controlVersion()
{ var version;
  var axo;
  var e;

  // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
  try
  { // version will be set for 7.X or greater players
	axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
	version = axo.GetVariable("$version");
  }
  catch(e)
  {}

  if(!version)
  {  try
     { // version will be set for 6.X players only
	   axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
	   // installed player is some revision of 6.0
	   // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
	   // so we have to be careful. 
			
	   // default to the first public version
	   version = "WIN 6,0,21,0";

	   // throws if AllowScripAccess does not exist (introduced in 6.0r47)		
	   axo.AllowScriptAccess = "always";

	   // safe to call for 6.0r47 or greater
	   version = axo.GetVariable("$version");

	 }catch(e)
	 {}
  }

  if(!version)
  { try
    { // version will be set for 4.X or 5.X player
      axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
      version = axo.GetVariable("$version");
    }
	catch(e)
	{}
  }

  if(!version)
  {	try
    { // version will be set for 3.X player
	  axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
	  version = "WIN 3,0,18,0";
	}catch(e)
	{}
  }

  if(!version)
  { try
    { // version will be set for 2.X player
	  axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
	  version = "WIN 2,0,0,11";
	 }catch(e)
	 { version = -1; }
  }
	
  return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function getSwfVer()
{  // NS/Opera version >= 3 check for Flash plugin in plugin array
   var flashVer = -1;
	
   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;			
	   var descArray = flashDescription.split(" ");
	   var tempArrayMajor = descArray[2].split(".");
	   var versionMajor = tempArrayMajor[0];
	   var versionMinor = tempArrayMajor[1];
	   if(descArray[3]!="")
	      tempArrayMinor = descArray[3].split("r");
	   else 
	  	  tempArrayMinor = descArray[4].split("r");
			
	   var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
	   var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
	 }
   }   
   else // MSN/WebTV 2.6 supports Flash 4
   if(navigator.userAgent.toLowerCase().indexOf("webtv/2.6")!=-1)
     flashVer = 4;	
   else // WebTV 2.5 supports Flash 3
   if(navigator.userAgent.toLowerCase().indexOf("webtv/2.5")!=-1)
     flashVer = 3;   
   else //older WebTV supports Flash 2
   if (navigator.userAgent.toLowerCase().indexOf("webtv")!=-1)
     flashVer = 2;
   else
   if(ac_isIE && ac_isWin && !ac_isOpera)
		flashVer = controlVersion();
	
   return flashVer;
}

// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function detectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{	versionStr = getSwfVer();
	if (versionStr==-1) 
	  return false;
	else
	if(versionStr!=0)
	{ if(ac_isIE && ac_isWin && !ac_isOpera)
	  {	// Given "WIN 2,0,0,11"
		tempArray = versionStr.split(" "); 	 //["WIN", "2,0,0,11"]
		tempString = tempArray[1];			 // "2,0,0,11"
		versionArray = tempString.split(",");// ['2', '0', '0', '11']
	  }
	  else 
		versionArray = versionStr.split(".");
		
	  var versionMajor = versionArray[0];
	  var versionMinor = versionArray[1];
	  var versionRevision = versionArray[2];

      // is the major.revision >= requested major.revision AND the minor version >= requested minor
	  if(versionMajor > parseFloat(reqMajorVer))
			return true;
	  else
	  if(versionMajor==parseFloat(reqMajorVer))
	  {	if(versionMinor > parseFloat(reqMinorVer))
		  return true;
		else
		if(versionMinor==parseFloat(reqMinorVer))
		{ if(versionRevision>=parseFloat(reqRevision))
			 return true;
	    }
	  }
	  return false;
   }
}

function ac_AddExtension(src, ext)
{ if(src.indexOf('?')!=-1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function ac_Generateobj(objAttrs, params, embedAttrs) 
{ var str = '';
  if(ac_isIE && ac_isWin && !ac_isOpera)
  {	str += '<object ';
  	for(var i in objAttrs)
  	  str += i + '="' + objAttrs[i] + '" ';
  	for(var i in params)
  	  str += '><param name="' + i + '" value="' + params[i] + '" /> ';
  	str += '></object>';
  }
  else
  {	str += '<embed ';
  	for (var i in embedAttrs)
  	  str += i + '="' + embedAttrs[i] + '" ';
  	str += '> </embed>';
  }
  
  document.write(str);
}

function ac_fl_RunContent()
{  var ret = ac_GetArgs( arguments,".swf","movie","clsid:d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash");
   ac_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}

function ac_GetArgs(args, ext, srcParamName, classid, mimeType)
{ var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for(var i=0;i<args.length;i=i+2)
  { var currArg = args[i].toLowerCase();    

    switch (currArg)
    { case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = ac_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblClick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "id":
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

function AttachParameter(name,value)
{ if(ac_Parameters.length>0)
    ac_Parameters += ac_ParamSep;
  ac_Parameters +=  name + ac_ParamSep  + value;
}


function ac_isDefined(v)
{  var tmp = ""+v;
  return(tmp!="undefined");  
}


function ac_getBrowserType()
{  var type = "Other";
   if(ac_isIE)
     type = "MSIE";
   else
   if(ac_isOpera)
     type = "Opera";
   else
   if(ac_isFireFox)
     type = "FireFox";
   else
   if(ac_isSafari)
    type = "Safari";
   AttachParameter("BrowserType",type);
}



function ac_getParameters(id)
{   var ret = ac_ParametersTable[id];
   if(!ac_isDefined(ret))
     return("");
   else
     return(ret);
}

function BeginNovaView(w,h,name)
{ ac_Width = w;
  ac_Height = h;
  ac_Name = name;  

  if(name!=null)
     AttachParameter("ComponentName",name);    

  ac_getBrowserType();
}

function EndNovaView()
{ // Version check for the Flash Player that has the ability to start Player Product Install (6.0r65)
  var hasProductInstall = detectFlashVer(6,0,65);
  // Version check based upon the values defined in globals
  var hasRequestedVersion = detectFlashVer(requiredMajorVersion,requiredMinorVersion,requiredRevision);

  var cb =  _codebase_;
  if(cb && (cb.charAt(cb.length-1)=='/'))
      cb = cb.substring(0,cb.length-1);
  
  var prefix = ((cb==null)?(location.protocol+"//"+location.host+"/panorama"):cb)+"/flash/";

  // Check to see if a player with Flash Product Install is available and the version does not meet the requirements for playback
  if(hasProductInstall && !hasRequestedVersion)
  {	// MMdoctitle is the stored document.title value used by the installation process to close the window that started the process
	// This is necessary in order to close browser windows that are still utilizing the older version of the player after installation has completed
	// DO NOT MODIFY THE FOLLOWING FOUR LINES
	// Location visited after installation is complete if installation is required
	var mmPlayerType = (isIE == true) ? "ActiveX" : "PlugIn";
	var mmredirectURL = window.location;
    document.title = document.title.slice(0, 47) + " - Flash Player Installation";
    var mmdoctitle = document.title;

	ac_fl_RunContent(
		"src", prefix+"playerProductInstall",
		"FlashVars", "MMredirectURL="+mmredirectURL+'&MMplayerType='+mmPlayerType+'&MMdoctitle='+mmdoctitle+"",
		"width", ac_Width,
		"height", ac_Height,
		"align", "middle",
		"id", ac_Name,
		"quality", "high",
		"bgcolor", "#ffffff",
		"name", ac_Name,
		"allowScriptAccess","sameDomain",
		"type", "application/x-shockwave-flash",
                            "wmode", "transparent",
                            "allowFullScreen","true",
		"pluginspage", "http://www.adobe.com/go/getflashplayer"
	    );
  }
  else
  if(hasRequestedVersion)
  {	// if we've detected an acceptable version
	// embed the Flash Content SWF when all tests are passed
	var src = prefix+"PnFUI";	
		
	ac_fl_RunContent(
			"src", src,
			"width", ac_Width,
			"height", ac_Height,
			"align", "middle",
			"id", ac_Name,
			"quality", "high",
			"bgcolor", "#ffffff",
			"name", ac_Name,			
			"allowScriptAccess","sameDomain",
			"type", "application/x-shockwave-flash",
                                          "wmode", "transparent",
                                          "allowFullScreen","true",
			"pluginspage", "http://www.adobe.com/go/getflashplayer"
	       );
  }
  else
  { // flash is too old or we can't detect the plugin
    var alternateContent = '<center><h2>Panorama NovaView</h2></center><br>'
  	+ 'This content requires the Adobe Flash Player. '
   	+ '<a href=http://www.adobe.com/go/getflash/>Get Flash</a>';
    document.write(alternateContent);  
  }

 ac_ParametersTable[ac_Name] = ac_Parameters;
 ac_Width = 0;
 ac_Height = 0;
 ac_Name = null;
 ac_Parameters = "";
}


function ac_getRequest()
{ if(ac_request!=null)
    return(ac_request);
 
  if (!window.ActiveXObject)
    ac_request = new XMLHttpRequest();
  else
  {  for (var i = 0; i < ac_versions.length ; i++)
     { try
       { ac_request = new ActiveXObject(ac_versions[i]); }
       catch(e)
       { continue; }
       if(ac_request!=null)
         break;
     }
  }
  return(ac_request);
}


function ac_executeSyncCommand(command)
{  var req =  ac_getRequest();
   if(!req)
      return("#ERROR#XMLHttp creation error");

   req.open("POST","/panorama/connector.dll?",false);   
   req.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
   req.send(command+"&encodeZip=true");   

   if(req.status<400)
      return(req.responseText);
   else
     return("#ERROR#HTTP error: "+req.status);
}


function ac_loadTextFile(url)
{  var req =  ac_getRequest();
   if(!req)
      return("#ERROR#XMLHttp creation error");

   req.open("GET",url,false);      
   req.send(null);   

   if(req.status<400)
      return(req.responseText);
   else
     return("#ERROR#HTTP error: "+req.status);  
}


function ac_eval(command)
{  return(eval(command));
}