/* Helper to embed the 3DVIA player, see <http://player.studio.3dvia.com/> */

var compatibilityVersion_Major = 2;
var compatibilityVersion_Minor = 13;
var compatibilityVersion_Build = 194;


var ag = navigator.userAgent.toLowerCase();
var is_windows  = ag.indexOf("windows")!=-1;  
var is_mac      = ag.indexOf("mac")!=-1; 
var is_macintel = is_mac && (ag.indexOf("intel")!=-1);
var is_safari   = ag.indexOf("safari")!=-1; 

var version = 0;
var index = ag.indexOf("version");
if (index != -1) {
	version = parseFloat(ag.substring(index+8));
}
var is_safari4up = is_safari && version >= 4; 


function IsOperatingSystemSupported(){
	return is_windows || (is_macintel && is_safari4up);
}

function AutomaticReload() 
{
	navigator.plugins.refresh();
	if(player3dvia.isInstalled()) {
		setTimeout('window.location.reload()', 5000);		            	
	} else {
		setTimeout('AutomaticReload()', 500);
	}
}


var player3dvia = {
	MIME_TYPE: 'application/x-3dvia-mpweb',
	INSTALLER: '3DVIAPlayer-Installer.exe',
	INSTALLER_MACOS: '3DVIAPlayer-Installer.pkg',
	SERVER_HTTP: 'http://player.studio.3dvia.com/',
	SERVER_HTTPS: 'https://3dviastudio.sslcs.cdngc.net/',
	CONTENT_ROOT: 'www.3dvia.com/3dsearch/Content/',
	
	GeckoPlayerDllHere: function()
	{
	  // here we go through the plug-in loaded by the bowser
	  // to look for the virtools one.
	  for(i=0;i<navigator.plugins.length;i++) {
		myplug = navigator.plugins[i];
		// first we check the name of the plug-in
		index = myplug.filename.lastIndexOf('\\');
		if (index!=-1) {
		  sub = myplug.filename.substring(index+1,myplug.filename.length);
		  if (sub.toLowerCase().indexOf("np3dviaplayer")!=0) {
			continue;
		  }
		} else if (myplug.filename.toLowerCase().indexOf("np3dviaplayer")!=0) {
		  continue;
		}
		// now we check the mime type supported by the plug-in  
		for(j=0;j<myplug.length;j++) {
		  if(myplug[j].type==player3dvia.MIME_TYPE) {
			return myplug;
		  }
		}
	  }
	  // the plug-in has not been found
	  return null;
	},
	isInstalled: function()
	{
		/* Gecko only */
		var installed = false;
		if (navigator.mimeTypes && navigator.mimeTypes.length)
		{
			var plugin = navigator.mimeTypes[player3dvia.MIME_TYPE];
			if (plugin && plugin.enabledPlugin)
			{
    			installed = true;
				if (player3dvia.isOlderThanCompatibility()) {
					installed = false;
				}				
			}
		}
		return installed;
	},
	isOlderThanCompatibility: function()
	{
		/* Gecko only */
		var older = false;

		var myplug = player3dvia.GeckoPlayerDllHere();
		if (myplug==null) {
			return older;
		}
		var description = myplug.description;			
		index = description.indexOf("(");
		if(index == -1) {
			return older;
		}
		index2 = description.indexOf(")");    
		version = description.substr(index+1,index2-index);
		index++;
		index2 = description.indexOf(".",index);
		var maj = description.substr(index,index2-index);
		index=index2+1;
		index2 = description.indexOf(".",index);
		var min = description.substr(index,index2-index);
		index=index2+1;
		index2 = description.indexOf(")");
		var build = description.substr(index,index2-index); 
		
		if (maj< compatibilityVersion_Major
			|| ((maj == compatibilityVersion_Major) && (min < compatibilityVersion_Minor))
			|| ((maj == compatibilityVersion_Major) && (min == compatibilityVersion_Minor) && (build < compatibilityVersion_Build)))            
		{
			older = true;
		} 		
		return older;
	},
	generateHTML: function(width, height, experienceId, playerId, params)
	{
		/* Arguments validation */
		if(arguments.length < 3) return;
		var playerId = arguments[3] || '3dvia-player';
		var params   = arguments[4] || '';
		/* HTML output generation */
		var html = '';
		var scheme = 'http://';
		
		var securescheme = ("https:" == document.location.protocol) ? true : false;
		var forcesecurescheme = (params.match(/forcescheme\s*=\s*https/gi) != null) ? true : false;
		if (params.match(/forcescheme/gi) != null) {
			securescheme = forcesecurescheme;
		}
		var installurl = "";
		if(securescheme) {
			installurl += player3dvia.SERVER_HTTPS;
			scheme = 'https://';
		} else {
			installurl += player3dvia.SERVER_HTTP;	
			scheme = 'http://';			
		}
		installurl += (is_macintel ? player3dvia.INSTALLER_MACOS : player3dvia.INSTALLER);

		if(navigator.appName == 'Microsoft Internet Explorer' || player3dvia.isInstalled())
		{
			html += '<object ' + (navigator.appName == 'Microsoft Internet Explorer' ? 'id="' + playerId + '" ' : '') + 'width="' + width + '" height="' + height + '" classid="CLSID:F705A1E9-0E4C-4F32-A647-2DE40809969A" codebase="' + installurl + '#Version='+compatibilityVersion_Major+','+compatibilityVersion_Minor+','+compatibilityVersion_Build+'">';
   			html += '<param name="content_src" value="' + experienceId + '"/>';
			if(params != null) { html += '<param name="startup_options" value="' + params + '"/>'; }
   			html += '<embed ' + (navigator.appName == 'Netscape' ? 'id="' + playerId + '"' : '') + 'width="' + width + '" height="' + height + '" type="' + player3dvia.MIME_TYPE + '" pluginspage="' + installurl + '" content_src="' + experienceId + '"';
			if(params != null) { html += ' startup_options="' + params + '"'; }
			html += '/>';
			html += '</object>';
		}
		else
		{
			html += '<div style="width:' + width + 'px;height:' + height + 'px;text-align:center;font-size:12px;font-family:arial,helvetica,geneva,sans-serif;">';
			if(IsOperatingSystemSupported() && !player3dvia.isInstalled() && navigator.appName == 'Netscape') 
			{				
				if(parseInt(width) < 271 || parseInt(height) < 151) 
				{
					html += '<a style="display:block;margin:0 auto 0 auto;color:#00A8FF;text-decoration:none;border:1px solid #CCCCCC;background:#F2F2F2;" href="' + installurl + '" OnClick="javascript:AutomaticReload();">';
					html += 'This experience requires the 3DVIA Player.<br/><strong>Click here to install it</strong>';
					html += '</a>';
				} 
				else 
				{
					html += '<a style="display:block;width:270px;height:150px;margin:5px auto 0 auto;padding:5px 15px 0px 15px;color:#00A8FF;text-decoration:none;border:1px solid #CCCCCC;background:#F2F2F2;" href="' + installurl + '" OnClick="javascript:AutomaticReload();">';
					html += 'This experience requires the 3DVIA Player,<br/>';
					html += '<div style="width:112px;margin:10px auto 0 auto;background:white;">';
					html += '<div style="background:#00A8FF;color:white;">-&nbsp;&nbsp;&nbsp;Install Now&nbsp;&nbsp;&nbsp;-</div>';
					html += '<img src="' + scheme + this.CONTENT_ROOT + experienceId + '_M1.jpg?DefaultImage=splash_screen_default_M1.jpg" style="border:1px solid #00A8FF;width:110px;border-top:none;">';
					html += '</div></a>';
				}
			}
			else
			{
				html += '<a style="display:block;width:270px;height:64px;margin:20px auto 0 auto;padding:18px 15px 0px 15px;color:#00A8FF;text-decoration:none;border:1px solid #CCCCCC;background:#F2F2F2;" href="http://www.3dvia.com/studio/3dvia-player">';
				html += 'This experience is not yet available for your browser or Operating System.<br/><strong>Click here to know about the system requirements</strong>.';
				html += '</a>';
			}
			html += '</div>';
		}
		return html;
    },
	embedAt: function(wrapperId, width, height, experienceId, playerId, alwaysReplaceWrapper, params)
	{
		/* Arguments validation */
		if(arguments.length < 4) return;
		var playerId = arguments[4] || '3dvia-player';
		var alwaysReplaceWrapper = arguments[5] == null ? true : arguments[5]
		/* Writing to the DOM */
		if(alwaysReplaceWrapper || navigator.appName == 'Microsoft Internet Explorer' || player3dvia.isInstalled()) {
			var html = player3dvia.generateHTML(width, height, experienceId, playerId, params);
			document.getElementById(wrapperId).innerHTML = html;
		}
	},
	embedHere: function(width, height, experienceId, playerId, params)
	{
		/* Arguments validation */
		if(arguments.length < 3) return;
		var playerId = arguments[3] || '3dvia-player';
		/* Writing to the DOM */
		var html = player3dvia.generateHTML(width, height, experienceId, playerId, params);
		document.write(html);
	}
}

