// Quicktime Player
//

var isMSIE = false;
var isSafari = false;
var qtVersion = 0;
var ieVersion = 0;
var isQTInstalled = false;

function ValidateQuicktime() {
	if (isQTInstalled)
		return true;
		
	if (window.ActiveXObject) {
		var control = null;
		isIE = true;
		try {
				control = new ActiveXObject('QuickTime.QuickTime');
		} catch (e) {
				// Do nothing
		}
		if (control) {
				// In case QuickTimeCheckObject.QuickTimeCheck does not exist
				isQTInstalled = true;
		}

		try {
				// This generates a user prompt in Internet Explorer 7
				control = new ActiveXObject('QuickTimeCheckObject.QuickTimeCheck');
		} catch (e) {
				return;
		}
		if (control) {
				// In case QuickTime.QuickTime does not exist
				isQTInstalled = true;

				// Get version
				qtVersion = control.QuickTimeVersion.toString(16); // Convert to hex
				qtVersion = qtVersion.substring(0, 1) + '.' + qtVersion.substring(1, 3);
				qtVersion = parseFloat(qtVersion);
		}
		
		// Determine the IE version
		var ua = window.navigator.userAgent;
		var msie = ua.indexOf("MSIE ");
		
		if (msie > 0)
			ieVersion = parseInt(ua.substring(msie + 5, ua.indexOf(".", msie)));
		
	} else {
		if (navigator.appVersion.indexOf("Safari") != -1)
			isSafari = true;

		var plugin = navigator.mimeTypes["video/quicktime"].enabledPlugin;
		if (plugin) {
			var name = plugin.name;
			var versionIdx = name.lastIndexOf(" ");
			
			if (versionIdx > -1)
				qtVersion = name.substring(versionIdx + 1);
			else
				qtVersion = plugin.name;
				
			isQTInstalled = true;
		}
	}
}

function QuicktimeVersion() {
	ValidateQuicktime();
	return qtVersion;
}

function QuicktimeIsInstalled() {
	ValidateQuicktime();
	return isQTInstalled;
}

function AddParameter(name, value) {
	return "<param value='" + value + "' name='" + name + "'>";
}

function AddAttribute(name, value) {
	return " " + name + "='" + value + "'";
}

/* IE6 compatible
<OBJECT id="qt_player" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0" 
classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="1" height="1">
	<PARAM value="sample.mov" name="src"/>
	<OBJECT type="video/quicktime" data="sample.mov" id="qt_playerInner" width="1" height="1">
		<PARAM value="false" name="controller">
		<PARAM value="true" name="enablejavascript">
		<PARAM value="true" name="hidden">
		<PARAM value="false" name="autoplay">
		<PARAM value="myself" name="target">
	</OBJECT>
	<PARAM value="false" name="controller"/>
	<PARAM value="true" name="enablejavascript"/>
	<PARAM value="true" name="hidden"/>
	<PARAM value="false" name="autoplay"/>
	<PARAM value="myself" name="target"/>
</OBJECT>

IE7 compatable
<OBJECT id="qt_player" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0" 
classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="1" height="1">
	<PARAM value="sample.mov" name="src"/>
	<embed type="video/quicktime" src="sample.mov" id="qt_playerInner" 
		width="1" height="1" controller="false"
		enablejavascript="true" hidden="true" autoplay="false"
		target="myself"
	</embed>
</OBJECT>

*/

function PackageMovie(name, url, options) {
	// Movie has an outer object and one inner one
	// On IE, the inner must show up immediately after the src is set so we will
	// add a placeholder and then push our inner object there
	var outer = "<object";
	var activeXVersion = '6,0,2,0';
	var placeholder = 'INNER_OBJECT';
	var width = 1;
	var height = 1;
	
	if (options['width'])
		width = options['width'];
	if (options['height'])
		height = options['height'];

	// Outer
	outer += AddAttribute('id', name);
	outer += AddAttribute('codebase', 'http://www.apple.com/qtactivex/qtplugin.cab#version=' + activeXVersion);
	outer += AddAttribute('classid', 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B');
	
	
	outer += AddAttribute('width', width);
	outer += AddAttribute('height', height);
	outer += ">";
	outer += AddParameter('src', url);
	outer += placeholder;

	// Inner
	var inner = "<object";
	var parameterFN = AddAttribute;
	
	if (ieVersion >=7) {
		inner = "<embed";
	}
		
	inner += AddAttribute('type', 'video/quicktime');
	inner += AddAttribute('data', url);
	inner += AddAttribute('id', name + 'Inner');
	inner += AddAttribute('width', width);
	inner += AddAttribute('height', height);
	inner += ">";
	
	// Add common parameters
	for (var parameter in options) {
		var parameterName = parameter.toLowerCase();
		
		// Skip funky allkeys
		if (parameterName == "allkeys")
			continue;
		
		switch(parameterName) {
			case('type'):
			case('src'):
			case('data'):
			case('classid'):
			case('name'):
			case('id'):
				// already added
				break;
				
			default:
				if (ieVersion >= 7) {
					inner += AddAttribute(parameterName, options[parameter]);
					outer += AddAttribute(parameterName, options[parameter]);			
				} else {
					inner += AddParameter(parameterName, options[parameter]);
					outer += AddParameter(parameterName, options[parameter]);
				}
				break;
		}
	}
	
	outer += "<\/object>";
	
	if (ieVersion >= 7)
		inner += "<\/embed>";
	else
		inner += "<\/object>";
	
	// Insert the inner 
	return outer.replace(placeholder, inner);
}

function InsertPlayer(player, dest) {
//	AppendLog("player: " + player);
	dest.innerHTML = player;
}

function QTPlayerName() {
	return "QTPlayer";
}

function QTCodePlayerName() {
	return "QTCodePlayer";
}

function QTPlayer() {
	return document.getElementById(QTPlayerName());
}

function QTCodePlayer() {
	return document.getElementById(QTCodePlayerName());
}

function InstallPlayer(url) {
	ValidateQuicktime();
	var playerDef = PackageMovie(QTPlayerName(), url, {
		width: 1,
		height: 1,
		controller: false,
		enablejavascript: true,
		hidden: true,
		autoplay: true,
		target: 'myself'
	});
	
	InsertPlayer(playerDef, document.getElementById("QTPlayer_div"));
}

function InstallCodePlayerCodes(code) {
	var player = QTCodePlayer();
	var idx = 1;
	for (var i = 0; i < 2; ++i) {
		for (var j = 0; j < code.length; ++j) {
			var str = "<" + code.substr(j, 1) + ".mov>T<myself>";
			player.SetQTNEXTUrl(idx++, str);		
		}
		
		if (i == 0)
			player.SetQTNEXTUrl(idx++, "<Chirp.mov>T<myself>");
	}
	
	player.SetAutoPlay(true);
	player.Play();
}

// Pass decoded code (e.g., "1234")
function InstallCodePlayer(code) {
	var playerDef = PackageMovie(QTCodePlayerName(), "../Common/Chirp.mov", {
		width: 1,
		height: 1,
		hidden: true,
		enablejavascript: true,
		autoplay: false,
		controller: false,
		target: 'myself'
	});
	
	InsertPlayer(playerDef, document.getElementById("QTCodePlayer_div"));
	setTimeout("InstallCodePlayerCodes('" + code + "')", 500);	
}

