﻿// JavaScript File
// Detection code based on Apple sample code: http://developer.apple.com/internet/webcontent/examples/detectplugins_source.html

var RATIO_43 = 1.33;		// 4:3 aspect ratio
var RATIO_169 = 1.78;		// 16:9 aspect ratio
var PLAYER_WIDTH = 480;		// previous value: 38
var PLAYER_HEIGHT = Math.abs(PLAYER_WIDTH / RATIO_43);

// determine which player to use
function pickPlayer(qtVideo, wmpVideo, divId)
{
	if(detectQuickTime())
	{
		renderQuickTime(qtVideo, divId);
		return;
	}
	
	if(detectWindowsMedia())
	{
		renderWmp(wmpVideo, divId);
		return;
	}
	
	offerPlayer(divId);
}

// render quicktime player
function renderQuickTime(videoFile, divId)
{
	var pDiv = document.getElementById(divId);
	if(pDiv)
	{
		pDiv.innerHTML = '<object id="qtPlayer" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" width="' + PLAYER_WIDTH + '" height="' + PLAYER_HEIGHT + '">'
			+ '<param name="src" value="' + videoFile + '" />'
			+ '<param name="autoplay" value="false" />'
			+ '<param name="controller" value="true" />'
			+ '<param name="enablejavascript" value="true" />'
			+ '<param name="scale" value="ToFit" />'
			+ '<embed name="qtPlayer" width="' + PLAYER_WIDTH + '" height="' + PLAYER_HEIGHT + '" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/" controller="true" scale="ToFit" enablejavascript="true" autoplay="true" src="' + videoFile + '"  />'
			+ '</object>';
	}
}

// render windows media player
function renderWmp(videoFile, divId)
{
	var pDiv = document.getElementById(divId);
	if(pDiv)
	{
		pDiv.innerHTML = '<object id="player" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" width="' + PLAYER_WIDTH + '" height="' + PLAYER_HEIGHT + '">'
			+ '<param name="URL" value="' + videoFile + '" />'
			+ '<param name="enabled" value="true" />'
			+ '<param name="AutoStart" value="false" />'
			+ '</object>';
	}
}

// render quicktime and wmp download links
function offerPlayer(divId)
{
	var pDiv = document.getElementById(divId);
	if(pDiv)
	{
		pDiv.innerHTML = '<div style="width: 100%; height: 150px; padding: 30px;">'
			+ '<a href="http://www.apple.com/quicktime/download/" target="_blank"><img src="../images/qt7badge_getQTfreeDownload.gif" alt="Get QuickTime" border="0" /></a>'
			+ '<br /><br />'
			+ '<a href="http://www.microsoft.com/windows/windowsmedia/download" target="_blank"><img src="../images/mediaplayer.gif" alt="Get Windows Media Player" border="0" /></a>'
			+ '</div>';
	}
}

// initialize global variables
var detectableWithVB = false;
var pluginFound = false;

function canDetectPlugins() {
    if( detectableWithVB || (navigator.plugins && navigator.plugins.length > 0) ) {
	return true;
    } else {
	return false;
    }
}

function detectQuickTime(redirectURL, redirectIfFound) {
    pluginFound = detectPlugin('QuickTime');
    // if not found, try to detect with VisualBasic
    if(!pluginFound && detectableWithVB) {
	pluginFound = detectQuickTimeActiveXControl();
    }
    return redirectCheck(pluginFound, redirectURL, redirectIfFound);
}

function detectWindowsMedia(redirectURL, redirectIfFound) {
    pluginFound = detectPlugin('Windows Media');
    // if not found, try to detect with VisualBasic
    if(!pluginFound && detectableWithVB) {
	pluginFound = detectActiveXControl('MediaPlayer.MediaPlayer.1');
    }
    return redirectCheck(pluginFound, redirectURL, redirectIfFound);
}

function detectPlugin() {
    // allow for multiple checks in a single pass
    var daPlugins = detectPlugin.arguments;
    // consider pluginFound to be false until proven true
    var pluginFound = false;
    // if plugins array is there and not fake
    if (navigator.plugins && navigator.plugins.length > 0) {
	var pluginsArrayLength = navigator.plugins.length;
	// for each plugin...
	for (pluginsArrayCounter=0; pluginsArrayCounter < pluginsArrayLength; pluginsArrayCounter++ ) {
	    // loop through all desired names and check each against the current plugin name
	    var numFound = 0;
	    for(namesCounter=0; namesCounter < daPlugins.length; namesCounter++) {
		// if desired plugin name is found in either plugin name or description
		if( (navigator.plugins[pluginsArrayCounter].name.indexOf(daPlugins[namesCounter]) >= 0) || 
		    (navigator.plugins[pluginsArrayCounter].description.indexOf(daPlugins[namesCounter]) >= 0) ) {
		    // this name was found
		    numFound++;
		}   
	    }
	    // now that we have checked all the required names against this one plugin,
	    // if the number we found matches the total number provided then we were successful
	    if(numFound == daPlugins.length) {
		pluginFound = true;
		// if we've found the plugin, we can stop looking through at the rest of the plugins
		break;
	    }
	}
    }
    return pluginFound;
} // detectPlugin

function goURL(daURL) {
    // if the browser can do it, use replace to preserve back button
    if(javascriptVersion1_1) {
	window.location.replace(daURL);
    } else {
	window.location = daURL;
    }
    return;
}

function redirectCheck(pluginFound, redirectURL, redirectIfFound) {
    // check for redirection
    if( redirectURL && ((pluginFound && redirectIfFound) || 
	(!pluginFound && !redirectIfFound)) ) {
	// go away
	//goURL(redirectURL); // preserved for future functionality
	return pluginFound;
    } else {
	// stay here and return result of plugin detection
	return pluginFound;
    }	
}

// Here we write out the VBScript block for MSIE Windows
if ((navigator.userAgent.indexOf('MSIE') != -1) && (navigator.userAgent.indexOf('Win') != -1)) {
    document.writeln('<script language="VBscript">');

    document.writeln('\'do a one-time test for a version of VBScript that can handle this code');
    document.writeln('detectableWithVB = False');
    document.writeln('If ScriptEngineMajorVersion >= 2 then');
    document.writeln('  detectableWithVB = True');
    document.writeln('End If');

    document.writeln('\'this next function will detect most plugins');
    document.writeln('Function detectActiveXControl(activeXControlName)');
    document.writeln('  on error resume next');
    document.writeln('  detectActiveXControl = False');
    document.writeln('  If detectableWithVB Then');
    document.writeln('     detectActiveXControl = IsObject(CreateObject(activeXControlName))');
    document.writeln('  End If');
    document.writeln('End Function');

    document.writeln('\'and the following function handles QuickTime');
    document.writeln('Function detectQuickTimeActiveXControl()');
    document.writeln('  on error resume next');
    document.writeln('  detectQuickTimeActiveXControl = False');
    document.writeln('  If detectableWithVB Then');
    document.writeln('    detectQuickTimeActiveXControl = False');
    document.writeln('    hasQuickTimeChecker = false');
    document.writeln('    Set hasQuickTimeChecker = CreateObject("QuickTimeCheckObject.QuickTimeCheck.1")');
    document.writeln('    If IsObject(hasQuickTimeChecker) Then');
    document.writeln('      If hasQuickTimeChecker.IsQuickTimeAvailable(0) Then ');
    document.writeln('        detectQuickTimeActiveXControl = True');
    document.writeln('      End If');
    document.writeln('    End If');
    document.writeln('  End If');
    document.writeln('End Function');

    document.writeln('</scr' + 'ipt>');
}
