var ie4 = (document.all && !document.getElementById);
var ie5 = (document.all && document.getElementById);
var ns6 = (!document.all && document.getElementById);
var tntCtrlVersion = "1.0.0.0";

function element(id)
{
	return document.getElementById(id);
}

var tntCtrl;

function doTNTCommand(string)
{
	if (tntCtrl)
	{
		return tntCtrl.doCommand(string);
	}
	return "";
}

function setTNTFocus()
{
	if(tntCtrl)
	{
		tntCtrl.SetFocus();
	}
}

function changeTurnToolTag(width, height, file, color, doInstall)
{
	var turntoolObject = '';
	if (doInstall)
	{
		turntoolObject += '<div id="TTInstallTag"><span style="text-align:center;border:0"><img src="images/install_turntool.png" alt="" onclick="manualInstallTurnTool();" /></span></div>';
	}
	if (ie4||ie5)
	{
		turntoolObject += ' <object id="TNTCtrl" style="cursor: pointer;" width="'+width+'" height="'+height+'" classid="CLSID:4a8a5cc4-d0f5-4e7b-aaea-bfc70446bfda"';
		turntoolObject += ' codebase="http://www.turntool.com/TurnTool2011.exe#version=1,0,0,0">';
		if (tntBackColor!='')
		{
			turntoolObject += '<param name="backcolor" value="'+color+'">';
		}
		turntoolObject += '<param name="tnttype" value="viewer">';
		turntoolObject += '<param name="tnt_id" value="TNTCtrl">';
		turntoolObject += '<param name="videoDevice" value="'+tntVideoDevice+'">';
		turntoolObject += '<param name="realtimeAntialias" value="'+tntRealtimeAntialias+'">';
		turntoolObject += '<param name="antialiasPasses" value="'+tntAntialiasPasses+'">';
		turntoolObject += '<param name="src" value=""></object>';
		turntoolObject += '<sc'+'r'+'ipt LANGUAGE=JavaScript FOR=TNTCtrl EVENT=TNTEvent(string)> execScript(string); </sc'+'r'+'ipt>';
	}
	else
	{
		if (doInstall==false)
		{
			turntoolObject = '<embed id="TNTCtrl" style="cursor: pointer;" width="'+width+'" height="'+height+'" ';
			if (tntBackColor!='')
			{
				turntoolObject += 'backcolor="'+color+'" ';
			}
			turntoolObject += 'tnttype="viewer" pluginspage="http://www.turntool.com" pluginsurl="http://www.turntool.com/TurnTool2011.xpi" videoDevice="'+tntVideoDevice+'" realtimeAntialias="'+tntRealtimeAntialias+'" antialiasPasses="'+tntAntialiasPasses+'" type="application/x-tt2011"></embed>';
		}
	}
	element('TurnTool').innerHTML = turntoolObject;
}

function manualInstallTurnTool()
{
	if (ie4||ie5)
	{
		window.location.href = 'http://www.turntool.com/TurnTool2011.exe';
	}
	else
	{
		var xpi = {'TurnTool2011 Installation':'http://www.turntool.com/TurnTool2011.xpi'};
		InstallTrigger.install(xpi,installFinish);
	}
}

function initTurnTool()
{
	if(TNTsupportedPlatform())
	{
		var doInstall = true;
		if (isTurnToolInstalled()==true)
		{
			if (isTurnToolNewestVersion()==true)
			{
				doInstall = false;
			}
		}
		changeTurnToolTag(tntSizeX,tntSizeY,tntSource, tntBackColor, doInstall);
		if (doInstall)
		{
			if (ie4||ie5)
			{
			}
			else
			{
				manualInstallTurnTool();
			}
		}
	}	
}

function isTurnToolNewestVersion()
{
	var tntInstalled = false;
	if(ie4||ie5)
	{
		try
		{
			var xObj = new ActiveXObject("TT2011.TNTCtrl");
			if (xObj)
			{
				var version = xObj.version.split(".");
				var minversion = tntCtrlVersion.split(".");
				for (var i=0; i<minversion.length; i++)
				{
					if (i >= version.length)
						break;
					if (version[i] > minversion[i])
					{
						tntInstalled = true;
						break;
					}
					if (version[i] < minversion[i])
						break;
					if (i == (minversion.length-1))
						tntInstalled = true;
				}
			}
		}
		catch (e)
		{
		}
	}
	else
	{
		var isSupported = navigator.mimeTypes['application/x-tt2011'];
		isSupported = isSupported && isSupported.enabledPlugin; //in case they disabled it
		if(isSupported)
		{
			var v = navigator.plugins.namedItem("TurnTool2011");
			if(v && v.description)
			{
				var version = v.description.replace(/([a-zA-Z]|\s)+/, "").split(".");
				var minversion = tntCtrlVersion.split(".");
				for (var i=0; i<minversion.length; i++)
				{
					if (i >= version.length)
						break;
					if (version[i] > minversion[i])
					{
						tntInstalled = true;
						break;
					}
					if (version[i] < minversion[i])
						break;
					if (i == (minversion.length-1))
						tntInstalled = true;
				}
			}
		}	
	}
	return tntInstalled;
}

function isTurnToolInstalled()
{
	var tntInstalled = false;
	if (ie4||ie5)
	{
		try
		{
			var xObj = new ActiveXObject("TT2011.TNTCtrl");
			if (xObj)
			{
				tntInstalled = true;
			}
		}
		catch (e)
		{
		}
	}
	else
	{
		var v = navigator.plugins.namedItem("TurnTool2011");
		if(v) 
		{
			tntInstalled = true;
		}
	}
	return tntInstalled;
}


function installFinish(url, result)
{
	if (result>=0)
	{
		element('TurnTool').innerHTML = 'You must restart your browser to view the content of this page.<br />Please reopen this page after restart of your browser.';
		document.title = 'The installation requires that you restart your browser';
	}
	else if(result == -210)
	{
		alert('You must install the TurnTool2011 to see the 3d content of this page.\n\nFor more information about the TurnTool2011, visit http://www.turntool.com');
	}
	else
	{
		alert('The installation failed, please close all browser windows and try again.\n\nIf the problem continues, try restarting your computer.\n\nIf the problem still continues, please contact your content provider.');
	}
}

function TNTsupportedPlatform()
{
	if (navigator.platform.toString().indexOf("Win") != -1)
	{
		if (navigator.appVersion.indexOf("MSIE") != -1)
		{
			return true;
		}
		if (navigator.userAgent.toLowerCase().indexOf("firefox") != -1)
		{ 
			return true;
		}
	}
	return false;
}

function doCommand(commandEditID)
{
	var command = element(commandEditID).value;
	if (command)
	{
		var returnValue = doTNTCommand(command);
		if (returnValue)
		{
			debugOut(command+' || Return Value = "'+returnValue+'"');
		}
		else
		{
			debugOut(command);
		}
	}
}

function debugOut(debugInfo)
{
	if (tntDebug)
	{
		if (tntDebugToConsole)
		{
			if(typeof window.console !== 'undefined')
			{
				console.log("%o", debugInfo);
			}
		}
		if (tntDebugToHTML)
		{
			var debugTag = element('DebugInfo');
			if (debugTag)
			{
				var currDebugInfo = debugTag.innerHTML;
				debugInfo += '<br />';
				debugInfo += currDebugInfo;
				debugTag.innerHTML = debugInfo;
			}
		}
	}
}			

function addEvent(obj, type, fn)
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj.attachEvent( "on"+type, function() { obj["e"+type+fn](); } );
	}
}

function removeEvent(obj, type, fn)
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj["e"+type+fn] );
		obj["e"+type+fn] = null;
	}
}

