var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;	// true if we're on IE
var isWin = (navigator.appVersion.indexOf("Windows") != -1) ? true : false; // true if we're on Windows
var isMac = (navigator.appVersion.indexOf("Mac") != -1) ? true : false; //True if we're a mac (we'll assume QT there).
var hasJava = navigator.javaEnabled();
var qtPlugin = '';
var hasVB = false;
function detectQT()
{
    if (isMac)
        return true;
    if (!(isWin || isMac))
    	return false; //Linux may claim to support QT, but can't handle qtvr.

    if (hasVB)
    {
        //We'll use ActiveX to detect QT
        return aX_detectQT();
    }
    else
    {
        if (navigator.plugins)
        {
            for (var i = 0; i < navigator.plugins.length; i++)
            {
                if (navigator.plugins[i].name.indexOf("QuickTime") != -1)
                {
			qtPlugin = navigator.plugins[i].name;
                        return true;
                }
            }
        }
    }
    return false;
}
if (isIE && isWin)
{
    //We're going to need this ActiveX later.
    document.write('<SCR' + 'IPT LANGUAGE=VBScript\> \n');
    document.write('hasVB = true \n');
    document.write('Function aX_detectQT() \n');
    document.write('on error resume next \n');
    document.write('aX_detectQT = (IsObject(CreateObject("QuickTimeCheckObject.QuickTimeCheck.1"))) \n');
    document.write('End Function \n');
    document.write('</SCR' + 'IPT\> \n'); // hide from script
}

hasQT = detectQT();

function embedPano()
{
    forceJava = false;
    document.panoparams = arguments;
	
    if (typeof(noembed) != 'undefined' && noembed == true)
	return '';
	
    if ((!forceJava) && hasQT)
        return QTEmbedPano(arguments);
    else if (hasJava)
        return JavaEmbedPano(arguments);
    var javalink = (hasVB && document.getElementById) ? "javascript:JavaReplacePano(document.getElementById('_clempano'))" : "http://java.sun.com/webapps/getjava/BrowserRedirect?host=www.java.com";

    var qtlink = (hasVB && document.getElementById) ? "javascript:QTReplacePano(document.getElementById('_clempano'))" : "http://www.apple.com/quicktime/download/"; 
    
    var out =  "<div id='_clempano' align='center'>";
    out += "<p>You need either QuickTime or Java installed to view this content.</p>";
    out += '<a href="' + javalink + '" title="Get Java">';
    out += "<img src='http://www.clevr.com/static/get_java_blue-button.gif' alt='Get Java' /></a>";
    out += '  <a href="' + qtlink + '" title="Get QuickTime">';
    out += "<img src='http://www.clevr.com/static/getquicktime.png' alt='Get QuickTime' /></a></div>";
    return out;
}

function QTReplacePano(theDiv)
{
	theDiv.innerHTML = QTEmbedPano(document.panoparams);
}

function JavaReplacePano(theDiv)
{
	theDiv.innerHTML = JavaEmbedPano(document.panoparams);
}

function QTEmbedPano(args)
{
    params = new Array();
    for (i=0;i<args.length;i++)
    {
    	params[i] = args[i];
    }

    params[params.length] = 'controller';
    params[params.length] = 'true';
    params[params.length] = 'enablejavascript';
    params[params.length] = 'true';
    return _QTGenerate("QTEmbedPano", false, params);
}
	
        
function JavaEmbedPano(args)
{
    //Based on the QT Version
    // is the number of optional arguments even?
    if ( args.length < 4 || (0 != (args.length % 2)) )
    {
        _QTComplain(callingFcnName, gArgCountErr);
        return "";
    }
    
    // allocate an array, fill in the required attributes with fixed place params and defaults
    gTagAttrs = new Array();
    gTagAttrs["src"] = args[0];
    gTagAttrs["alt"] = "This site requires Java to be installed";
    gTagAttrs["width"] = args[1];
    gTagAttrs["height"] = args[2];
    gTagAttrs["codebase"] = "http://www.pilsburycastle.org.uk/virtualtour/";
    gTagAttrs["mayscript"] = "true";
    gTagAttrs["archive"] = "viewer.jar";
    gTagAttrs["code"] = "net.piradian.viewer.Viewer.class";
    

    var	attrName,
            attrValue;

    // add all of the optional attributes to the array
    for ( var ndx = 4; ndx < args.length; ndx += 2)
    {
        attrName = args[ndx].toLowerCase();
        attrValue = args[ndx + 1];
        gTagAttrs[attrName] = attrValue;
    }

    // init both tags with the required and "special" attributes
    var appletTag =  '<applet '
                                + _QTAddObjectAttr("width")
                                + _QTAddObjectAttr("height")
                                + _QTAddObjectAttr("codebase")
                                + _QTAddObjectAttr("name", "id")
                                + _QTAddObjectAttr("mayscript")
                                + _QTAddObjectAttr("archive")
                                + _QTAddObjectAttr("code")
                                + _QTAddObjectAttr("align")
                                + _QTAddObjectAttr("vspace")
                                + _QTAddObjectAttr("hspace")
                                + _QTAddObjectAttr("title")
                                + _QTAddObjectAttr("alt")
                                + '>\n'
                                + _QTAddObjectParam("src", 0)
                                + _QTAddObjectParam("controller", 0);
    _QTDeleteTagAttrs("src","width","height","codebase","name","mayscript",
	              "archive","code","hspace","vspace","alt","align","title");

    // and finally, add all of the remaining attributes to the embed and object
    for ( var attrName in gTagAttrs )
    {
        attrValue = gTagAttrs[attrName];
        if ( null != attrValue )
        {
            appletTag += _QTAddObjectParam(attrName, 0);
        }
    } 

    // endtags, we're done
    return appletTag + '\nYou must install Java in order to view this content.</ap' + 'plet' + '>';
}

/* BEGIN APPLE'S QTGenerator CODE */


/************** LOCALIZABLE GLOBAL VARIABLES ****************/

var gArgCountErr =	'The "%%" function requires an even number of arguments.'
				+	'\nArguments should be in the form "atttributeName", "attributeValue", ...';

/******************** END LOCALIZABLE **********************/

var gTagAttrs				= null;
var gQTGeneratorVersion		= 0.8;

function AC_QuickTimeVersion()	{ return gQTGeneratorVersion; }

function _QTComplain(callingFcnName, errMsg)
{
    errMsg = errMsg.replace("%%", callingFcnName);
	alert(errMsg);
}

function _QTAddAttribute(prefix, slotName, tagName)
{
	var		value;

	value = gTagAttrs[prefix + slotName];
	if ( null == value )
		value = gTagAttrs[slotName];

	if ( null != value )
	{
		if ( 0 == slotName.indexOf(prefix) && (null == tagName) )
			tagName = slotName.substring(prefix.length); 
		if ( null == tagName ) 
			tagName = slotName;
		return tagName + '="' + value + '" ';
	}
	else
		return "";
}

function _QTAddObjectAttr(slotName, tagName)
{
	// don't bother if it is only for the embed tag
	if ( 0 == slotName.indexOf("emb#") )
		return "";

	if ( 0 == slotName.indexOf("obj#") && (null == tagName) )
		tagName = slotName.substring(4); 

	return _QTAddAttribute("obj#", slotName, tagName);
}

function _QTAddEmbedAttr(slotName, tagName)
{
	// don't bother if it is only for the object tag
	if ( 0 == slotName.indexOf("obj#") )
		return "";

	if ( 0 == slotName.indexOf("emb#") && (null == tagName) )
		tagName = slotName.substring(4); 

	return _QTAddAttribute("emb#", slotName, tagName);
}


function _QTAddObjectParam(slotName, generateXHTML)
{
	var		paramValue;
	var		paramStr = "";
	var		endTagChar = (generateXHTML) ? ' />' : '>';

	if ( -1 == slotName.indexOf("emb#") )
	{
		// look for the OBJECT-only param first. if there is none, look for a generic one
		paramValue = gTagAttrs["obj#" + slotName];
		if ( null == paramValue )
			paramValue = gTagAttrs[slotName];

		if ( 0 == slotName.indexOf("obj#") )
			slotName = slotName.substring(4); 
	
		if ( null != paramValue )
			paramStr = '  <param name="' + slotName + '" value="' + paramValue + '"' + endTagChar + '\n';
	}

	return paramStr;
}

function _QTDeleteTagAttrs()
{
	for ( var ndx = 0; ndx < arguments.length; ndx++ )
	{
		var attrName = arguments[ndx];
		delete gTagAttrs[attrName];
		delete gTagAttrs["emb#" + attrName];
		delete gTagAttrs["obj#" + attrName];
	}
}

		

// generate an embed and object tag, return as a string
function _QTGenerate(callingFcnName, generateXHTML, args)
{
	// is the number of optional arguments even?
	if ( args.length < 4 || (0 != (args.length % 2)) )
	{
		_QTComplain(callingFcnName, gArgCountErr);
		return "";
	}
	
	// allocate an array, fill in the required attributes with fixed place params and defaults
	gTagAttrs = new Array();
	gTagAttrs["src"] = args[0];
	gTagAttrs["width"] = args[1];
	gTagAttrs["height"] = args[2];
	gTagAttrs["classid"] = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";
	gTagAttrs["pluginspage"] = "http://www.apple.com/quicktime/download/";

	// set up codebase attribute with specified or default version before parsing args so
	//  anything passed in will override
	var activexVers = args[3]
	if ( (null == activexVers) || ("" == activexVers) )
		activexVers = "6,0,2,0";
	gTagAttrs["codebase"] = "http://www.apple.com/qtactivex/qtplugin.cab#version=" + activexVers;

	var	attrName,
		attrValue;

	// add all of the optional attributes to the array
	for ( var ndx = 4; ndx < args.length; ndx += 2)
	{
		attrName = args[ndx].toLowerCase();
		attrValue = args[ndx + 1];

		// "name" and "id" should have the same value, the former goes in the embed and the later goes in
		//  the object. use one array slot 
		if ( "name" == attrName || "id" == attrName )
			gTagAttrs["name"] = attrValue;

		else 
			gTagAttrs[attrName] = attrValue;
	}

	// init both tags with the required and "special" attributes
	var objTag =  '<object '
					+ _QTAddObjectAttr("classid")
					+ _QTAddObjectAttr("width")
					+ _QTAddObjectAttr("height")
					+ _QTAddObjectAttr("codebase")
					+ _QTAddObjectAttr("name", "id")
					+ _QTAddObjectAttr("tabindex")
					+ _QTAddObjectAttr("hspace")
					+ _QTAddObjectAttr("vspace")
					+ _QTAddObjectAttr("border")
					+ _QTAddObjectAttr("align")
					+ _QTAddObjectAttr("class")
					+ _QTAddObjectAttr("title")
					+ _QTAddObjectAttr("accesskey")
					+ _QTAddObjectAttr("noexternaldata")
					+ '>\n'
					+ _QTAddObjectParam("src", generateXHTML);
	var embedTag = '  <embed '
					+ _QTAddEmbedAttr("src")
					+ _QTAddEmbedAttr("width")
					+ _QTAddEmbedAttr("height")
					+ _QTAddEmbedAttr("pluginspage")
					+ _QTAddEmbedAttr("name")
					+ _QTAddEmbedAttr("align")
					+ _QTAddEmbedAttr("tabindex");

	// delete the attributes/params we have already added
	_QTDeleteTagAttrs("src","width","height","pluginspage","classid","codebase","name","tabindex",
					"hspace","vspace","border","align","noexternaldata","class","title","accesskey");

	// and finally, add all of the remaining attributes to the embed and object
	for ( var attrName in gTagAttrs )
	{
		attrValue = gTagAttrs[attrName];
		if ( null != attrValue )
		{
			embedTag += _QTAddEmbedAttr(attrName);
			objTag += _QTAddObjectParam(attrName, generateXHTML);
		}
	} 

	// end both tags, we're done
	return objTag + embedTag + '> </em' + 'bed>\n</ob' + 'ject' + '>';
}

// return the object/embed as a string
function QT_GenerateOBJECTText()
{
	return _QTGenerate("QT_GenerateOBJECTText", false, arguments);
}

function QT_GenerateOBJECTText_XHTML()
{
	return _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments);
}

function QT_WriteOBJECT()
{
	document.writeln(_QTGenerate("QT_WriteOBJECT", false, arguments));
}

function QT_WriteOBJECT_XHTML()
{
	document.writeln(_QTGenerate("QT_WriteOBJECT_XHTML", true, arguments));
}



